[PATCH] nm: Ignore --with-symbol-versions for backward compatibility

H.J. Lu hjl.tools@gmail.com
Mon Jul 27 13:44:17 GMT 2020


Since

commit 7e6e972f74aeac0ebdbd95a7f905d871cd2581de
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Tue Mar 24 04:23:11 2020 -0700

    bfd: Display symbol version for nm -D

always displays symbol version for nm, ignore --with-symbol-versions for
backward compatibility.

binutils/

	PR binutils/26302
	* nm.c (with_symbol_versions): Removed.
	(long_option_values): Add OPTION_WITH_SYMBOL_VERSIONS.
	(long_options): Update --with-symbol-versions entry.
	(print_symbol): Remove the with_symbol_versions check.
	(main): Add OPTION_WITH_SYMBOL_VERSIONS for backward
	compatibility.
	* doc/binutils.texi: Update --with-symbol-versions documentation.

ld/

	PR binutils/26302
	* testsuite/ld-elf/pr26302.nd: New file.
	* testsuite/ld-elf/pr26302.ver: Likewise.
	* testsuite/ld-elf/pr26302a.c: Likewise.
	* testsuite/ld-elf/pr26302b.c: Likewise.
	* testsuite/ld-elf/shared.exp: Run binutils/26302 tests.
---
 binutils/doc/binutils.texi      |  3 ++-
 binutils/nm.c                   | 26 +++++++-------------------
 ld/testsuite/ld-elf/pr26302.nd  |  3 +++
 ld/testsuite/ld-elf/pr26302.ver |  5 +++++
 ld/testsuite/ld-elf/pr26302a.c  |  4 ++++
 ld/testsuite/ld-elf/pr26302b.c  |  7 +++++++
 ld/testsuite/ld-elf/shared.exp  | 18 ++++++++++++++++++
 7 files changed, 46 insertions(+), 20 deletions(-)
 create mode 100644 ld/testsuite/ld-elf/pr26302.nd
 create mode 100644 ld/testsuite/ld-elf/pr26302.ver
 create mode 100644 ld/testsuite/ld-elf/pr26302a.c
 create mode 100644 ld/testsuite/ld-elf/pr26302b.c

diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi
index 4a11bf1f1a..d4a3bd69ee 100644
--- a/binutils/doc/binutils.texi
+++ b/binutils/doc/binutils.texi
@@ -1136,7 +1136,8 @@ 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}.
+characters.  For example @samp{foo@@@@VER_2}.  Note that this option
+is always enabled.
 
 @item --target=@var{bfdname}
 @cindex object code format
diff --git a/binutils/nm.c b/binutils/nm.c
index 1b5122d56a..69e697ae92 100644
--- a/binutils/nm.c
+++ b/binutils/nm.c
@@ -161,7 +161,6 @@ 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 = 0; /* Include symbol version information in the output.  */
 
 static int demangle_flags = DMGL_ANSI | DMGL_PARAMS;
 
@@ -192,7 +191,8 @@ enum long_option_values
   OPTION_PLUGIN,
   OPTION_SIZE_SORT,
   OPTION_RECURSE_LIMIT,
-  OPTION_NO_RECURSE_LIMIT
+  OPTION_NO_RECURSE_LIMIT,
+  OPTION_WITH_SYMBOL_VERSIONS
 };
 
 static struct option long_options[] =
@@ -226,7 +226,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, &with_symbol_versions, 1},
+  {"with-symbol-versions", no_argument, NULL,
+   OPTION_WITH_SYMBOL_VERSIONS},
   {0, no_argument, 0, 0}
 };
 
@@ -901,22 +902,6 @@ print_symbol (bfd *        abfd,
 
   format->print_symbol_info (&info, abfd);
 
-  if (with_symbol_versions)
-    {
-      const char *  version_string = NULL;
-      bfd_boolean   hidden = FALSE;
-
-      if ((sym->flags & (BSF_SECTION_SYM | BSF_SYNTHETIC)) == 0)
-	version_string = bfd_get_symbol_version_string (abfd, sym,
-							TRUE, &hidden);
-
-      if (bfd_is_und_section (bfd_asymbol_section (sym)))
-	hidden = TRUE;
-
-      if (version_string && *version_string != '\0')
-	printf (hidden ? "@%s" : "@@%s", version_string);
-    }
-
   if (line_numbers)
     {
       static asymbol **syms;
@@ -1761,6 +1746,9 @@ 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 'D':
 	  dynamic = 1;
 	  break;
diff --git a/ld/testsuite/ld-elf/pr26302.nd b/ld/testsuite/ld-elf/pr26302.nd
new file mode 100644
index 0000000000..1f2fbdf9a3
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr26302.nd
@@ -0,0 +1,3 @@
+#...
+ +U foo@@FOO
+#pass
diff --git a/ld/testsuite/ld-elf/pr26302.ver b/ld/testsuite/ld-elf/pr26302.ver
new file mode 100644
index 0000000000..f2c03ac7a1
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr26302.ver
@@ -0,0 +1,5 @@
+FOO
+{
+global:
+  foo;
+};
diff --git a/ld/testsuite/ld-elf/pr26302a.c b/ld/testsuite/ld-elf/pr26302a.c
new file mode 100644
index 0000000000..cd0130cacd
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr26302a.c
@@ -0,0 +1,4 @@
+void
+foo (void)
+{
+}
diff --git a/ld/testsuite/ld-elf/pr26302b.c b/ld/testsuite/ld-elf/pr26302b.c
new file mode 100644
index 0000000000..eae278df96
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr26302b.c
@@ -0,0 +1,7 @@
+extern void foo (void);
+
+void
+bar (void)
+{
+  foo ();
+}
diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp
index e9e9012058..014937175f 100644
--- a/ld/testsuite/ld-elf/shared.exp
+++ b/ld/testsuite/ld-elf/shared.exp
@@ -843,6 +843,24 @@ run_cc_link_tests [list \
 	{{readelf {--dyn-syms --wide} pr26094-1b.rd}} \
 	"pr26094-1" \
     ] \
+    [list \
+	"Build pr26302a.so" \
+	"-shared -Wl,--version-script=pr26302.ver" \
+	"-fPIC" \
+	{pr26302a.c} \
+	{} \
+	"pr26302a.so"
+    ] \
+    [list \
+	"Build pr26302b.so" \
+	"-shared -Wl,--no-as-needed tmpdir/pr26302a.so" \
+	"-fPIC" \
+	{pr26302b.c} \
+	{{nm {-u} pr26302.nd} \
+	 {nm {-u -D} pr26302.nd} \
+	 {nm {-u -D --with-symbol-versions} pr26302.nd}} \
+	"pr26302b.so" \
+    ] \
 ]
 
 run_ld_link_tests [list \
-- 
2.26.2



More information about the Binutils mailing list