]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
PR27128, nm -P portable output format regression
authorAlan Modra <amodra@gmail.com>
Wed, 30 Dec 2020 11:30:57 +0000 (22:00 +1030)
committerAlan Modra <amodra@gmail.com>
Thu, 31 Dec 2020 23:49:44 +0000 (10:19 +1030)
binutils/
PR 27128
* nm.c (print_symname): Append version string to symbol name
before printing the lot under control of "form".  Append version
to demangled names too.
ld/
PR 27128
* testsuite/ld-elf/pr27128.s: New file.
* testsuite/ld-elf/pr27128.t: Likewise.
* 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.

(cherry picked from commit cab3f4da68672647cde72bc0c06ec08977819817)

binutils/ChangeLog
binutils/nm.c
ld/ChangeLog
ld/testsuite/ld-elf/pr27128.s [new file with mode: 0644]
ld/testsuite/ld-elf/pr27128.t [new file with mode: 0644]
ld/testsuite/ld-elf/pr27128a.d [new file with mode: 0644]
ld/testsuite/ld-elf/pr27128b.d [new file with mode: 0644]
ld/testsuite/ld-elf/pr27128c.d [new file with mode: 0644]
ld/testsuite/ld-elf/pr27128d.d [new file with mode: 0644]
ld/testsuite/ld-elf/pr27128e.d [new file with mode: 0644]

index c54b39f395425b4e334fbd887c9d8f80e8e59fec..4b6cd9f755e8a4de3ad49af8c1045aca2686fc55 100644 (file)
@@ -1,6 +1,12 @@
 2021-01-01  Alan Modra  <amodra@gmail.com>
 
        Apply from master
+       2020-12-31  Alan Modra  <amodra@gmail.com>
+       PR 27128
+       * nm.c (print_symname): Append version string to symbol name
+       before printing the lot under control of "form".  Append version
+       to demangled names too.
+
        2020-08-22  H.J. Lu  <hongjiu.lu@intel.com>
        PR ld/26382
        * nm.c (print_symname): Display only one '@' for undefined
