X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=binutils%2Fnm.c;h=1b5122d56ab5c00fc710a775053eb2ee300b0665;hb=b37a7714400cdc264ed236f72668b8956477b2ed;hp=2ee38c29f76a95300750b38a0dab2b13f510ffa5;hpb=352f6bc3e5b23e76d8e6f56fb7db4e57d8f5d5bd;p=deliverable%2Fbinutils-gdb.git diff --git a/binutils/nm.c b/binutils/nm.c index 2ee38c29f7..1b5122d56a 100644 --- a/binutils/nm.c +++ b/binutils/nm.c @@ -1,5 +1,5 @@ /* nm.c -- Describe symbol table of a rel file. - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -67,7 +67,6 @@ struct extended_symbol_info coff_symbol_type *coffinfo; /* FIXME: We should add more fields for Type, Line, Section. */ }; -#define SYM_NAME(sym) (sym->sinfo->name) #define SYM_VALUE(sym) (sym->sinfo->value) #define SYM_TYPE(sym) (sym->sinfo->type) #define SYM_STAB_NAME(sym) (sym->sinfo->stab_name) @@ -394,8 +393,11 @@ get_coff_symbol_type (const struct internal_syment *sym) demangling it if requested. */ static void -print_symname (const char *form, const char *name, bfd *abfd) +print_symname (const char *form, struct extended_symbol_info *info, + const char *name, bfd *abfd) { + if (name == NULL) + name = info->sinfo->name; if (do_demangle && *name) { char *res = bfd_demangle (abfd, name, demangle_flags); @@ -409,6 +411,17 @@ print_symname (const char *form, const char *name, bfd *abfd) } printf (form, name); + if (info != NULL && info->elfinfo) + { + const char *version_string; + bfd_boolean hidden; + + version_string + = bfd_get_symbol_version_string (abfd, &info->elfinfo->symbol, + FALSE, &hidden); + if (version_string && version_string[0]) + printf ("%s%s", hidden ? "@" : "@@", version_string); + } } static void @@ -433,7 +446,7 @@ print_symdef_entry (bfd *abfd) bfd_fatal ("bfd_get_elt_at_index"); if (thesym->name != (char *) NULL) { - print_symname ("%s", thesym->name, abfd); + print_symname ("%s", NULL, thesym->name, abfd); printf (" in %s\n", bfd_get_filename (elt)); } } @@ -894,7 +907,8 @@ print_symbol (bfd * abfd, bfd_boolean hidden = FALSE; if ((sym->flags & (BSF_SECTION_SYM | BSF_SYNTHETIC)) == 0) - version_string = bfd_get_symbol_version_string (abfd, sym, &hidden); + version_string = bfd_get_symbol_version_string (abfd, sym, + TRUE, &hidden); if (bfd_is_und_section (bfd_asymbol_section (sym))) hidden = TRUE; @@ -1171,6 +1185,8 @@ display_rel_file (bfd *abfd, bfd *archive_bfd) *symp = 0; symcount += synth_count; } + if (!dynamic && dyn_syms != NULL) + free (dyn_syms); } /* lto_slim_object is set to false when a bfd is loaded with a compiler @@ -1604,13 +1620,13 @@ print_symbol_info_bsd (struct extended_symbol_info *info, bfd *abfd) printf (desc_format, SYM_STAB_DESC (info)); printf (" %5s", SYM_STAB_NAME (info)); } - print_symname (" %s", SYM_NAME (info), abfd); + print_symname (" %s", info, NULL, abfd); } static void print_symbol_info_sysv (struct extended_symbol_info *info, bfd *abfd) { - print_symname ("%-20s|", SYM_NAME (info), abfd); + print_symname ("%-20s|", info, NULL, abfd); if (bfd_is_undefined_symclass (SYM_TYPE (info))) { @@ -1665,7 +1681,7 @@ print_symbol_info_sysv (struct extended_symbol_info *info, bfd *abfd) static void print_symbol_info_posix (struct extended_symbol_info *info, bfd *abfd) { - print_symname ("%s ", SYM_NAME (info), abfd); + print_symname ("%s ", info, NULL, abfd); printf ("%c ", SYM_TYPE (info)); if (bfd_is_undefined_symclass (SYM_TYPE (info)))