Bug 16496 - readelf/objdump fail to display symbol version in dynamic relocation
Summary: readelf/objdump fail to display symbol version in dynamic relocation
Status: RESOLVED FIXED
Alias: None
Product: binutils
Classification: Unclassified
Component: binutils (show other bugs)
Version: 2.25
: P2 normal
Target Milestone: 2.26
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-01-22 14:45 UTC by H.J. Lu
Modified: 2015-05-04 00:14 UTC (History)
0 users

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description H.J. Lu 2014-01-22 14:45:07 UTC
[hjl@gnu-6 pr16477]$ make clean
rm -f *.o
[hjl@gnu-6 pr16477]$ cat liba.c
const char* sd_get_seats(void) {return "bla bla";}
[hjl@gnu-6 pr16477]$ cat liba.sym 
LIBSYSTEMD_209 {
global:
        sd_get_seats;
};
[hjl@gnu-6 pr16477]$ cat libb.c 
#include "linkwarning.h"
void new_sd_get_seats(void);
__asm__(".symver new_sd_get_seats,sd_get_seats@LIBSYSTEMD_209");
static void (*resolve_sd_get_seats(void)) (void) {
        return new_sd_get_seats;
}
void sd_get_seats(void) __attribute__((ifunc("resolve_sd_get_seats")));
link_warning(sd_get_seats, "sd_get_seats is obsolete");
[hjl@gnu-6 pr16477]$ cat libb.sym 
LIBSYSTEMD_208 {
global:
        sd_get_seats;
};
[hjl@gnu-6 pr16477]$ make libb.so
gcc -B./ -O -g -fPIC   -c -o libb.o libb.c
gcc -B./ -O -g -fPIC   -c -o liba.o liba.c
gcc -B./ -o liba.so -shared liba.o -Wl,--version-script=liba.sym
gcc -B./ -o libb.so -shared libb.o liba.so -Wl,--version-script=libb.sym
[hjl@gnu-6 pr16477]$ objdump -R libb.so

libb.so:     file format elf64-x86-64

DYNAMIC RELOCATION RECORDS
OFFSET           TYPE              VALUE 
00000000002007c8 R_X86_64_RELATIVE  *ABS*+0x00000000000006e0
00000000002007d0 R_X86_64_RELATIVE  *ABS*+0x00000000000006a0
00000000002007e0 R_X86_64_RELATIVE  *ABS*+0x00000000002007e0
00000000002009d8 R_X86_64_GLOB_DAT  _ITM_deregisterTMCloneTable
00000000002009e0 R_X86_64_GLOB_DAT  __gmon_start__
00000000002009e8 R_X86_64_GLOB_DAT  sd_get_seats
00000000002009f0 R_X86_64_GLOB_DAT  _Jv_RegisterClasses
00000000002009f8 R_X86_64_GLOB_DAT  _ITM_registerTMCloneTable
0000000000200a00 R_X86_64_GLOB_DAT  __cxa_finalize
0000000000200a20 R_X86_64_JUMP_SLOT  __gmon_start__
0000000000200a28 R_X86_64_JUMP_SLOT  __cxa_finalize


[hjl@gnu-6 pr16477]$ readelf -rs libb.so

Relocation section '.rela.dyn' at offset 0x4d8 contains 9 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
0000002007c8  000000000008 R_X86_64_RELATIVE                    6e0
0000002007d0  000000000008 R_X86_64_RELATIVE                    6a0
0000002007e0  000000000008 R_X86_64_RELATIVE                    2007e0
0000002009d8  000200000006 R_X86_64_GLOB_DAT 0000000000000000 _ITM_deregisterTMClone + 0
0000002009e0  000300000006 R_X86_64_GLOB_DAT 0000000000000000 __gmon_start__ + 0
0000002009e8  000400000006 R_X86_64_GLOB_DAT 0000000000000000 sd_get_seats + 0
0000002009f0  000500000006 R_X86_64_GLOB_DAT 0000000000000000 _Jv_RegisterClasses + 0
0000002009f8  000600000006 R_X86_64_GLOB_DAT 0000000000000000 _ITM_registerTMCloneTa + 0
000000200a00  000700000006 R_X86_64_GLOB_DAT 0000000000000000 __cxa_finalize + 0

Relocation section '.rela.plt' at offset 0x5b0 contains 2 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
000000200a20  000300000007 R_X86_64_JUMP_SLO 0000000000000000 __gmon_start__ + 0
000000200a28  000700000007 R_X86_64_JUMP_SLO 0000000000000000 __cxa_finalize + 0

