aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2021-02-27 15:39:05 +1030
committerAlan Modra <amodra@gmail.com>2021-03-01 14:26:39 +1030
commit6a1224ec762f7dd59d7abd2e5dc3be26bb157cd1 (patch)
tree1e35d6d43b5efe25d4b7fc5e5ee818eb38e0742b
parentcf850febf6d2e3945670386c707a86363919e9ee (diff)
downloadgdb-6a1224ec762f7dd59d7abd2e5dc3be26bb157cd1.zip
gdb-6a1224ec762f7dd59d7abd2e5dc3be26bb157cd1.tar.gz
gdb-6a1224ec762f7dd59d7abd2e5dc3be26bb157cd1.tar.bz2
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.
-rw-r--r--binutils/ChangeLog13
-rw-r--r--binutils/doc/binutils.texi13
-rw-r--r--binutils/nm.c21
-rw-r--r--ld/ChangeLog9
-rw-r--r--ld/testsuite/ld-elf/pr25708.d2
-rw-r--r--ld/testsuite/ld-elf/pr27128a.d2
-rw-r--r--ld/testsuite/ld-elf/pr27128b.d2
-rw-r--r--ld/testsuite/ld-elf/pr27128c.d2
-rw-r--r--ld/testsuite/ld-elf/pr27128d.d2
-rw-r--r--ld/testsuite/ld-elf/pr27128e.d2
10 files changed, 54 insertions, 14 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 4289eb5..419be64 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -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
diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi
index b7740df..ee89833 100644
--- a/binutils/doc/binutils.texi
+++ b/binutils/doc/binutils.texi
@@ -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.
diff --git a/binutils/nm.c b/binutils/nm.c
index a51d2ef..2637756 100644
--- a/binutils/nm.c
+++ b/binutils/nm.c
@@ -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;
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 6540407..8739286 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -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
diff --git a/ld/testsuite/ld-elf/pr25708.d b/ld/testsuite/ld-elf/pr25708.d
index 30cae8c..60b8e31 100644
--- a/ld/testsuite/ld-elf/pr25708.d
+++ b/ld/testsuite/ld-elf/pr25708.d
@@ -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
diff --git a/ld/testsuite/ld-elf/pr27128a.d b/ld/testsuite/ld-elf/pr27128a.d
index 9ce8eaa..645d0cc 100644
--- a/ld/testsuite/ld-elf/pr27128a.d
+++ b/ld/testsuite/ld-elf/pr27128a.d
@@ -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.
diff --git a/ld/testsuite/ld-elf/pr27128b.d b/ld/testsuite/ld-elf/pr27128b.d
index 934f833..0721117 100644
--- a/ld/testsuite/ld-elf/pr27128b.d
+++ b/ld/testsuite/ld-elf/pr27128b.d
@@ -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.
diff --git a/ld/testsuite/ld-elf/pr27128c.d b/ld/testsuite/ld-elf/pr27128c.d
index f80c57b..d9cee44 100644
--- a/ld/testsuite/ld-elf/pr27128c.d
+++ b/ld/testsuite/ld-elf/pr27128c.d
@@ -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.
diff --git a/ld/testsuite/ld-elf/pr27128d.d b/ld/testsuite/ld-elf/pr27128d.d
index ba628d2..45d1972 100644
--- a/ld/testsuite/ld-elf/pr27128d.d
+++ b/ld/testsuite/ld-elf/pr27128d.d
@@ -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.
diff --git a/ld/testsuite/ld-elf/pr27128e.d b/ld/testsuite/ld-elf/pr27128e.d
index b8b1657..4263a05 100644
--- a/ld/testsuite/ld-elf/pr27128e.d
+++ b/ld/testsuite/ld-elf/pr27128e.d
@@ -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.