PR27128, nm -P portable output format regression

Add nm --without-symbol-versions.

binutils/
	PR 27128
	* doc/binutils.texi: Add nm --with-symbol-versions and
	--without-symbol-versions documentation.
	* nm.c (with_symbol_versions): New variable.
	(enum long_option_values): Delete OPTION_WITH_SYMBOL_VERSIONS.
	(long_options): Make --with-symbol-versions entry twiddle the flag.
	Add --without-symbol-versions.
	(print_symname): Strip version when !with_symbol_versions.  Add
	dynamic version info under control of with_symbol_versions.
	(main): Remove OPTION_WITH_SYMBOL_VERSIONS case.
ld/
	* testsuite/ld-elf/pr25708.d: Add --with-symbol-versions to nm.
	* testsuite/ld-elf/pr27128a.d: Likewise.
	* testsuite/ld-elf/pr27128b.d: Likewise.
	* testsuite/ld-elf/pr27128c.d: Likewise.
	* testsuite/ld-elf/pr27128d.d: Likewise.
	* testsuite/ld-elf/pr27128e.d: Likewise.
This commit is contained in:
Alan Modra 2021-02-27 15:39:05 +10:30
parent cf850febf6
commit 6a1224ec76
10 changed files with 54 additions and 14 deletions

View File

@ -1,3 +1,16 @@
2021-03-01 Alan Modra <amodra@gmail.com>
PR 27128
* doc/binutils.texi: Add nm --with-symbol-versions and
--without-symbol-versions documentation.
* nm.c (with_symbol_versions): New variable.
(enum long_option_values): Delete OPTION_WITH_SYMBOL_VERSIONS.
(long_options): Make --with-symbol-versions entry twiddle the flag.
Add --without-symbol-versions.
(print_symname): Strip version when !with_symbol_versions. Add
dynamic version info under control of with_symbol_versions.
(main): Remove OPTION_WITH_SYMBOL_VERSIONS case.
2021-02-26 Fangrui Song <maskray@google.com>
PR 27408

View File

