[cairo-commit] 2 commits - pixman/src src/cairoint.h

Carl Worth cworth at kemper.freedesktop.org
Thu Sep 7 12:51:56 PDT 2006


 pixman/src/fbpict.c        |    1 -
 pixman/src/iccolor.c       |    1 -
 pixman/src/icformat.c      |    1 -
 pixman/src/icimage.c       |    4 ----
 pixman/src/icint.h         |   13 -------------
 pixman/src/icrect.c        |    1 -
 pixman/src/pixregion.c     |    8 --------
 pixman/src/slim_internal.h |    5 +++--
 src/cairoint.h             |    5 +++--
 9 files changed, 6 insertions(+), 33 deletions(-)

New commits:
diff-tree d598cd8d61863ff91f505241a773595aec7e8445 (from 203d70a562ce3ffca51069aecda01a9f2bb61ff5)
Author: Nicholas Miell <nmiell at gmail.com>
Date:   Wed Sep 6 15:45:00 2006 -0700

    Fix the AMD64 final link by removing SLIM from pixman
    
    In order for SLIM's PLT indirection avoidance to work, everything in
    the library that makes internal function calls needs to see the
    relevant slim_hidden_proto() macro in addition to the function's
    prototype. However, external headers used by clients of the shared
    library should not use the SLIM macros at all.
    
    Pixman is a rather odd case -- it's mostly independent from cairo, so
    it has it's own public interface, but it's built as a part of cairo
    instead of its own shared library. This means that cairo would need to
    see all of pixman's slim_hidden_proto() macros in order to function
    and it doesn't currently, which results in a link failure on AMD64
    systems and on i386 systems (I think, I haven't actually verified
    this) it produces a shared object that isn't actally sharable.
    
    I have no idea why exactly the link failure only showed up as a result
    of commit e06246b9b1015eb89112f628d5820fcb350a7335. I think it has
    something to do with the pixman functions no longer having PLT entries
    at all, but the exact interaction isn't clear to me.
    
    However, all of these pixman functions aren't part of the cairo ABI
    (which is why they were marked pixman_private in the first place),
    which means that the SLIMification of pixman is largely pointless --
    they aren't externally visible, so they don't need PLT entries at
    all. Furthermore, while pixman may eventually be shared among cairo
    and X, I'm told that this sharing will be source-level only, which
    means it won't ever be an actual shared library and thus won't ever
    need SLIM at all.
    
    So, I just removed all use of SLIM in pixman (leaving behind
    slim_internal.h for the future edification of anyone who cares).This
    fixes the AMD64 link failure and passes the check-plt & check-def
    parts of make check.
    
    Signed-off-by: Nicholas Miell <nmiell at gmail.com>

diff --git a/pixman/src/fbpict.c b/pixman/src/fbpict.c
index 07c293a..675d1fb 100644
--- a/pixman/src/fbpict.c
+++ b/pixman/src/fbpict.c
@@ -1902,7 +1902,6 @@ pixman_composite (pixman_operator_t	op,
     }
     pixman_region_destroy (region);
 }
-slim_hidden_def(pixman_composite);
 
 /* The CPU detection code needs to be in a file not compiled with
  * "-mmmx -msse", as gcc would generate CMOV instructions otherwise
diff --git a/pixman/src/iccolor.c b/pixman/src/iccolor.c
index 716382f..26b4aaf 100644
--- a/pixman/src/iccolor.c
+++ b/pixman/src/iccolor.c
@@ -53,7 +53,6 @@ pixman_color_to_pixel (const pixman_form
     a = a << format->alpha;
     *pixel = r|g|b|a;
 }
-slim_hidden_def(pixman_color_to_pixel);
 
 static uint16_t
 FbFillColor (uint32_t pixel, int bits)
diff --git a/pixman/src/icformat.c b/pixman/src/icformat.c
index f55d443..bf93a6c 100644
--- a/pixman/src/icformat.c
+++ b/pixman/src/icformat.c
@@ -171,7 +171,6 @@ pixman_format_init (pixman_format_t *for
 			     (format->blueMask << format->blue) |
 			     (format->greenMask << format->green));
 }
-slim_hidden_def(pixman_format_init);
 
 void
 pixman_format_destroy (pixman_format_t *format)
diff --git a/pixman/src/icimage.c b/pixman/src/icimage.c
index 11e8396..44c4c8b 100644
--- a/pixman/src/icimage.c
+++ b/pixman/src/icimage.c
@@ -45,7 +45,6 @@ pixman_image_create (pixman_format_t	*fo
 
     return image;
 }
-slim_hidden_def(pixman_image_create);
 
 pixman_image_t *
 pixman_image_create_for_data (FbBits *data, pixman_format_t *format, int width, int height, int bpp, int stride)
@@ -369,7 +368,6 @@ pixman_image_set_component_alpha (pixman
     if (image)
 	image->componentAlpha = component_alpha;
 }
-slim_hidden_def(pixman_image_set_component_alpha);
 
 int
 pixman_image_set_transform (pixman_image_t		*image,
@@ -412,7 +410,6 @@ pixman_image_set_repeat (pixman_image_t	
     if (image)
 	image->repeat = repeat;
 }
-slim_hidden_def(pixman_image_set_repeat);
 
 void
 pixman_image_set_filter (pixman_image_t	*image,
@@ -505,7 +502,6 @@ pixman_image_destroy (pixman_image_t *im
 
     free (image);
 }
-slim_hidden_def(pixman_image_destroy);
 
 void
 pixman_image_destroyClip (pixman_image_t *image)
diff --git a/pixman/src/icint.h b/pixman/src/icint.h
index e1265eb..c846a51 100644
--- a/pixman/src/icint.h
+++ b/pixman/src/icint.h
@@ -33,8 +33,6 @@
 #include <string.h>
 #include <limits.h>
 
-#include "slim_internal.h"
-
 #ifndef __GNUC__
 #define __inline
 #endif
@@ -852,17 +850,6 @@ pixman_private int
 pixman_transform_point (pixman_transform_t	*transform,
 		  pixman_vector_t	*vector);
 
-/* Avoid unnessecary PLT entries.  */
-
-slim_hidden_proto(pixman_image_create)
-slim_hidden_proto(pixman_color_to_pixel)
-slim_hidden_proto(pixman_format_init)
-slim_hidden_proto(pixman_image_destroy)
-slim_hidden_proto(pixman_fill_rectangles)
-slim_hidden_proto(pixman_image_set_component_alpha)
-slim_hidden_proto(pixman_image_set_repeat)
-slim_hidden_proto(pixman_composite)
-
 #include "icrop.h"
 
 /* XXX: For now, I'm just wholesale pasting Xserver/render/picture.h here: */
