From 86abd6c1c063f490cb16e1b4bcd142ef0cb7fada Mon Sep 17 00:00:00 2001 From: Alexandre Duret-Lutz Date: Tue, 10 Nov 2015 08:31:54 +0100 Subject: [PATCH] Use -Bsymbolic-functions and -Bsymbolic This avoids dynamic lookups to resolve symbols inside the library, but disallows symbol interposition. * m4/symbolic.m4: New file. * buddy/m4/symbolic.m4: New link. * configure.ac, buddy/configure.ac: Add AX_SYMBOLIC. * buddy/src/Makefile.am, iface/ltsmin/Makefile.am, src/Makefile.am, wrap/python/Makefile.am: Link with $(SYMBOLIC_LDFLAGS). --- buddy/configure.ac | 1 + buddy/m4/symbolic.m4 | 1 + buddy/src/Makefile.am | 2 +- configure.ac | 1 + iface/ltsmin/Makefile.am | 1 + m4/symbolic.m4 | 31 +++++++++++++++++++++++++++++++ src/Makefile.am | 2 +- wrap/python/Makefile.am | 5 +++-- 8 files changed, 40 insertions(+), 4 deletions(-) create mode 120000 buddy/m4/symbolic.m4 create mode 100644 m4/symbolic.m4 diff --git a/buddy/configure.ac b/buddy/configure.ac index c3876b2b1..af7d1195d 100644 --- a/buddy/configure.ac +++ b/buddy/configure.ac @@ -19,6 +19,7 @@ AC_PROG_YACC AC_PROG_CXX LT_INIT([win32-dll]) +AX_BSYMBOLIC # Use -Werror since using -fvisibility under MinGW is only a warning. # (The option is ignored anyway since this does not make sense under windows). diff --git a/buddy/m4/symbolic.m4 b/buddy/m4/symbolic.m4 new file mode 120000 index 000000000..fa1b28284 --- /dev/null +++ b/buddy/m4/symbolic.m4 @@ -0,0 +1 @@ +../../m4/symbolic.m4 \ No newline at end of file diff --git a/buddy/src/Makefile.am b/buddy/src/Makefile.am index de770944d..ac4a4b247 100644 --- a/buddy/src/Makefile.am +++ b/buddy/src/Makefile.am @@ -5,7 +5,7 @@ BUDDY_FLAGS = -I$(top_builddir) -DVERSION=23 -DBUDDY_DLL_EXPORTS -DBUDDY_DLL lib_LTLIBRARIES = libbddx.la # See the `Updating version info' node of the Libtool manual before # changing this. -libbddx_la_LDFLAGS = -no-undefined -version-info 0:0:0 +libbddx_la_LDFLAGS = -no-undefined -version-info 0:0:0 $(SYMBOLIC_LDFLAGS) libbddx_la_CPPFLAGS = $(BUDDY_FLAGS) libbddx_la_SOURCES = \ bddio.c \ diff --git a/configure.ac b/configure.ac index 580ce4a65..0d7d32642 100644 --- a/configure.ac +++ b/configure.ac @@ -118,6 +118,7 @@ LTDL_INIT([subproject convenience]) link_all_deplibs=yes link_all_deplibs_CXX=yes +AX_BSYMBOLIC AC_ARG_ENABLE([python], [AC_HELP_STRING([--disable-python], diff --git a/iface/ltsmin/Makefile.am b/iface/ltsmin/Makefile.am index 793afea84..d20011160 100644 --- a/iface/ltsmin/Makefile.am +++ b/iface/ltsmin/Makefile.am @@ -29,6 +29,7 @@ lib_LTLIBRARIES = libspotltsmin.la libspotltsmin_la_LIBADD = \ $(top_builddir)/src/libspot.la \ $(top_builddir)/ltdl/libltdlc.la -lpthread +libspotltsmin_la_LDFLAGS = -no-undefined $(SYMBOLIC_LDFLAGS) libspotltsmin_la_SOURCES = ltsmin.cc noinst_PROGRAMS = modelcheck diff --git a/m4/symbolic.m4 b/m4/symbolic.m4 new file mode 100644 index 000000000..238dc1a1f --- /dev/null +++ b/m4/symbolic.m4 @@ -0,0 +1,31 @@ +dnl This was addapted from a patch submitted written by H.J. Lu for GCC. +dnl https://gcc.gnu.org/ml/gcc/2007-01/msg00363.html +dnl The -Bsymbolic-functions is no-longer part of the --help of ld, but +dnl we can call ld -Bsymbolic-functions --help and it will choke if the +dnl option is not supported. +dnl Substitute SYMBOLIC_LDFLAGS with -Bsymbolic-functions for GNU linker +dnl if it is supported. +AC_DEFUN([AC_LIB_PROG_LD_GNU_SYMBOLIC], +[AC_CACHE_CHECK([if the GNU linker ($LD) supports -Bsymbolic-functions], +acl_cv_prog_gnu_ld_symbolic, [ +acl_cv_prog_gnu_ld_symbolic=no +if test x"$with_gnu_ld" = x"yes"; then + if $LD -Bsymbolic-functions -Bsymbolic --help>/dev/null 2>&1