@ -808,7 +808,8 @@ nm [@option{-A}|@option{-o}|@option{--print-file-name}] [@option{-a}|@option{--d
[@option{--plugin} @var{name}]
[@option{--no-recurse-limit}|@option{--recurse-limit}]]
[@option{--size-sort}] [@option{--special-syms}]
[@option{--synthetic}] [@option{--target=}@var{bfdname}]
[@option{--synthetic}] [@option{--with-symbol-versions}]
[@option{--without-symbol-versions}] [@option{--target=}@var{bfdname}]
[@var{objfile}@dots{}]
@c man end
@end smallexample
@ -1169,6 +1170,16 @@ Include synthetic symbols in the output. These are special symbols
created by the linker for various purposes. They are not shown by
default since they are not part of the binary's original source code.
@item --with-symbol-versions
@item --without-symbol-versions
Enables or disables the display of symbol version information. The
version string is displayed as a suffix to the symbol name, preceded
by an @@ character. For example @samp{foo@@VER_1}. If the version is
the default version to be used when resolving unversioned references
to the symbol then it is displayed as a suffix preceded by two @@
characters. For example @samp{foo@@@@VER_2}. By default, symbol
version information is displayed.
@item --target=@var{bfdname}
@cindex object code format
Specify an object code format other than your system's default format.

View File

@ -161,6 +161,7 @@ static int show_version = 0; /* Show the version number. */
static int show_synthetic = 0; /* Display synthesized symbols too. */
static int line_numbers = 0; /* Print line numbers for symbols. */
static int allow_special_symbols = 0; /* Allow special symbols. */
static int with_symbol_versions = -1; /* Output symbol version information. */
static int quiet = 0; /* Suppress "no symbols" diagnostic. */
/* The characters to use for global and local ifunc symbols. */
@ -201,7 +202,6 @@ enum long_option_values
OPTION_RECURSE_LIMIT,
OPTION_NO_RECURSE_LIMIT,
OPTION_IFUNC_CHARS,
OPTION_WITH_SYMBOL_VERSIONS,
OPTION_QUIET
};
@ -238,8 +238,8 @@ static struct option long_options[] =
{"defined-only", no_argument, &defined_only, 1},
{"undefined-only", no_argument, &undefined_only, 1},
{"version", no_argument, &show_version, 1},
{"with-symbol-versions", no_argument, NULL,
OPTION_WITH_SYMBOL_VERSIONS},
{"with-symbol-versions", no_argument, &with_symbol_versions, 1},
{"without-symbol-versions", no_argument, &with_symbol_versions, 0},
{0, no_argument, 0, 0}
};
@ -412,9 +412,17 @@ print_symname (const char *form, struct extended_symbol_info *info,
const char *name, bfd *abfd)
{
char *alloc = NULL;
char *atver = NULL;
if (name == NULL)
name = info->sinfo->name;
if (!with_symbol_versions
&& bfd_get_flavour (abfd) == bfd_target_elf_flavour)
{
atver = strchr (name, '@');
if (atver)
*atver = 0;
}
if (do_demangle && *name)
{
alloc = bfd_demangle (abfd, name, demangle_flags);
@ -422,7 +430,7 @@ print_symname (const char *form, struct extended_symbol_info *info,
name = alloc;
}
if (info != NULL && info->elfinfo)
if (info != NULL && info->elfinfo && with_symbol_versions)
{
const char *version_string;
bfd_boolean hidden;
@ -441,6 +449,8 @@ print_symname (const char *form, struct extended_symbol_info *info,
}
}
printf (form, name);
if (atver)
*atver = '@';
free (alloc);
}
@ -1780,9 +1790,6 @@ main (int argc, char **argv)
case OPTION_NO_RECURSE_LIMIT:
demangle_flags |= DMGL_NO_RECURSE_LIMIT;
break;
case OPTION_WITH_SYMBOL_VERSIONS:
/* Ignored for backward compatibility. */
break;
case OPTION_QUIET:
quiet = 1;
break;

View File

@ -1,3 +1,12 @@
2021-03-01 Alan Modra <amodra@gmail.com>
* testsuite/ld-elf/pr25708.d: Add --with-symbol-versions to nm.
* testsuite/ld-elf/pr27128a.d: Likewise.
* testsuite/ld-elf/pr27128b.d: Likewise.
* testsuite/ld-elf/pr27128c.d: Likewise.
* testsuite/ld-elf/pr27128d.d: Likewise.
* testsuite/ld-elf/pr27128e.d: Likewise.
2021-02-26 Alan Modra <amodra@gmail.com>
PR 27441

View File

@ -1,6 +1,6 @@
#source: pr13195.s
#ld: -shared -version-script pr13195.t
#nm: -D
#nm: -D --with-symbol-versions
#target: *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi
#xfail: hppa64-*-* ![check_shared_lib_support]
# h8300 doesn't support -shared, and hppa64 creates .foo

View File

@ -1,6 +1,6 @@
#source: pr27128.s
#ld: -shared -version-script pr27128.t
#nm: -n -P
#nm: -n -P --with-symbol-versions
#target: [check_shared_lib_support]
#notarget: [is_underscore_target]
# _Zrm1XS_ doesn't have an extra underscore.

View File

@ -1,6 +1,6 @@
#source: pr27128.s
#ld: -shared -version-script pr27128.t
#nm: -n -D --format=posix
#nm: -n -D --format=posix --with-symbol-versions
#target: [check_shared_lib_support]
#notarget: [is_underscore_target]
# _Zrm1XS_ doesn't have an extra underscore.

View File

@ -1,6 +1,6 @@
#source: pr27128.s
#ld: -shared -version-script pr27128.t
#nm: -n --format=sysv
#nm: -n --format=sysv --with-symbol-versions
#target: [check_shared_lib_support]
#notarget: [is_underscore_target]
# _Zrm1XS_ doesn't have an extra underscore.

View File

@ -1,6 +1,6 @@
#source: pr27128.s
#ld: -shared -version-script pr27128.t
#nm: -n -D --format=sysv
#nm: -n -D --format=sysv --with-symbol-versions
#target: [check_shared_lib_support]
#notarget: [is_underscore_target]
# _Zrm1XS_ doesn't have an extra underscore.

View File

@ -1,6 +1,6 @@
#source: pr27128.s
#ld: -shared -version-script pr27128.t
#nm: -n --demangle -D --format=posix
#nm: -n --demangle -D --format=posix --with-symbol-versions
#target: [check_shared_lib_support]
#notarget: [is_underscore_target]
# _Zrm1XS_ doesn't have an extra underscore.