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 <ian.d.romanick@.intel.com>
This commit is contained in:
Eric Anholt 2013-09-20 12:37:04 -07:00
parent 10ef949424
commit 11e494a572
8 changed files with 15 additions and 7 deletions

View file

@ -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

View file

@ -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) \

View file

@ -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 \

View file

@ -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) \

View file

@ -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) \

View file

@ -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) \

View file

@ -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)

View file

@ -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 \
$()