/* 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.
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)
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);
}
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
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));
}
}
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;
*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
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)))
{
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)))