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 <mprivozn@redhat.com>
This commit is contained in:
parent
37147b8a23
commit
360b1ef5a1
29
configure.ac
29
configure.ac
@ -107,6 +107,35 @@ AC_ARG_ENABLE([initial-hashtable-order],
|
|||||||
AC_DEFINE_UNQUOTED([INITIAL_HASHTABLE_ORDER], [$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.])
|
[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
|
if test x$GCC = xyes; then
|
||||||
AC_MSG_CHECKING(for -Wno-format-truncation)
|
AC_MSG_CHECKING(for -Wno-format-truncation)
|
||||||
wnoformat_truncation="-Wno-format-truncation"
|
wnoformat_truncation="-Wno-format-truncation"
|
||||||
|
@ -24,4 +24,5 @@ libjansson_la_SOURCES = \
|
|||||||
libjansson_la_LDFLAGS = \
|
libjansson_la_LDFLAGS = \
|
||||||
-no-undefined \
|
-no-undefined \
|
||||||
-export-symbols-regex '^json_' \
|
-export-symbols-regex '^json_' \
|
||||||
-version-info 15:0:11
|
-version-info 15:0:11 \
|
||||||
|
@JSON_BSYMBOLIC_LDFLAGS@
|
||||||
|
Loading…
Reference in New Issue
Block a user