Symbol table '.dynsym' contains 15 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 00000000000005e0     0 SECTION LOCAL  DEFAULT   10 
     2: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterTMCloneTab
     3: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__
     4: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND sd_get_seats@LIBSYSTEMD_209 (3)
     5: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _Jv_RegisterClasses
     6: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_registerTMCloneTable
     7: 0000000000000000     0 FUNC    WEAK   DEFAULT  UND __cxa_finalize@GLIBC_2.2.5 (4)
     8: 0000000000200a30     0 NOTYPE  GLOBAL DEFAULT   23 _edata
     9: 0000000000200a38     0 NOTYPE  GLOBAL DEFAULT   24 _end
    10: 0000000000000715     8 IFUNC   GLOBAL DEFAULT   12 sd_get_seats@@LIBSYSTEMD_208
    11: 0000000000200a30     0 NOTYPE  GLOBAL DEFAULT   24 __bss_start
    12: 00000000000005e0     0 FUNC    GLOBAL DEFAULT   10 _init
    13: 0000000000000720     0 FUNC    GLOBAL DEFAULT   13 _fini
    14: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  ABS LIBSYSTEMD_208

I am expecting sd_get_seats@LIBSYSTEMD_209 in dynamic relocation
instead of sd_get_seats.
Comment 1 cvs-commit@gcc.gnu.org 2014-01-24 20:24:01 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gdb and binutils".

The branch, hjl/pr16496 has been created
        at  d6eca2f91c1a79ed97d2df4b4614631ad7834cd8 (commit)

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=d6eca2f91c1a79ed97d2df4b4614631ad7834cd8

commit d6eca2f91c1a79ed97d2df4b4614631ad7834cd8
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Jan 24 04:52:05 2014 -0800

    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.

-----------------------------------------------------------------------
Comment 2 cvs-commit@gcc.gnu.org 2014-01-26 16:48:51 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gdb and binutils".

The branch, hjl/pr16496 has been created
        at  aba61d1ceb6ed10b3f755adfe902af83c7b51b72 (commit)

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=aba61d1ceb6ed10b3f755adfe902af83c7b51b72

commit aba61d1ceb6ed10b3f755adfe902af83c7b51b72
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Sun Jan 26 08:47:06 2014 -0800

    Move ChangeLog entries to ChangeLog.pr16467

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=42478d68639fcb10952a94e5a4d32d8ea18c953a

commit 42478d68639fcb10952a94e5a4d32d8ea18c953a
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Jan 24 04:52:05 2014 -0800

    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.

-----------------------------------------------------------------------
Comment 3 cvs-commit@gcc.gnu.org 2014-01-27 16:55:32 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gdb and binutils".

The branch, hjl/pr16496 has been created
        at  3814a7515eb08dd6d2eb75969a2756efffc5809d (commit)

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=3814a7515eb08dd6d2eb75969a2756efffc5809d

commit 3814a7515eb08dd6d2eb75969a2756efffc5809d
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Sun Jan 26 08:47:06 2014 -0800

    Move ChangeLog entries to ChangeLog.pr16496

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=42478d68639fcb10952a94e5a4d32d8ea18c953a

commit 42478d68639fcb10952a94e5a4d32d8ea18c953a
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Jan 24 04:52:05 2014 -0800

    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.

-----------------------------------------------------------------------
Comment 4 cvs-commit@gcc.gnu.org 2014-01-31 17:46:58 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gdb and binutils".

The branch, hjl/pr16496 has been created
        at  8e0506cd53b38f978c5297978a5dcc046468b864 (commit)

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=8e0506cd53b38f978c5297978a5dcc046468b864

commit 8e0506cd53b38f978c5297978a5dcc046468b864
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Sun Jan 26 08:47:06 2014 -0800

    Move ChangeLog entries to ChangeLog.pr16496

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=8c19f637403eb49fc9b9f0ed2b2b8375c33e5499

commit 8c19f637403eb49fc9b9f0ed2b2b8375c33e5499
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Jan 24 04:52:05 2014 -0800

    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.

-----------------------------------------------------------------------
Comment 5 cvs-commit@gcc.gnu.org 2014-11-25 14:49:28 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gdb and binutils".

The branch, master has been updated
       via  bb4d2ac2cc637c61232624d9d359b8d3f031e3e9 (commit)
      from  dd7e64d45b317128f5fe813a8da0b13b4ad046ae (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=bb4d2ac2cc637c61232624d9d359b8d3f031e3e9

commit bb4d2ac2cc637c61232624d9d359b8d3f031e3e9
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Tue Nov 25 06:47:44 2014 -0800

    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.

-----------------------------------------------------------------------

Summary of changes:
 bfd/ChangeLog                                      |    8 +
 bfd/elf-bfd.h                                      |    2 +
 bfd/elf.c                                          |   92 +++--
 binutils/ChangeLog                                 |   17 +
 binutils/objdump.c                                 |   23 +-
 binutils/readelf.c                                 |  393 ++++++++++++--------
 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-ifunc/pr16467a.map => ld-elf/pr16496a.map} |    0
 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 +-
 15 files changed, 374 insertions(+), 206 deletions(-)
 create mode 100644 ld/testsuite/ld-elf/pr16496a.c
 copy ld/testsuite/{ld-ifunc/pr16467a.map => ld-elf/pr16496a.map} (100%)
 create mode 100644 ld/testsuite/ld-elf/pr16496b.c
 create mode 100644 ld/testsuite/ld-elf/pr16496b.od
Comment 6 H.J. Lu 2014-11-25 14:50:21 UTC
Fixed for 2.26.
Comment 7 H.J. Lu 2015-05-04 00:14:42 UTC
Fixed.