This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] PR binutils/16496: Display symbol version when dumping dynrelocs
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Andreas Schwab <schwab at linux-m68k dot org>
- Cc: Binutils <binutils at sourceware dot org>
- Date: Tue, 25 Nov 2014 09:37:51 -0800
- Subject: Re: [PATCH] PR binutils/16496: Display symbol version when dumping dynrelocs
- Authentication-results: sourceware.org; auth=none
- References: <20140124191614 dot GA20867 at intel dot com> <CAMe9rOpjBrZqs7Z7+c_DzXhT2KsgZOR1qDfkEfxKj1H9PcrVrg at mail dot gmail dot com> <87mwidkdvh dot fsf at igel dot home> <CAMe9rOobh1s2O6BqHf=VKmwr76qBoFUfCXM1tx+jTD3a7f_+3w at mail dot gmail dot com> <CAMe9rOqe+3nFMEoPazwWTPGYY9dCVcTFgH=fkM2Jbc0DO0qU1A at mail dot gmail dot com>
On Tue, Nov 25, 2014 at 6:36 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Thu, Jan 30, 2014 at 4:41 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
>> On Thu, Jan 30, 2014 at 1:39 AM, Andreas Schwab <schwab@linux-m68k.org> wrote:
>>> Since it breaks building glibc, perhaps there is another way to display
>>
>> It is the most consistent way to display symbol version. But It did cause:
>>
>> make[4]: *** [/export/build/gnu/glibc/build-x86_64-linux/elf/check-localplt.out]
>> Error 1
>> Extra PLT reference: libc.so: realloc@@GLIBC_2.2.5
>> Extra PLT reference: libc.so: malloc@@GLIBC_2.2.5
>> Extra PLT reference: libc.so: memalign@@GLIBC_2.2.5
>> Extra PLT reference: libc.so: calloc@@GLIBC_2.2.5
>> Extra PLT reference: libc.so: free@@GLIBC_2.2.5
>> Extra PLT reference: libm.so: matherr@@GLIBC_2.2.5
>> Missing required PLT reference: libc.so: realloc
>> Missing required PLT reference: libc.so: malloc
>> Missing required PLT reference: libc.so: calloc
>> Missing required PLT reference: libc.so: memalign
>> Missing required PLT reference: libc.so: free
>> Missing required PLT reference: libm.so: matherr
>>
>> It is easy to fix by stripping @@GLIBC_2.2.5 from readelf -r output.
>>
>>> the symbol version?
>
> A very old patch:
>
> https://sourceware.org/ml/binutils/2014-01/msg00310.html
>
> My binutils PLT optimization commit:
>
> https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=dd7e64d45b317128f5fe813a8da0b13b4ad046ae
>
> will require updating elf/check-localplt test in glibc. I am checking in this
> so that elf/check-localplt will be updated for both.
>
I checked in this patch to add get_symbol_version_string to
BFD_JUMP_TABLE_SYMBOLS so that we can use
bfd_get_symbol_version_string in objdump for non-ELF targets.
--
H.J.
From 60bb06bc89858ee50ad02907a833565dcc317182 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Tue, 25 Nov 2014 09:28:32 -0800
Subject: [PATCH] Use get_symbol_version_string in BFD_JUMP_TABLE_SYMBOLS
This patch adds get_symbol_version_string to BFD_JUMP_TABLE_SYMBOLS so
that we can use bfd_get_symbol_version_string in objdump for non-ELF
targets.
bfd/
* targets.c (BFD_JUMP_TABLE_SYMBOLS): Use
NAME##_get_symbol_version_string.
(bfd_get_symbol_version_string): New.
* aout-adobe.c (aout_32_get_symbol_version_string): Define using
_bfd_nosymbols define.
* aout-target.h (MY_get_symbol_version_string): Likewise.
* aout-tic30.c (MY_get_symbol_version_string): Likewise.
* binary.c (binary_get_symbol_version_string): Likewise.
* bout.c (aout_32_get_symbol_version_string): Likewise.
* coff-rs6000.c (_bfd_xcoff_get_symbol_version_string): Likewise.
* i386msdos.c (msdos_get_symbol_version_string): Likewise.
* i386os9k.c (aout_32_get_symbol_version_string): Likewise.
* ieee.c (ieee_get_symbol_version_string): Likewise.
* ihex.c (ihex_get_symbol_version_string): Likewise.
* libecoff.h (_bfd_ecoff_get_symbol_version_string): Likewise.
* mach-o-target.c (bfd_mach_o_get_symbol_version_string): Likewise.
* mmo.c (mmo_get_symbol_version_string): Likewise.
* nlm-target.h (nlm_get_symbol_version_string): Likewise.
* oasys.c (oasys_get_symbol_version_string): Likewise.
* pef.c (bfd_pef_get_symbol_version_string): Likewise.
* plugin.c (bfd_plugin_get_symbol_version_string): Likewise.
* ppcboot.c (ppcboot_get_symbol_version_string): Likewise.
* som.c (som_get_symbol_version_string): Likewise.
* srec.c (srec_get_symbol_version_string): Likewise.
* tekhex.c (tekhex_get_symbol_version_string): Likewise.
* versados.c (versados_get_symbol_version_string): Likewise.
* vms-alpha.c (alpha_vms_get_symbol_version_string): Likewise.
* xsym.c (bfd_sym_get_symbol_version_string): Likewise.
* coff64-rs6000.c (rs6000_xcoff64_vec): Use
coff_get_symbol_version_string.
(rs6000_xcoff64_aix_vec): Likewise.
* elf-bfd.h (bfd_elf_get_symbol_version_string): Renamed to ...
(_bfd_elf_get_symbol_version_string): This.
* elf.c: Likewise.
(bfd_elf_print_symbol): Updated.
* elfxx-target.h (bfd_elfNN_get_symbol_version_string): Define.
* libbfd-in.h (_bfd_nosymbols_get_symbol_version_string): Define.
* libcoff-in.h (coff_get_symbol_version_string): Likewise.
* bfd-in2.h: Regenerated.
* libbfd.h: Likewise.
* libcoff.h: Likewise.
binutils/
* objdump.c (objdump_print_symname): Replace
bfd_elf_get_symbol_version_string with
bfd_get_symbol_version_string.
---
bfd/ChangeLog | 47 +++++++++++++++++++++++++++++++++++++++++++++++
bfd/aout-adobe.c | 1 +
bfd/aout-target.h | 4 ++++
bfd/aout-tic30.c | 4 ++++
bfd/bfd-in2.h | 4 ++++
bfd/binary.c | 2 ++
bfd/bout.c | 1 +
bfd/coff-rs6000.c | 2 ++
bfd/coff64-rs6000.c | 2 ++
bfd/elf-bfd.h | 2 +-
bfd/elf.c | 10 +++++-----
bfd/elfxx-target.h | 4 ++++
bfd/i386msdos.c | 2 ++
bfd/i386os9k.c | 2 ++
bfd/ieee.c | 2 ++
bfd/ihex.c | 1 +
bfd/libbfd-in.h | 2 ++
bfd/libbfd.h | 2 ++
bfd/libcoff-in.h | 2 ++
bfd/libcoff.h | 2 ++
bfd/libecoff.h | 2 ++
bfd/mach-o-target.c | 1 +
bfd/mmo.c | 3 +++
bfd/nlm-target.h | 1 +
bfd/oasys.c | 1 +
bfd/pef.c | 1 +
bfd/plugin.c | 1 +
bfd/ppcboot.c | 2 ++
bfd/som.c | 1 +
bfd/srec.c | 1 +
bfd/targets.c | 4 ++++
bfd/tekhex.c | 1 +
bfd/versados.c | 1 +
bfd/vms-alpha.c | 3 +++
bfd/xsym.c | 1 +
binutils/ChangeLog | 6 ++++++
binutils/objdump.c | 4 +---
37 files changed, 123 insertions(+), 9 deletions(-)
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 7b3971e..54942a1 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,52 @@
2014-11-25 H.J. Lu <hongjiu.lu@intel.com>
+ * targets.c (BFD_JUMP_TABLE_SYMBOLS): Use
+ NAME##_get_symbol_version_string.
+ (bfd_get_symbol_version_string): New.
+ * aout-adobe.c (aout_32_get_symbol_version_string): Define using
+ _bfd_nosymbols define.
+ * aout-target.h (MY_get_symbol_version_string): Likewise.
+ * aout-tic30.c (MY_get_symbol_version_string): Likewise.
+ * binary.c (binary_get_symbol_version_string): Likewise.
+ * bout.c (aout_32_get_symbol_version_string): Likewise.
+ * coff-rs6000.c (_bfd_xcoff_get_symbol_version_string): Likewise.
+ * i386msdos.c (msdos_get_symbol_version_string): Likewise.
+ * i386os9k.c (aout_32_get_symbol_version_string): Likewise.
+ * ieee.c (ieee_get_symbol_version_string): Likewise.
+ * ihex.c (ihex_get_symbol_version_string): Likewise.
+ * libecoff.h (_bfd_ecoff_get_symbol_version_string): Likewise.
+ * mach-o-target.c (bfd_mach_o_get_symbol_version_string): Likewise.
+ * mmo.c (mmo_get_symbol_version_string): Likewise.
+ * nlm-target.h (nlm_get_symbol_version_string): Likewise.
+ * oasys.c (oasys_get_symbol_version_string): Likewise.
+ * pef.c (bfd_pef_get_symbol_version_string): Likewise.
+ * plugin.c (bfd_plugin_get_symbol_version_string): Likewise.
+ * ppcboot.c (ppcboot_get_symbol_version_string): Likewise.
+ * som.c (som_get_symbol_version_string): Likewise.
+ * srec.c (srec_get_symbol_version_string): Likewise.
+ * tekhex.c (tekhex_get_symbol_version_string): Likewise.
+ * versados.c (versados_get_symbol_version_string): Likewise.
+ * vms-alpha.c (alpha_vms_get_symbol_version_string): Likewise.
+ * xsym.c (bfd_sym_get_symbol_version_string): Likewise.
+
+ * coff64-rs6000.c (rs6000_xcoff64_vec): Use
+ coff_get_symbol_version_string.
+ (rs6000_xcoff64_aix_vec): Likewise.
+
+ * elf-bfd.h (bfd_elf_get_symbol_version_string): Renamed to ...
+ (_bfd_elf_get_symbol_version_string): This.
+ * elf.c: Likewise.
+ (bfd_elf_print_symbol): Updated.
+ * elfxx-target.h (bfd_elfNN_get_symbol_version_string): Define.
+
+ * libbfd-in.h (_bfd_nosymbols_get_symbol_version_string): Define.
+ * libcoff-in.h (coff_get_symbol_version_string): Likewise.
+ * bfd-in2.h: Regenerated.
+ * libbfd.h: Likewise.
+ * libcoff.h: Likewise.
+
+2014-11-25 H.J. Lu <hongjiu.lu@intel.com>
+
PR binutils/16496
* elf-bfd.h (bfd_elf_get_symbol_version_string): New.
* elf.c (bfd_elf_get_symbol_version_string): New. Extracted
diff --git a/bfd/aout-adobe.c b/bfd/aout-adobe.c
index cfdcc64..50394a2 100644
--- a/bfd/aout-adobe.c
+++ b/bfd/aout-adobe.c
@@ -447,6 +447,7 @@ aout_adobe_sizeof_headers (bfd *ignore_abfd ATTRIBUTE_UNUSED,
/* Build the transfer vector for Adobe A.Out files. */
#define aout_32_find_line _bfd_nosymbols_find_line
+#define aout_32_get_symbol_version_string _bfd_nosymbols_get_symbol_version_string
#define aout_32_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define aout_32_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
#define aout_32_bfd_reloc_name_lookup _bfd_norelocs_bfd_reloc_name_lookup
diff --git a/bfd/aout-target.h b/bfd/aout-target.h
index 3bca8b5..7982bf0 100644
--- a/bfd/aout-target.h
+++ b/bfd/aout-target.h
@@ -459,6 +459,10 @@ MY_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
#ifndef MY_get_symbol_info
#define MY_get_symbol_info NAME (aout, get_symbol_info)
#endif
+#ifndef MY_get_symbol_version_string
+#define MY_get_symbol_version_string \
+ _bfd_nosymbols_get_symbol_version_string
+#endif
#ifndef MY_get_lineno
#define MY_get_lineno NAME (aout, get_lineno)
#endif
diff --git a/bfd/aout-tic30.c b/bfd/aout-tic30.c
index e74464d..e164446 100644
--- a/bfd/aout-tic30.c
+++ b/bfd/aout-tic30.c
@@ -917,6 +917,10 @@ tic30_aout_set_arch_mach (bfd *abfd,
#ifndef MY_get_symbol_info
#define MY_get_symbol_info NAME (aout, get_symbol_info)
#endif
+#ifndef MY_get_symbol_version_string
+#define MY_get_symbol_version_string \
+ _bfd_nosymbols_get_symbol_version_string
+#endif
#ifndef MY_get_lineno
#define MY_get_lineno NAME (aout, get_lineno)
#endif
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 433b171..ed7be29 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -7015,6 +7015,7 @@ typedef struct bfd_target
NAME##_make_empty_symbol, \
NAME##_print_symbol, \
NAME##_get_symbol_info, \
+ NAME##_get_symbol_version_string, \
NAME##_bfd_is_local_label_name, \
NAME##_bfd_is_target_special_symbol, \
NAME##_get_lineno, \
@@ -7036,6 +7037,9 @@ typedef struct bfd_target
void (*_bfd_get_symbol_info)
(bfd *, struct bfd_symbol *, symbol_info *);
#define bfd_get_symbol_info(b,p,e) BFD_SEND (b, _bfd_get_symbol_info, (b,p,e))
+ const char *(*_bfd_get_symbol_version_string)
+ (bfd *, struct bfd_symbol *, bfd_boolean *);
+#define bfd_get_symbol_version_string(b,s,h) BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,h))
bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *);
bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
alent * (*_get_lineno) (bfd *, struct bfd_symbol *);
diff --git a/bfd/binary.c b/bfd/binary.c
index d35e859..93a0cff 100644
--- a/bfd/binary.c
+++ b/bfd/binary.c
@@ -190,6 +190,8 @@ binary_canonicalize_symtab (bfd *abfd, asymbol **alocation)
#define binary_make_empty_symbol _bfd_generic_make_empty_symbol
#define binary_print_symbol _bfd_nosymbols_print_symbol
+#define binary_get_symbol_version_string \
+ _bfd_nosymbols_get_symbol_version_string
/* Get information about a symbol. */
diff --git a/bfd/bout.c b/bfd/bout.c
index a27df58..de9c7c7 100644
--- a/bfd/bout.c
+++ b/bfd/bout.c
@@ -1375,6 +1375,7 @@ b_out_bfd_get_relocated_section_contents (bfd *output_bfd,
/* Build the transfer vectors for Big and Little-Endian B.OUT files. */
#define aout_32_find_line _bfd_nosymbols_find_line
+#define aout_32_get_symbol_version_string _bfd_nosymbols_get_symbol_version_string
#define aout_32_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define aout_32_close_and_cleanup aout_32_bfd_free_cached_info
#define b_out_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c
index fea5f3b..05c45cf 100644
--- a/bfd/coff-rs6000.c
+++ b/bfd/coff-rs6000.c
@@ -4008,6 +4008,8 @@ const struct xcoff_dwsect_name xcoff_dwsect_names[] = {
#define _bfd_xcoff_make_empty_symbol coff_make_empty_symbol
#define _bfd_xcoff_print_symbol coff_print_symbol
#define _bfd_xcoff_get_symbol_info coff_get_symbol_info
+#define _bfd_xcoff_get_symbol_version_string \
+ _bfd_nosymbols_get_symbol_version_string
#define _bfd_xcoff_bfd_is_local_label_name _bfd_xcoff_is_local_label_name
#define _bfd_xcoff_bfd_is_target_special_symbol \
coff_bfd_is_target_special_symbol
diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c
index 5985d81..72ea58b 100644
--- a/bfd/coff64-rs6000.c
+++ b/bfd/coff64-rs6000.c
@@ -2712,6 +2712,7 @@ const bfd_target rs6000_xcoff64_vec =
coff_make_empty_symbol,
coff_print_symbol,
coff_get_symbol_info,
+ coff_get_symbol_version_string,
_bfd_xcoff_is_local_label_name,
coff_bfd_is_target_special_symbol,
coff_get_lineno,
@@ -2969,6 +2970,7 @@ const bfd_target rs6000_xcoff64_aix_vec =
coff_make_empty_symbol,
coff_print_symbol,
coff_get_symbol_info,
+ coff_get_symbol_version_string,
_bfd_xcoff_is_local_label_name,
coff_bfd_is_target_special_symbol,
coff_get_lineno,
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index bee0ea1..4368658 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -1772,7 +1772,7 @@ extern bfd_boolean _bfd_elf_copy_private_bfd_data
(bfd *, bfd *);
extern bfd_boolean _bfd_elf_print_private_bfd_data
(bfd *, void *);
-const char * bfd_elf_get_symbol_version_string
+const char * _bfd_elf_get_symbol_version_string
(bfd *, asymbol *, bfd_boolean *);
extern void bfd_elf_print_symbol
(bfd *, void *, asymbol *, bfd_print_symbol_type);
diff --git a/bfd/elf.c b/bfd/elf.c
index c0c7fef..0cf1991 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -1425,8 +1425,8 @@ _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
/* Get version string. */
const char *
-bfd_elf_get_symbol_version_string (bfd *abfd, asymbol *symbol,
- bfd_boolean *hidden)
+_bfd_elf_get_symbol_version_string (bfd *abfd, asymbol *symbol,
+ bfd_boolean *hidden)
{
const char *version_string = NULL;
if (elf_dynversym (abfd) != 0
@@ -1522,9 +1522,9 @@ bfd_elf_print_symbol (bfd *abfd,
bfd_fprintf_vma (abfd, file, val);
/* If we have version information, print it. */
- version_string = bfd_elf_get_symbol_version_string (abfd,
- symbol,
- &hidden);
+ version_string = _bfd_elf_get_symbol_version_string (abfd,
+ symbol,
+ &hidden);
if (version_string)
{
if (!hidden)
diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h
index 692fb46..9bf4b18 100644
--- a/bfd/elfxx-target.h
+++ b/bfd/elfxx-target.h
@@ -66,6 +66,10 @@
#ifndef bfd_elfNN_get_symbol_info
#define bfd_elfNN_get_symbol_info _bfd_elf_get_symbol_info
#endif
+#ifndef bfd_elfNN_get_symbol_version_string
+#define bfd_elfNN_get_symbol_version_string \
+ _bfd_elf_get_symbol_version_string
+#endif
#define bfd_elfNN_canonicalize_symtab _bfd_elf_canonicalize_symtab
#define bfd_elfNN_get_symtab_upper_bound _bfd_elf_get_symtab_upper_bound
#define bfd_elfNN_make_empty_symbol _bfd_elf_make_empty_symbol
diff --git a/bfd/i386msdos.c b/bfd/i386msdos.c
index f02659f..bd2730a 100644
--- a/bfd/i386msdos.c
+++ b/bfd/i386msdos.c
@@ -162,6 +162,8 @@ msdos_set_section_contents (bfd *abfd,
#define msdos_canonicalize_symtab _bfd_nosymbols_canonicalize_symtab
#define msdos_print_symbol _bfd_nosymbols_print_symbol
#define msdos_get_symbol_info _bfd_nosymbols_get_symbol_info
+#define msdos_get_symbol_version_string \
+ _bfd_nosymbols_get_symbol_version_string
#define msdos_find_nearest_line _bfd_nosymbols_find_nearest_line
#define msdos_find_line _bfd_nosymbols_find_line
#define msdos_find_inliner_info _bfd_nosymbols_find_inliner_info
diff --git a/bfd/i386os9k.c b/bfd/i386os9k.c
index d8d5408..a8f87e5 100644
--- a/bfd/i386os9k.c
+++ b/bfd/i386os9k.c
@@ -155,6 +155,8 @@ os9k_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
#define aout_32_close_and_cleanup aout_32_bfd_free_cached_info
#define aout_32_find_line _bfd_nosymbols_find_line
+#define aout_32_get_symbol_version_string \
+ _bfd_nosymbols_get_symbol_version_string
#define aout_32_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define aout_32_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
diff --git a/bfd/ieee.c b/bfd/ieee.c
index 70ce4c5..04ac666 100644
--- a/bfd/ieee.c
+++ b/bfd/ieee.c
@@ -3828,6 +3828,8 @@ ieee_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
#define ieee_update_armap_timestamp bfd_true
#define ieee_get_elt_at_index _bfd_generic_get_elt_at_index
+#define ieee_get_symbol_version_string \
+ _bfd_nosymbols_get_symbol_version_string
#define ieee_bfd_is_target_special_symbol \
((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
#define ieee_bfd_is_local_label_name bfd_generic_is_local_label_name
diff --git a/bfd/ihex.c b/bfd/ihex.c
index 9b3b813..7ce8c4b 100644
--- a/bfd/ihex.c
+++ b/bfd/ihex.c
@@ -918,6 +918,7 @@ ihex_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
#define ihex_make_empty_symbol _bfd_generic_make_empty_symbol
#define ihex_print_symbol _bfd_nosymbols_print_symbol
#define ihex_get_symbol_info _bfd_nosymbols_get_symbol_info
+#define ihex_get_symbol_version_string _bfd_nosymbols_get_symbol_version_string
#define ihex_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
#define ihex_bfd_is_local_label_name _bfd_nosymbols_bfd_is_local_label_name
#define ihex_get_lineno _bfd_nosymbols_get_lineno
diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
index 50a46ac..f51bc11 100644
--- a/bfd/libbfd-in.h
+++ b/bfd/libbfd-in.h
@@ -392,6 +392,8 @@ extern bfd_boolean _bfd_vms_lib_ia64_mkarchive (bfd *abfd);
((void (*) (bfd *, void *, asymbol *, bfd_print_symbol_type)) bfd_void)
#define _bfd_nosymbols_get_symbol_info \
((void (*) (bfd *, asymbol *, symbol_info *)) bfd_void)
+#define _bfd_nosymbols_get_symbol_version_string \
+ ((const char *(*) (bfd *, asymbol *, bfd_boolean *)) bfd_nullvoidptr)
#define _bfd_nosymbols_bfd_is_local_label_name \
((bfd_boolean (*) (bfd *, const char *)) bfd_false)
#define _bfd_nosymbols_bfd_is_target_special_symbol \
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index 6c48f82..a1923c8 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -397,6 +397,8 @@ extern bfd_boolean _bfd_vms_lib_ia64_mkarchive (bfd *abfd);
((void (*) (bfd *, void *, asymbol *, bfd_print_symbol_type)) bfd_void)
#define _bfd_nosymbols_get_symbol_info \
((void (*) (bfd *, asymbol *, symbol_info *)) bfd_void)
+#define _bfd_nosymbols_get_symbol_version_string \
+ ((const char *(*) (bfd *, asymbol *, bfd_boolean *)) bfd_nullvoidptr)
#define _bfd_nosymbols_bfd_is_local_label_name \
((bfd_boolean (*) (bfd *, const char *)) bfd_false)
#define _bfd_nosymbols_bfd_is_target_special_symbol \
diff --git a/bfd/libcoff-in.h b/bfd/libcoff-in.h
index 6b6eb28..dc7866d 100644
--- a/bfd/libcoff-in.h
+++ b/bfd/libcoff-in.h
@@ -353,6 +353,8 @@ extern void coff_print_symbol
(bfd *, void * filep, asymbol *, bfd_print_symbol_type);
extern void coff_get_symbol_info
(bfd *, asymbol *, symbol_info *ret);
+#define coff_get_symbol_version_string \
+ _bfd_nosymbols_get_symbol_version_string
extern bfd_boolean _bfd_coff_is_local_label_name
(bfd *, const char *);
extern asymbol *coff_bfd_make_debug_symbol
diff --git a/bfd/libcoff.h b/bfd/libcoff.h
index 9479985..d1c466a 100644
--- a/bfd/libcoff.h
+++ b/bfd/libcoff.h
@@ -357,6 +357,8 @@ extern void coff_print_symbol
(bfd *, void * filep, asymbol *, bfd_print_symbol_type);
extern void coff_get_symbol_info
(bfd *, asymbol *, symbol_info *ret);
+#define coff_get_symbol_version_string \
+ _bfd_nosymbols_get_symbol_version_string
extern bfd_boolean _bfd_coff_is_local_label_name
(bfd *, const char *);
extern asymbol *coff_bfd_make_debug_symbol
diff --git a/bfd/libecoff.h b/bfd/libecoff.h
index 06434c2..ebfa37e 100644
--- a/bfd/libecoff.h
+++ b/bfd/libecoff.h
@@ -285,6 +285,8 @@ extern void _bfd_ecoff_print_symbol
(bfd *, void *, asymbol *, bfd_print_symbol_type);
extern void _bfd_ecoff_get_symbol_info
(bfd *, asymbol *, symbol_info *);
+#define _bfd_ecoff_get_symbol_version_string \
+ _bfd_nosymbols_get_symbol_version_string
extern bfd_boolean _bfd_ecoff_bfd_is_local_label_name
(bfd *, const char *);
#define _bfd_ecoff_get_lineno _bfd_nosymbols_get_lineno
diff --git a/bfd/mach-o-target.c b/bfd/mach-o-target.c
index a070e67..dd1ced1 100644
--- a/bfd/mach-o-target.c
+++ b/bfd/mach-o-target.c
@@ -31,6 +31,7 @@
#define bfd_mach_o_bfd_is_local_label_name bfd_generic_is_local_label_name
#define bfd_mach_o_get_lineno _bfd_nosymbols_get_lineno
#define bfd_mach_o_find_inliner_info _bfd_nosymbols_find_inliner_info
+#define bfd_mach_o_get_symbol_version_string _bfd_nosymbols_get_symbol_version_string
#define bfd_mach_o_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define bfd_mach_o_read_minisymbols _bfd_generic_read_minisymbols
#define bfd_mach_o_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
diff --git a/bfd/mmo.c b/bfd/mmo.c
index 2c74c76..698ffa5 100644
--- a/bfd/mmo.c
+++ b/bfd/mmo.c
@@ -3204,6 +3204,9 @@ mmo_write_object_contents (bfd *abfd)
#define mmo_bfd_is_target_special_symbol \
((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
+#define mmo_get_symbol_version_string \
+ _bfd_nosymbols_get_symbol_version_string
+
/* Is this one really used or defined by anyone? */
#define mmo_get_lineno _bfd_nosymbols_get_lineno
diff --git a/bfd/nlm-target.h b/bfd/nlm-target.h
index 2343cff..44b41ed 100644
--- a/bfd/nlm-target.h
+++ b/bfd/nlm-target.h
@@ -25,6 +25,7 @@
#define nlm_make_empty_symbol nlmNAME (make_empty_symbol)
#define nlm_print_symbol nlmNAME (print_symbol)
#define nlm_get_symbol_info nlmNAME (get_symbol_info)
+#define nlm_get_symbol_version_string _bfd_nosymbols_get_symbol_version_string
#define nlm_bfd_is_local_label_name bfd_generic_is_local_label_name
#define nlm_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
#define nlm_get_lineno _bfd_nosymbols_get_lineno
diff --git a/bfd/oasys.c b/bfd/oasys.c
index 9ff9b9e..9ff9117 100644
--- a/bfd/oasys.c
+++ b/bfd/oasys.c
@@ -1170,6 +1170,7 @@ oasys_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
#define oasys_bfd_is_local_label_name bfd_generic_is_local_label_name
#define oasys_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
#define oasys_get_lineno _bfd_nosymbols_get_lineno
+#define oasys_get_symbol_version_string _bfd_nosymbols_get_symbol_version_string
#define oasys_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define oasys_read_minisymbols _bfd_generic_read_minisymbols
#define oasys_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
diff --git a/bfd/pef.c b/bfd/pef.c
index 4c29417..363e641 100644
--- a/bfd/pef.c
+++ b/bfd/pef.c
@@ -43,6 +43,7 @@
#define bfd_pef_find_nearest_line _bfd_nosymbols_find_nearest_line
#define bfd_pef_find_line _bfd_nosymbols_find_line
#define bfd_pef_find_inliner_info _bfd_nosymbols_find_inliner_info
+#define bfd_pef_get_symbol_version_string _bfd_nosymbols_get_symbol_version_string
#define bfd_pef_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define bfd_pef_read_minisymbols _bfd_generic_read_minisymbols
#define bfd_pef_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
diff --git a/bfd/plugin.c b/bfd/plugin.c
index a068861..7f8f8b5 100644
--- a/bfd/plugin.c
+++ b/bfd/plugin.c
@@ -85,6 +85,7 @@ dlerror (void)
#define bfd_plugin_find_nearest_line _bfd_nosymbols_find_nearest_line
#define bfd_plugin_find_line _bfd_nosymbols_find_line
#define bfd_plugin_find_inliner_info _bfd_nosymbols_find_inliner_info
+#define bfd_plugin_get_symbol_version_string _bfd_nosymbols_get_symbol_version_string
#define bfd_plugin_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define bfd_plugin_read_minisymbols _bfd_generic_read_minisymbols
#define bfd_plugin_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
diff --git a/bfd/ppcboot.c b/bfd/ppcboot.c
index 9ee8ab5..7599e20 100644
--- a/bfd/ppcboot.c
+++ b/bfd/ppcboot.c
@@ -326,6 +326,8 @@ ppcboot_get_symbol_info (bfd *ignore_abfd ATTRIBUTE_UNUSED,
bfd_symbol_info (symbol, ret);
}
+#define ppcboot_get_symbol_version_string \
+ _bfd_nosymbols_get_symbol_version_string
#define ppcboot_bfd_is_target_special_symbol \
((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
#define ppcboot_bfd_is_local_label_name bfd_generic_is_local_label_name
diff --git a/bfd/som.c b/bfd/som.c
index 513e4fa..5f96caa 100644
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -6718,6 +6718,7 @@ som_bfd_link_split_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
}
#define som_find_line _bfd_nosymbols_find_line
+#define som_get_symbol_version_string _bfd_nosymbols_get_symbol_version_string
#define som_close_and_cleanup som_bfd_free_cached_info
#define som_read_ar_hdr _bfd_generic_read_ar_hdr
#define som_write_ar_hdr _bfd_generic_write_ar_hdr
diff --git a/bfd/srec.c b/bfd/srec.c
index 5f9a546..8de6e42 100644
--- a/bfd/srec.c
+++ b/bfd/srec.c
@@ -1258,6 +1258,7 @@ srec_print_symbol (bfd *abfd,
#define srec_find_line _bfd_nosymbols_find_line
#define srec_find_inliner_info _bfd_nosymbols_find_inliner_info
#define srec_make_empty_symbol _bfd_generic_make_empty_symbol
+#define srec_get_symbol_version_string _bfd_nosymbols_get_symbol_version_string
#define srec_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define srec_read_minisymbols _bfd_generic_read_minisymbols
#define srec_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
diff --git a/bfd/targets.c b/bfd/targets.c
index 8323e92..6a282ea 100644
--- a/bfd/targets.c
+++ b/bfd/targets.c
@@ -363,6 +363,7 @@ BFD_JUMP_TABLE macros.
. NAME##_make_empty_symbol, \
. NAME##_print_symbol, \
. NAME##_get_symbol_info, \
+. NAME##_get_symbol_version_string, \
. NAME##_bfd_is_local_label_name, \
. NAME##_bfd_is_target_special_symbol, \
. NAME##_get_lineno, \
@@ -384,6 +385,9 @@ BFD_JUMP_TABLE macros.
. void (*_bfd_get_symbol_info)
. (bfd *, struct bfd_symbol *, symbol_info *);
.#define bfd_get_symbol_info(b,p,e) BFD_SEND (b, _bfd_get_symbol_info, (b,p,e))
+. const char *(*_bfd_get_symbol_version_string)
+. (bfd *, struct bfd_symbol *, bfd_boolean *);
+.#define bfd_get_symbol_version_string(b,s,h) BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,h))
. bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *);
. bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
. alent * (*_get_lineno) (bfd *, struct bfd_symbol *);
diff --git a/bfd/tekhex.c b/bfd/tekhex.c
index 0328689..2f14194 100644
--- a/bfd/tekhex.c
+++ b/bfd/tekhex.c
@@ -957,6 +957,7 @@ tekhex_print_symbol (bfd *abfd,
#define tekhex_find_nearest_line _bfd_nosymbols_find_nearest_line
#define tekhex_find_line _bfd_nosymbols_find_line
#define tekhex_find_inliner_info _bfd_nosymbols_find_inliner_info
+#define tekhex_get_symbol_version_string _bfd_nosymbols_get_symbol_version_string
#define tekhex_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define tekhex_read_minisymbols _bfd_generic_read_minisymbols
#define tekhex_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
diff --git a/bfd/versados.c b/bfd/versados.c
index 5bafcb1..2368998 100644
--- a/bfd/versados.c
+++ b/bfd/versados.c
@@ -811,6 +811,7 @@ versados_canonicalize_reloc (bfd *abfd,
#define versados_find_nearest_line _bfd_nosymbols_find_nearest_line
#define versados_find_line _bfd_nosymbols_find_line
#define versados_find_inliner_info _bfd_nosymbols_find_inliner_info
+#define versados_get_symbol_version_string _bfd_nosymbols_get_symbol_version_string
#define versados_make_empty_symbol _bfd_generic_make_empty_symbol
#define versados_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define versados_read_minisymbols _bfd_generic_read_minisymbols
diff --git a/bfd/vms-alpha.c b/bfd/vms-alpha.c
index 3789f79..8c24ef0 100644
--- a/bfd/vms-alpha.c
+++ b/bfd/vms-alpha.c
@@ -9191,6 +9191,9 @@ bfd_vms_get_data (bfd *abfd)
((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
#define alpha_vms_print_symbol vms_print_symbol
#define alpha_vms_get_symbol_info vms_get_symbol_info
+#define alpha_vms_get_symbol_version_string \
+ _bfd_nosymbols_get_symbol_version_string
+
#define alpha_vms_read_minisymbols _bfd_generic_read_minisymbols
#define alpha_vms_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
#define alpha_vms_get_lineno _bfd_nosymbols_get_lineno
diff --git a/bfd/xsym.c b/bfd/xsym.c
index 4e2a8ab..870795e 100644
--- a/bfd/xsym.c
+++ b/bfd/xsym.c
@@ -35,6 +35,7 @@
#define bfd_sym_find_nearest_line _bfd_nosymbols_find_nearest_line
#define bfd_sym_find_line _bfd_nosymbols_find_line
#define bfd_sym_find_inliner_info _bfd_nosymbols_find_inliner_info
+#define bfd_sym_get_symbol_version_string _bfd_nosymbols_get_symbol_version_string
#define bfd_sym_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define bfd_sym_read_minisymbols _bfd_generic_read_minisymbols
#define bfd_sym_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index f4d9aa6..86c8555 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,5 +1,11 @@
2014-11-25 H.J. Lu <hongjiu.lu@intel.com>
+ * objdump.c (objdump_print_symname): Replace
+ bfd_elf_get_symbol_version_string with
+ bfd_get_symbol_version_string.
+
+2014-11-25 H.J. Lu <hongjiu.lu@intel.com>
+
PR binutils/16496
* objdump.c (objdump_print_symname): Call
bfd_elf_get_symbol_version_string to get ELF symbol version
diff --git a/binutils/objdump.c b/binutils/objdump.c
index e04c3ee..fdfa602 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -808,9 +808,7 @@ objdump_print_symname (bfd *abfd, struct disassemble_info *inf,
name = alloc;
}
- if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
- version_string = bfd_elf_get_symbol_version_string (abfd, sym,
- &hidden);
+ version_string = bfd_get_symbol_version_string (abfd, sym, &hidden);
if (bfd_is_und_section (bfd_get_section (sym)))
hidden = TRUE;
--
1.9.3