diff --git a/pixman/src/icrect.c b/pixman/src/icrect.c
index 7253bfa..e4d0c12 100644
--- a/pixman/src/icrect.c
+++ b/pixman/src/icrect.c
@@ -363,4 +363,3 @@ bail1:
 	;
     }
 }
-slim_hidden_def(pixman_fill_rectangles);
diff --git a/pixman/src/pixregion.c b/pixman/src/pixregion.c
index c9bc219..5112157 100644
--- a/pixman/src/pixregion.c
+++ b/pixman/src/pixregion.c
@@ -50,7 +50,6 @@ SOFTWARE.
 #include <string.h>
 
 #include "pixregionint.h"
-#include "slim_internal.h"
 
 #if defined (__GNUC__) && !defined (NO_INLINES)
 #define INLINE	__inline
@@ -89,10 +88,6 @@ pixman_init (pixman_region16_t *region, 
 static void
 pixman_uninit (pixman_region16_t *region);
 
-slim_hidden_proto(pixman_region_create_simple)
-slim_hidden_proto(pixman_region_copy)
-slim_hidden_proto(pixman_region_union)
-
 /*
  * The functions in this file implement the Region abstraction used extensively
  * throughout the X11 sample server. A Region is simply a set of disjoint
@@ -327,7 +322,6 @@ pixman_region_create_simple (pixman_box1
 
     return region;
 }
-slim_hidden_def(pixman_region_create_simple);
 
 /*****************************************************************
  *   RegionInit(pReg, rect, size)
@@ -452,7 +446,6 @@ pixman_region_copy(pixman_region16_t *ds
 	  dst->data->numRects * sizeof(pixman_box16_t));
     return PIXMAN_REGION_STATUS_SUCCESS;
 }
-slim_hidden_def(pixman_region_copy);
 
 /*======================================================================
  *	    Generic Region Operator
@@ -1232,7 +1225,6 @@ pixman_region_union(pixman_region16_t *n
     good(newReg);
     return PIXMAN_REGION_STATUS_SUCCESS;
 }
-slim_hidden_def(pixman_region_union);
 
 /*======================================================================
  *	    Batch Rectangle Union
diff-tree 203d70a562ce3ffca51069aecda01a9f2bb61ff5 (from 404e88ea6a08371280fb9fbc1f903e16ac868bf4)
Author: Nicholas Miell <nmiell at gmail.com>
Date:   Wed Sep 6 14:43:44 2006 -0700

    Make the SLIM macros robust in the face of macro-renamed symbols
    
    This doesn't actually fix the AMD64 link failure, but it does make the
    foo/EXT_foo/INT_foo symbol names generated by the slim_hidden_proto()
    and slim_hidden_def() macros consistent in the face of the meddling of
    pixman-remap.h.
    
    Signed-off-by: Nicholas Miell <nmiell at gmail.com>

diff --git a/pixman/src/slim_internal.h b/pixman/src/slim_internal.h
index 742059c..3d1e9a6 100644
--- a/pixman/src/slim_internal.h
+++ b/pixman/src/slim_internal.h
@@ -78,8 +78,9 @@
    level.  */
 
 #if __GNUC__ >= 3 && defined(__ELF__)
-# define slim_hidden_proto(name)	slim_hidden_proto1(name, INT_##name)
-# define slim_hidden_def(name)		slim_hidden_def1(name, INT_##name)
+# define slim_hidden_proto(name)	slim_hidden_proto1(name, slim_hidden_int_name(name))
+# define slim_hidden_def(name)		slim_hidden_def1(name, slim_hidden_int_name(name))
+# define slim_hidden_int_name(name) INT_##name
 # define slim_hidden_proto1(name, internal)				\
   extern __typeof (name) name						\
 	__asm__ (slim_hidden_asmname (internal))			\
diff --git a/src/cairoint.h b/src/cairoint.h
index bf7d288..f17be94 100644
--- a/src/cairoint.h
+++ b/src/cairoint.h
@@ -68,8 +68,9 @@
 CAIRO_BEGIN_DECLS
 
 #if __GNUC__ >= 3 && defined(__ELF__)
-# define slim_hidden_proto(name)	slim_hidden_proto1(name, INT_##name)
-# define slim_hidden_def(name)		slim_hidden_def1(name, INT_##name)
+# define slim_hidden_proto(name)	slim_hidden_proto1(name, slim_hidden_int_name(name))
+# define slim_hidden_def(name)		slim_hidden_def1(name, slim_hidden_int_name(name))
+# define slim_hidden_int_name(name) INT_##name
 # define slim_hidden_proto1(name, internal)				\
   extern __typeof (name) name						\
 	__asm__ (slim_hidden_asmname (internal))			\


More information about the cairo-commit mailing list