From 11e494a572ce81a57c05fbe4214dd36b1c8ac4cf Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Fri, 20 Sep 2013 12:37:04 -0700 Subject: [PATCH] mesa: Use -Bsymbolic in the linker to locally resolve Mesa-internal symbols. 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. Reviewed-by: Ian Romanick --- 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 d280e389a62..4c99603ccee 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 978917c6c3e..f66967d751f 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 27c67d10ec0..541e0d6e067 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 2b47f75340f..7172e62558c 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 4357922341b..fc0482a6ee7 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 43de05972b0..d13b803aecc 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 d3da19651cb..fb9b8a05072 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 106c7db9b6c..686e478734f 100644 --- a/src/mesa/libdricore/Makefile.am +++ b/src/mesa/libdricore/Makefile.am @@ -37,7 +37,11 @@ libdricore@VERSION@_la_SOURCES = \ $(LIBGLCPP_FILES) \ $(LIBGLSL_GENERATED_CXX_FILES) \ $(LIBGLSL_FILES) -libdricore@VERSION@_la_LDFLAGS = -version-number 1:0 +libdricore@VERSION@_la_LDFLAGS = \ + -version-number 1:0 \ + -Wl,-Bsymbolic \ + $() + libdricore@VERSION@_la_LIBADD = \ ../program/libdricore_program.la \ $() -- 2.30.2