[Mesa-dev] [PATCH 7/7] mesa: Use -Bsymbolic in the linker to locally resolve Mesa-internal symbols.

Eric Anholt eric at anholt.net
Fri Sep 20 18:52:25 PDT 2013


Normally, LD_PRELOAD will take precedence over your own symbols, which you
want for things like malloc() in libc.  But we don't have any local
symbols we would want overridden (like hash_table_insert(), for example!),
so tell the linker to resolve them internally.  This also avoids calls
through the PLT.

Saves almost 100k on libdricore's size, and gets us a bunch of the
performance back that we had with non-dricore.
---
 configure.ac                             | 3 +++
 src/mesa/drivers/dri/i915/Makefile.am    | 2 +-
 src/mesa/drivers/dri/i965/Makefile.am    | 2 +-
 src/mesa/drivers/dri/nouveau/Makefile.am | 2 +-
 src/mesa/drivers/dri/r200/Makefile.am    | 2 +-
 src/mesa/drivers/dri/radeon/Makefile.am  | 2 +-
 src/mesa/drivers/dri/swrast/Makefile.am  | 3 ++-
 src/mesa/libdricore/Makefile.am          | 6 +++++-
 8 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/configure.ac b/configure.ac
index ca9228c..fd1c655 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1032,10 +1032,13 @@ if test "x$enable_dri" = xyes; then
     # put all the necessary libs together
     DRI_LIB_DEPS="$DRI_LIB_DEPS $SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIB -lm $PTHREAD_LIBS $DLOPEN_LIBS"
     GALLIUM_DRI_LIB_DEPS="$GALLIUM_DRI_LIB_DEPS $SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIB -lm $CLOCK_LIB $PTHREAD_LIBS $DLOPEN_LIBS"
+
+    DRI_DRIVER_LDFLAGS="-module -avoid-version -shared -Wl,-Bsymbolic"
 fi
 AM_CONDITIONAL(NEED_LIBDRICORE, test -n "$DRI_DIRS")
 AC_SUBST([EXPAT_INCLUDES])
 AC_SUBST([DRI_LIB_DEPS])
+AC_SUBST([DRI_DRIVER_LDFLAGS])
 AC_SUBST([GALLIUM_DRI_LIB_DEPS])
 
 case $DRI_DIRS in
diff --git a/src/mesa/drivers/dri/i915/Makefile.am b/src/mesa/drivers/dri/i915/Makefile.am
index 978917c..f66967d 100644
--- a/src/mesa/drivers/dri/i915/Makefile.am
+++ b/src/mesa/drivers/dri/i915/Makefile.am
@@ -52,7 +52,7 @@ dri_LTLIBRARIES = i915_dri.la
 endif
 
 i915_dri_la_SOURCES = $(i915_FILES)
-i915_dri_la_LDFLAGS = -module -avoid-version -shared
+i915_dri_la_LDFLAGS = $(DRI_DRIVER_LDFLAGS)
 i915_dri_la_LIBADD = \
 	../common/libdricommon.la \
 	$(DRI_LIB_DEPS) \
diff --git a/src/mesa/drivers/dri/i965/Makefile.am b/src/mesa/drivers/dri/i965/Makefile.am
index 27c67d1..541e0d6 100644
--- a/src/mesa/drivers/dri/i965/Makefile.am
+++ b/src/mesa/drivers/dri/i965/Makefile.am
@@ -72,7 +72,7 @@ TEST_LIBS = \
 i965_dri_la_SOURCES =
 nodist_EXTRA_i965_dri_la_SOURCES = dummy2.cpp
 i965_dri_la_LIBADD = $(COMMON_LIBS)
-i965_dri_la_LDFLAGS = -module -avoid-version -shared
+i965_dri_la_LDFLAGS = $(DRI_DRIVER_LDFLAGS)
 
 TESTS = \
         test_eu_compact \
