From bb4d2ac2cc637c61232624d9d359b8d3f031e3e9 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 25 Nov 2014 06:47:44 -0800 Subject: Display symbol version when dumping dynrelocs Both readelf/objdump know how to get symbol version string for dynamic symbols. This patch extracts this functionality into a separate function and uses it to add symbol version string to versioned symbol names when dumping dynamic relocations. bfd/ PR binutils/16496 * elf-bfd.h (bfd_elf_get_symbol_version_string): New. * elf.c (bfd_elf_get_symbol_version_string): New. Extracted from bfd_elf_print_symbol. (bfd_elf_print_symbol): Use it. binutils/ PR binutils/16496 * objdump.c (objdump_print_symname): Call bfd_elf_get_symbol_version_string to get ELF symbol version string. Append version string if needed. * readelf.c (versioned_symbol_info): New enum. (get_symbol_version_string): New. Extracted from process_symbol_table. (dump_relocations): Add a new argument to indicate if dynamic symbol table is used. Use get_symbol_version_string to get symbol version string for dynamic symbol. Append version string if needed. (process_relocs): Updated dump_relocations call. (process_symbol_table): Use get_symbol_version_string. ld/testsuite/ PR binutils/16496 * ld-cris/weakref3.d: Add symbol version string to versioned symbol names in dynamic relocation. * ld-cris/weakref4.d: Likewise. * ld-elfvers/vers24.rd: Likewise. * ld-elf/pr16496a.c: New file. * ld-elf/pr16496a.map: Likewise. * ld-elf/pr16496b.c: Likewise. * ld-elf/pr16496b.od: Likewise. * ld-elf/shared.exp (build_tests): Add libpr16496a.so and libpr16496b.so tests. --- ld/testsuite/ChangeLog | 16 ++++++++++++++++ ld/testsuite/ld-cris/weakref3.d | 4 ++-- ld/testsuite/ld-cris/weakref4.d | 2 +- ld/testsuite/ld-elf/pr16496a.c | 4 ++++ ld/testsuite/ld-elf/pr16496a.map | 4 ++++ ld/testsuite/ld-elf/pr16496b.c | 5 +++++ ld/testsuite/ld-elf/pr16496b.od | 3 +++ ld/testsuite/ld-elf/shared.exp | 9 +++++++++ ld/testsuite/ld-elfvers/vers24.rd | 2 +- 9 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 ld/testsuite/ld-elf/pr16496a.c create mode 100644 ld/testsuite/ld-elf/pr16496a.map create mode 100644 ld/testsuite/ld-elf/pr16496b.c create mode 100644 ld/testsuite/ld-elf/pr16496b.od (limited to 'ld') diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index a750240..70f8a37 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,5 +1,21 @@ 2014-11-25 H.J. Lu + PR binutils/16496 + * ld-cris/weakref3.d: Add symbol version string to versioned + symbol names in dynamic relocation. + * ld-cris/weakref4.d: Likewise. + * ld-elfvers/vers24.rd: Likewise. + + * ld-elf/pr16496a.c: New file. + * ld-elf/pr16496a.map: Likewise. + * ld-elf/pr16496b.c: Likewise. + * ld-elf/pr16496b.od: Likewise. + + * ld-elf/shared.exp (build_tests): Add libpr16496a.so and + libpr16496b.so tests. + +2014-11-25 H.J. Lu + * ld-i386/i386.exp: Add run-time relocation tests for plt-main. * ld-i386/plt-main.rd: New file. * ld-x86-64/plt-main-bnd.dd: Likewise. diff --git a/ld/testsuite/ld-cris/weakref3.d b/ld/testsuite/ld-cris/weakref3.d index aea3ad6..4807106 100644 --- a/ld/testsuite/ld-cris/weakref3.d +++ b/ld/testsuite/ld-cris/weakref3.d @@ -16,11 +16,11 @@ #... Relocation section '.rela.dyn' at offset 0x... contains 1 entries: Offset +Info +Type +Sym.Value +Sym. Name \+ Addend -.* R_CRIS_COPY .* __expobj2 \+ 0 +.* R_CRIS_COPY .* __expobj2@TST3 \+ 0 Relocation section '.rela.plt' at offset 0x... contains 1 entries: Offset +Info +Type +Sym.Value +Sym. Name \+ Addend -.* R_CRIS_JUMP_SLOT .* expfn2 \+ 0 +.* R_CRIS_JUMP_SLOT .* expfn2@TST3 \+ 0 The decoding of unwind sections for machine type Axis Communications 32-bit embedded processor is not currently supported. diff --git a/ld/testsuite/ld-cris/weakref4.d b/ld/testsuite/ld-cris/weakref4.d index 79de291..aed0f39 100644 --- a/ld/testsuite/ld-cris/weakref4.d +++ b/ld/testsuite/ld-cris/weakref4.d @@ -17,7 +17,7 @@ #... Relocation section '.rela.dyn' at offset 0x... contains 1 entries: #... -.* R_CRIS_COPY .* __expobj2 \+ 0 +.* R_CRIS_COPY .* __expobj2@TST3 \+ 0 The decoding of unwind sections for machine type Axis Communications 32-bit embedded processor is not currently supported. diff --git a/ld/testsuite/ld-elf/pr16496a.c b/ld/testsuite/ld-elf/pr16496a.c new file mode 100644 index 0000000..35e8555 --- /dev/null +++ b/ld/testsuite/ld-elf/pr16496a.c @@ -0,0 +1,4 @@ +void +sd_get_seats (void) +{ +} diff --git a/ld/testsuite/ld-elf/pr16496a.map b/ld/testsuite/ld-elf/pr16496a.map new file mode 100644 index 0000000..d677f37 --- /dev/null +++ b/ld/testsuite/ld-elf/pr16496a.map @@ -0,0 +1,4 @@ +LIBSYSTEMD_209 { +global: + sd_get_seats; +}; diff --git a/ld/testsuite/ld-elf/pr16496b.c b/ld/testsuite/ld-elf/pr16496b.c new file mode 100644 index 0000000..94a0f30 --- /dev/null +++ b/ld/testsuite/ld-elf/pr16496b.c @@ -0,0 +1,5 @@ +void sd_get_seats (void); +void call_sd_get_seats (void) +{ + sd_get_seats (); +} diff --git a/ld/testsuite/ld-elf/pr16496b.od b/ld/testsuite/ld-elf/pr16496b.od new file mode 100644 index 0000000..6fb54c1 --- /dev/null +++ b/ld/testsuite/ld-elf/pr16496b.od @@ -0,0 +1,3 @@ +#... +.* sd_get_seats@LIBSYSTEMD_209 +#pass diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp index b55856a..00a4983 100644 --- a/ld/testsuite/ld-elf/shared.exp +++ b/ld/testsuite/ld-elf/shared.exp @@ -246,6 +246,15 @@ set build_tests { {"Build dynamic-1" "-Wl,--dynamic-list,dynamic-1.syms -Wl,--gc-sections" "-ffunction-sections" {dynamic-1.c} {{readelf {-s} dynamic-1.rd}} "dynamic-1"} + {"Build libpr16496a.so" + "-shared -Wl,--version-script=pr16496a.map" "-fPIC" + {pr16496a.c} {} "libpr16496a.so"} + {"Build libpr16496b.a" + "" "-fPIC" + {pr16496b.c} {} "libpr16496b.a"} + {"Build libpr16496b.so" + "-shared tmpdir/pr16496b.o tmpdir/libpr16496a.so" "" + {dummy.c} {{objdump {-R} pr16496b.od}} "libpr16496b.so"} } run_cc_link_tests $build_tests diff --git a/ld/testsuite/ld-elfvers/vers24.rd b/ld/testsuite/ld-elfvers/vers24.rd index fb464f9..2360447 100644 --- a/ld/testsuite/ld-elfvers/vers24.rd +++ b/ld/testsuite/ld-elfvers/vers24.rd @@ -1,7 +1,7 @@ Relocation section .* # Ensure there is a dynamic relocation against x #... -[0-9a-f]+ +[0-9a-f]+ R_.* +_?x(| \+ 0) +[0-9a-f]+ +[0-9a-f]+ R_.* +_?x@VERS.0(| \+ 0) #... Symbol table '.dynsym' contains [0-9]+ entries: # And ensure the dynamic symbol table contains at least x@VERS.0 -- cgit v1.1