From: Max Filippov Date: Thu, 23 Apr 2015 18:46:59 +0000 (+0200) Subject: Allow disabling symbol versioning at configure time X-Git-Tag: elfutils-0.162~88 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bafacacaf7659a4933604662daba26a480b29a8d;p=thirdparty%2Felfutils.git Allow disabling symbol versioning at configure time Due to missing symbol versioning support in uClibc calls to versioned functions that internally call different version of themselves results in infinite recursion. Introduce macro SYMBOL_VERSIONING and use it instead of plain SHARED to decide whether symbol versioning is needed. Control this macro definition with new configure option --disable-symbol-versioning. Signed-off-by: Max Filippov Signed-off-by: Mark Wielaard --- diff --git a/ChangeLog b/ChangeLog index 9a0a82db1..d45bf673e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2015-04-23 Max Filippov + + * configure.ac: Add --disable-symbol-versioning. + 2015-04-14 Mark Wielaard * configure.ac (ac_cv_c99): Add explicit checks for all GNU99 diff --git a/config/ChangeLog b/config/ChangeLog index 586ebb034..bff3b6dd1 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,7 @@ +2015-04-23 Max Filippov + + * eu.am (DEFS.os): New variable. + 2015-03-18 Petr Machata * known-dwarf.awk (comment): Drop all uses of this variable. diff --git a/config/eu.am b/config/eu.am index faf8add48..6103a3ef6 100644 --- a/config/eu.am +++ b/config/eu.am @@ -38,16 +38,22 @@ AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) +DEFS.os = -DPIC -DSHARED +if SYMBOL_VERSIONING +DEFS.os += -DSYMBOL_VERSIONING +else +endif + %.os: %.c %.o if AMDEP - if $(COMPILE.os) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \ + if $(COMPILE.os) -c -o $@ -fpic $(DEFS.os) -MT $@ -MD -MP \ -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \ then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \ rm -f "$(DEPDIR)/$*.Tpo"; \ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ fi else - $(COMPILE.os) -c -o $@ -fpic -DPIC -DSHARED $< + $(COMPILE.os) -c -o $@ -fpic $(DEFS.os) $< endif CLEANFILES = *.gcno *.gcda diff --git a/configure.ac b/configure.ac index ed2c96441..be0157343 100644 --- a/configure.ac +++ b/configure.ac @@ -241,6 +241,13 @@ AS_HELP_STRING([--disable-textrelcheck], [Disable textrelcheck being a fatal error])) AM_CONDITIONAL(FATAL_TEXTREL, [test "x$enable_textrelcheck" != "xno"]) +AC_ARG_ENABLE([symbol-versioning], +AS_HELP_STRING([--disable-symbol-versioning], + [Disable symbol versioning in shared objects])) +AM_CONDITIONAL(SYMBOL_VERSIONING, [test "x$enable_symbol_versioning" != "xno"]) +AS_IF([test "x$enable_symbol_versioning" = "xno"], + [AC_MSG_WARN([Disabling symbol versioning breaks ABI compatibility.])]) + dnl The directories with content. dnl Documentation. diff --git a/lib/ChangeLog b/lib/ChangeLog index 44152131a..166f047d8 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,7 @@ +2015-04-23 Max Filippov + + * eu-config.h: Use SYMBOL_VERSIONING as guard. + 2014-01-17 Lei Zhang * crc32_file.c: Include config.h. diff --git a/lib/eu-config.h b/lib/eu-config.h index 3afff26a9..5bb21c145 100644 --- a/lib/eu-config.h +++ b/lib/eu-config.h @@ -163,7 +163,7 @@ asm (".section predict_data, \"aw\"; .previous\n" #define ELFUTILS_HEADER(name) -#ifdef SHARED +#ifdef SYMBOL_VERSIONING # define OLD_VERSION(name, version) \ asm (".globl _compat." #version "." #name "\n" \ "_compat." #version "." #name " = " #name "\n" \ @@ -181,8 +181,8 @@ asm (".section predict_data, \"aw\"; .previous\n" # define OLD_VERSION(name, version) /* Nothing for static linking. */ # define NEW_VERSION(name, version) /* Nothing for static linking. */ # define COMPAT_VERSION_NEWPROTO(name, version, prefix) \ - error "should use #ifdef SHARED" -# define COMPAT_VERSION(name, version, prefix) error "should use #ifdef SHARED" + error "should use #ifdef SYMBOL_VERSIONING" +# define COMPAT_VERSION(name, version, prefix) error "should use #ifdef SYMBOL_VERSIONING" #endif diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index d4cd3f5a9..cbaad8523 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,12 @@ +2015-04-23 Max Filippov + + * core-file.c (_compat_without_executable_dwfl_core_file_report): + Guard with SYMBOL_VERSIONING. + * dwfl_module_build_id.c (_compat_vaddr_at_end_dwfl_module_build_id): + Likewise. + * dwfl_report_elf.c (_compat_without_add_p_vaddr_dwfl_report_elf): + Likewise. + 2015-04-02 Mark Wielaard * segment.c (insert): Check correct number of lookup_elts. diff --git a/libdwfl/core-file.c b/libdwfl/core-file.c index 324e9d2d4..bbe0899d8 100644 --- a/libdwfl/core-file.c +++ b/libdwfl/core-file.c @@ -588,7 +588,7 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable) INTDEF (dwfl_core_file_report) NEW_VERSION (dwfl_core_file_report, ELFUTILS_0.158) -#ifdef SHARED +#ifdef SYMBOL_VERSIONING int _compat_without_executable_dwfl_core_file_report (Dwfl *dwfl, Elf *elf); COMPAT_VERSION_NEWPROTO (dwfl_core_file_report, ELFUTILS_0.146, without_executable) diff --git a/libdwfl/dwfl_module_build_id.c b/libdwfl/dwfl_module_build_id.c index 350bbf837..c9a42ca72 100644 --- a/libdwfl/dwfl_module_build_id.c +++ b/libdwfl/dwfl_module_build_id.c @@ -101,7 +101,7 @@ dwfl_module_build_id (Dwfl_Module *mod, INTDEF (dwfl_module_build_id) NEW_VERSION (dwfl_module_build_id, ELFUTILS_0.138) -#ifdef SHARED +#ifdef SYMBOL_VERSIONING COMPAT_VERSION (dwfl_module_build_id, ELFUTILS_0.130, vaddr_at_end) int diff --git a/libdwfl/dwfl_report_elf.c b/libdwfl/dwfl_report_elf.c index 3a4ae2ef1..624284cf6 100644 --- a/libdwfl/dwfl_report_elf.c +++ b/libdwfl/dwfl_report_elf.c @@ -321,7 +321,7 @@ dwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, int fd, INTDEF (dwfl_report_elf) NEW_VERSION (dwfl_report_elf, ELFUTILS_0.156) -#ifdef SHARED +#ifdef SYMBOL_VERSIONING Dwfl_Module * _compat_without_add_p_vaddr_dwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, int fd,