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.
+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
[@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
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.
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. */
OPTION_RECURSE_LIMIT,
OPTION_NO_RECURSE_LIMIT,
OPTION_IFUNC_CHARS,
- OPTION_WITH_SYMBOL_VERSIONS,
OPTION_QUIET
};
{"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}
};
\f
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);
name = alloc;
}
- if (info != NULL && info->elfinfo)
+ if (info != NULL && info->elfinfo && with_symbol_versions)
{
const char *version_string;
bfd_boolean hidden;
}
}
printf (form, name);
+ if (atver)
+ *atver = '@';
free (alloc);
}
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;
+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
#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
#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.
#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.
#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.
#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.
#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.