index 3501f48d29eff43d0ef027c00dbaec05adcfed20..a5144faba60dd7fa7252afec795cbae32bcfa48d 100644 (file)
@@ -397,21 +397,17 @@ static void
 print_symname (const char *form, struct extended_symbol_info *info,
               const char *name, bfd *abfd)
 {
+  char *alloc = NULL;
+
   if (name == NULL)
     name = info->sinfo->name;
   if (do_demangle && *name)
     {
-      char *res = bfd_demangle (abfd, name, demangle_flags);
-
-      if (res != NULL)
-       {
-         printf (form, res);
-         free (res);
-         return;
-       }
+      alloc = bfd_demangle (abfd, name, demangle_flags);
+      if (alloc != NULL)
+       name = alloc;
     }
 
-  printf (form, name);
   if (info != NULL && info->elfinfo)
     {
       const char *version_string;
@@ -421,11 +417,17 @@ print_symname (const char *form, struct extended_symbol_info *info,
        = bfd_get_symbol_version_string (abfd, &info->elfinfo->symbol,
                                         FALSE, &hidden);
       if (version_string && version_string[0])
-       printf ("%s%s",
-              (hidden || bfd_is_und_section (info->elfinfo->symbol.section)
-               ? "@" : "@@"),
-              version_string);
+       {
+         const char *at = "@@";
+         if (hidden || bfd_is_und_section (info->elfinfo->symbol.section))
+           at = "@";
+         alloc = reconcat (alloc, name, at, version_string, NULL);
+         if (alloc != NULL)
+           name = alloc;
+       }
     }
+  printf (form, name);
+  free (alloc);
 }
 
 static void
index 4e6c60b761190d4a0841bb0a48a1f731238ee1a9..d8abc62717c85129fad5bdb06067ff2d7708a796 100644 (file)
@@ -1,6 +1,17 @@
 2021-01-01  Alan Modra  <amodra@gmail.com>
 
        Apply from master
+       2020-12-31  H.J. Lu  <hongjiu.lu@intel.com>
+                   Alan Modra  <amodra@gmail.com>
+       PR 27128
+       * testsuite/ld-elf/pr27128.s: New file.
+       * testsuite/ld-elf/pr27128.t: Likewise.
+       * 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.
+
        2020-08-24  Alan Modra  <amodra@gmail.com>
        * testsuite/ld-sparc/tlssunbin32.rd: Update for new readelf output.
        * testsuite/ld-sparc/tlssunbin64.rd: Likewise.
diff --git a/ld/testsuite/ld-elf/pr27128.s b/ld/testsuite/ld-elf/pr27128.s
new file mode 100644 (file)
index 0000000..7af5be1
--- /dev/null
@@ -0,0 +1,13 @@
+       .text
+       .globl  foo
+       .type   foo,%function
+foo:
+       .space 16
+       .size foo, .-foo
+       .symver foo,foo@@VERS_2.0,remove
+       .globl  _Zrm1XS_
+       .type   _Zrm1XS_,%function
+_Zrm1XS_:
+       .space 16
+       .size _Zrm1XS_, .-_Zrm1XS_
+       .symver _Zrm1XS_,_Zrm1XS_@@VERS_2.0,remove
diff --git a/ld/testsuite/ld-elf/pr27128.t b/ld/testsuite/ld-elf/pr27128.t
new file mode 100644 (file)
index 0000000..27669a5
--- /dev/null
@@ -0,0 +1,6 @@
+VERS_2.0 {
+global:
+  foo; _Zrm1XS_;
+local:
+  *;
+};
diff --git a/ld/testsuite/ld-elf/pr27128a.d b/ld/testsuite/ld-elf/pr27128a.d
new file mode 100644 (file)
index 0000000..9ce8eaa
--- /dev/null
@@ -0,0 +1,16 @@
+#source: pr27128.s
+#ld: -shared -version-script pr27128.t
+#nm: -n -P
+#target: [check_shared_lib_support]
+#notarget: [is_underscore_target]
+# _Zrm1XS_ doesn't have an extra underscore.
+#xfail: hppa64-*-* tic6x-*-*
+# hppa64 uses dot-symbols, tic6x DYN lacks dynamic sections for this testcase
+
+#...
+VERS_2\.0 A 0+ 
+#...
+foo@@VERS_2\.0 T [0-9a-f]+ 10
+#...
+_Zrm1XS_@@VERS_2\.0 T [0-9a-f]+ 10
+#pass
diff --git a/ld/testsuite/ld-elf/pr27128b.d b/ld/testsuite/ld-elf/pr27128b.d
new file mode 100644 (file)
index 0000000..934f833
--- /dev/null
@@ -0,0 +1,16 @@
+#source: pr27128.s
+#ld: -shared -version-script pr27128.t
+#nm: -n -D --format=posix
+#target: [check_shared_lib_support]
+#notarget: [is_underscore_target]
+# _Zrm1XS_ doesn't have an extra underscore.
+#xfail: hppa64-*-* tic6x-*-*
+# hppa64 uses dot-symbols, tic6x DYN lacks dynamic sections for this testcase
+
+#...
+VERS_2\.0 A 0+ 
+#...
+foo@@VERS_2\.0 T [0-9a-f]+ 10
+#...
+_Zrm1XS_@@VERS_2\.0 T [0-9a-f]+ 10
+#pass
diff --git a/ld/testsuite/ld-elf/pr27128c.d b/ld/testsuite/ld-elf/pr27128c.d
new file mode 100644 (file)
index 0000000..f80c57b
--- /dev/null
@@ -0,0 +1,16 @@
+#source: pr27128.s
+#ld: -shared -version-script pr27128.t
+#nm: -n --format=sysv
+#target: [check_shared_lib_support]
+#notarget: [is_underscore_target]
+# _Zrm1XS_ doesn't have an extra underscore.
+#xfail: hppa64-*-* tic6x-*-*
+# hppa64 uses dot-symbols, tic6x DYN lacks dynamic sections for this testcase
+
+#...
+VERS_2\.0 +\|0+\| +A +\| +OBJECT\| +\| +\|\*ABS\*
+#...
+foo@@VERS_2\.0 +\|[0-9a-f]+\| +T +\| +FUNC\|0+10\| +\|\.text
+#...
+_Zrm1XS_@@VERS_2\.0 +\|[0-9a-f]+\| +T +\| +FUNC\|0+10\| +\|\.text
+#pass
diff --git a/ld/testsuite/ld-elf/pr27128d.d b/ld/testsuite/ld-elf/pr27128d.d
new file mode 100644 (file)
index 0000000..ba628d2
--- /dev/null
@@ -0,0 +1,16 @@
+#source: pr27128.s
+#ld: -shared -version-script pr27128.t
+#nm: -n -D --format=sysv
+#target: [check_shared_lib_support]
+#notarget: [is_underscore_target]
+# _Zrm1XS_ doesn't have an extra underscore.
+#xfail: hppa64-*-* tic6x-*-*
+# hppa64 uses dot-symbols, tic6x DYN lacks dynamic sections for this testcase
+
+#...
+VERS_2\.0 +\|0+\| +A +\| +OBJECT\| +\| +\|\*ABS\*
+#...
+foo@@VERS_2\.0 +\|[0-9a-f]+\| +T +\| +FUNC\|0+10\| +\|\.text
+#...
+_Zrm1XS_@@VERS_2\.0 +\|[0-9a-f]+\| +T +\| +FUNC\|0+10\| +\|\.text
+#pass
diff --git a/ld/testsuite/ld-elf/pr27128e.d b/ld/testsuite/ld-elf/pr27128e.d
new file mode 100644 (file)
index 0000000..b8b1657
--- /dev/null
@@ -0,0 +1,16 @@
+#source: pr27128.s
+#ld: -shared -version-script pr27128.t
+#nm: -n --demangle -D --format=posix
+#target: [check_shared_lib_support]
+#notarget: [is_underscore_target]
+# _Zrm1XS_ doesn't have an extra underscore.
+#xfail: hppa64-*-* tic6x-*-*
+# hppa64 uses dot-symbols, tic6x DYN lacks dynamic sections for this testcase
+
+#...
+VERS_2\.0 A 0+ 
+#...
+foo@@VERS_2\.0 T [0-9a-f]+ 10
+#...
+operator%\(X, X\)@@VERS_2\.0 T [0-9a-f]+ 10
+#pass