[gjs] build: Use -Bsymbolic-functions by default if available



commit a5c220b45763b3f778674a088abe090f533728df
Author: Colin Walters <walters verbum org>
Date:   Sat Dec 1 14:41:19 2012 -0500

    build: Use -Bsymbolic-functions by default if available
    
    While we have much larger performance problems right now, using
    -Bsymbolic-functions to avoid internal PLT indirection is an easy win.
    
    This is the same code that both GLib and GTK+ have.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=689455

 Makefile-modules.am |    1 +
 Makefile.am         |    1 +
 configure.ac        |   23 +++++++++++++++++++++++
 3 files changed, 25 insertions(+), 0 deletions(-)
---
diff --git a/Makefile-modules.am b/Makefile-modules.am
index 47e7a51..b2ec685 100644
--- a/Makefile-modules.am
+++ b/Makefile-modules.am
@@ -28,6 +28,7 @@ JS_NATIVE_MODULE_LIBADD =	\
         libgjs.la		\
         $(GJS_LIBS)
 JS_NATIVE_MODULE_LDFLAGS =	\
+	$(EXTRA_LINK_FLAGS)	\
         -module -avoid-version -no-undefined -rdynamic
 
 langNative_la_CFLAGS = 				\
diff --git a/Makefile.am b/Makefile.am
index 3231754..97ea9ca 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -96,6 +96,7 @@ libgjs_la_CPPFLAGS =		\
 libgjs_la_CFLAGS = 		\
 	$(AM_CFLAGS)
 libgjs_la_LDFLAGS = 		\
+	$(EXTRA_LINK_FLAGS)	\
 	-export-symbols-regex "^[^_]" -version-info 0:0:0	\
 	-no-undefined \
 	-rdynamic
diff --git a/configure.ac b/configure.ac
index b17d580..8cffc20 100644
--- a/configure.ac
+++ b/configure.ac
@@ -208,6 +208,29 @@ fi
 # Checks for typedefs, structures, and compiler characteristics.
 AC_C_CONST
 
+dnl
+dnl Check for -Bsymbolic-functions linker flag used to avoid
+dnl intra-library PLT jumps, if available.
+dnl
+AC_ARG_ENABLE(Bsymbolic,
+              [AS_HELP_STRING([--disable-Bsymbolic],
+                              [avoid linking with -Bsymbolic])],,
+              [SAVED_LDFLAGS="${LDFLAGS}"
+               AC_MSG_CHECKING([for -Bsymbolic-functions linker flag])
+               LDFLAGS=-Wl,-Bsymbolic-functions
+               AC_TRY_LINK([], [int main (void) { return 0; }],
+                           AC_MSG_RESULT(yes)
+                           enable_Bsymbolic=yes,
+                           AC_MSG_RESULT(no)
+                           enable_Bsymbolic=no)
+               LDFLAGS="${SAVED_LDFLAGS}"])
+
+if test "x${enable_Bsymbolic}" = "xyes"; then
+  EXTRA_LINK_FLAGS=-Wl,-Bsymbolic-functions
+fi
+
+AC_SUBST(EXTRA_LINK_FLAGS)
+
 gjsjsdir="\${datadir}/gjs-1.0"
 gjsnativedir="\${libdir}/gjs-1.0"
 AC_SUBST([gjsjsdir])



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]