From 360b1ef5a1811594751234ffe630beabd138ba2e Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Mon, 6 Aug 2018 07:50:35 +0200 Subject: [PATCH] Enable -Bsymbolic-functions linker flag whenever possible It was discovered fairly recently that JSON parsing libraries use common pattern to name their exported symbols (they all use json_ prefix). So eventually it happens that two symbols from two different libraries have the same name. This will lead to cryptic crashes (see [1] and [2]). Linking with -Bsymbolic-functions prevents this. 1: https://gitlab.gnome.org/GNOME/json-glib/issues/33 2: https://groups.google.com/forum/#!topic/jansson-users/7Efx-RI45IU Signed-off-by: Michal Privoznik --- configure.ac | 29 +++++++++++++++++++++++++++++ src/Makefile.am | 3 ++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index ca12b59..735fe89 100644 --- a/configure.ac +++ b/configure.ac @@ -107,6 +107,35 @@ AC_ARG_ENABLE([initial-hashtable-order], AC_DEFINE_UNQUOTED([INITIAL_HASHTABLE_ORDER], [$initial_hashtable_order], [Number of buckets new object hashtables contain is 2 raised to this power. E.g. 3 -> 2^3 = 8.]) +AC_ARG_ENABLE([Bsymbolic], + [AS_HELP_STRING([--disable-Bsymbolic], + [Avoid linking with -Bsymbolic-function])], + [], [with_Bsymbolic=check]) + +if test "x$with_Bsymbolic" != "xno" ; then + AC_MSG_CHECKING([for -Bsymbolic-functions linker flag]) + saved_LDFLAGS="${LDFLAGS}" + LDFLAGS=-Wl,-Bsymbolic-functions + AC_TRY_LINK( + [], [int main (void) { return 0; }], + [AC_MSG_RESULT([yes]) + have_Bsymbolic=yes], + [AC_MSG_RESULT([no]) + have_Bsymbolic=no] + ) + LDFLAGS="${saved_LDFLAGS}" + + if test "x$with_Bsymbolic" = "xcheck" ; then + with_Bsymbolic=$have_Bsymbolic; + fi + if test "x$with_Bsymbolic:x$have_Bsymbolic" = "xyes:xno" ; then + AC_MSG_ERROR([linker support is required for -Bsymbolic]) + fi +fi + +AS_IF([test "x$with_Bsymbolic" = "xyes"], [JSON_BSYMBOLIC_LDFLAGS=-Wl[,]-Bsymbolic-functions]) +AC_SUBST(JSON_BSYMBOLIC_LDFLAGS) + if test x$GCC = xyes; then AC_MSG_CHECKING(for -Wno-format-truncation) wnoformat_truncation="-Wno-format-truncation" diff --git a/src/Makefile.am b/src/Makefile.am index f823195..63ff7c1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -24,4 +24,5 @@ libjansson_la_SOURCES = \ libjansson_la_LDFLAGS = \ -no-undefined \ -export-symbols-regex '^json_' \ - -version-info 15:0:11 + -version-info 15:0:11 \ + @JSON_BSYMBOLIC_LDFLAGS@