diff --git a/src/mesa/drivers/dri/nouveau/Makefile.am b/src/mesa/drivers/dri/nouveau/Makefile.am
index 2b47f75..7172e62 100644
--- a/src/mesa/drivers/dri/nouveau/Makefile.am
+++ b/src/mesa/drivers/dri/nouveau/Makefile.am
@@ -42,7 +42,7 @@ endif
 nouveau_vieux_dri_la_SOURCES = \
 	$(NOUVEAU_C_FILES)
 
-nouveau_vieux_dri_la_LDFLAGS = -module -avoid-version -shared
+nouveau_vieux_dri_la_LDFLAGS = $(DRI_DRIVER_LDFLAGS)
 nouveau_vieux_dri_la_LIBADD = \
 	../common/libdricommon.la \
 	$(DRI_LIB_DEPS) \
diff --git a/src/mesa/drivers/dri/r200/Makefile.am b/src/mesa/drivers/dri/r200/Makefile.am
index 4357922..fc0482a 100644
--- a/src/mesa/drivers/dri/r200/Makefile.am
+++ b/src/mesa/drivers/dri/r200/Makefile.am
@@ -45,7 +45,7 @@ endif
 r200_dri_la_SOURCES = \
         $(R200_C_FILES)
 
-r200_dri_la_LDFLAGS = -module -avoid-version -shared
+r200_dri_la_LDFLAGS = $(DRI_DRIVER_LDFLAGS)
 r200_dri_la_LIBADD = \
 	../common/libdricommon.la \
 	$(DRI_LIB_DEPS) \
diff --git a/src/mesa/drivers/dri/radeon/Makefile.am b/src/mesa/drivers/dri/radeon/Makefile.am
index 43de059..d13b803 100644
--- a/src/mesa/drivers/dri/radeon/Makefile.am
+++ b/src/mesa/drivers/dri/radeon/Makefile.am
@@ -45,7 +45,7 @@ endif
 radeon_dri_la_SOURCES = \
         $(RADEON_C_FILES)
 
-radeon_dri_la_LDFLAGS = -module -avoid-version -shared
+radeon_dri_la_LDFLAGS = $(DRI_DRIVER_LDFLAGS)
 radeon_dri_la_LIBADD = \
 	../common/libdricommon.la \
 	$(DRI_LIB_DEPS) \
diff --git a/src/mesa/drivers/dri/swrast/Makefile.am b/src/mesa/drivers/dri/swrast/Makefile.am
index d3da196..fb9b8a0 100644
--- a/src/mesa/drivers/dri/swrast/Makefile.am
+++ b/src/mesa/drivers/dri/swrast/Makefile.am
@@ -42,7 +42,8 @@ endif
 swrast_dri_la_SOURCES = \
 	$(SWRAST_C_FILES)
 
-swrast_dri_la_LDFLAGS = -module -avoid-version -shared
+swrast_dri_la_LDFLAGS = $(DRI_DRIVER_LDFLAGS)
+
 swrast_dri_la_LIBADD = \
 	$(DRI_LIB_DEPS)
 
diff --git a/src/mesa/libdricore/Makefile.am b/src/mesa/libdricore/Makefile.am
index 106c7db..686e478 100644
--- a/src/mesa/libdricore/Makefile.am
+++ b/src/mesa/libdricore/Makefile.am
@@ -37,7 +37,11 @@ libdricore at VERSION@_la_SOURCES = \
 	$(LIBGLCPP_FILES) \
 	$(LIBGLSL_GENERATED_CXX_FILES) \
 	$(LIBGLSL_FILES)
-libdricore at VERSION@_la_LDFLAGS = -version-number 1:0
+libdricore at VERSION@_la_LDFLAGS = \
+        -version-number 1:0 \
+	-Wl,-Bsymbolic \
+        $()
+
 libdricore at VERSION@_la_LIBADD = \
         ../program/libdricore_program.la \
         $()
-- 
1.8.4.rc3



More information about the mesa-dev mailing list