From cab3f4da68672647cde72bc0c06ec08977819817 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 30 Dec 2020 22:00:57 +1030 Subject: [PATCH] PR27128, nm -P portable output format regression 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. --- binutils/ChangeLog | 7 +++++++ binutils/nm.c | 28 +++++++++++++++------------- ld/ChangeLog | 12 ++++++++++++ ld/testsuite/ld-elf/pr27128.s | 13 +++++++++++++ ld/testsuite/ld-elf/pr27128.t | 6 ++++++ ld/testsuite/ld-elf/pr27128a.d | 16 ++++++++++++++++ ld/testsuite/ld-elf/pr27128b.d | 16 ++++++++++++++++ ld/testsuite/ld-elf/pr27128c.d | 16 ++++++++++++++++ ld/testsuite/ld-elf/pr27128d.d | 16 ++++++++++++++++ ld/testsuite/ld-elf/pr27128e.d | 16 ++++++++++++++++ 10 files changed, 133 insertions(+), 13 deletions(-) create mode 100644 ld/testsuite/ld-elf/pr27128.s create mode 100644 ld/testsuite/ld-elf/pr27128.t create mode 100644 ld/testsuite/ld-elf/pr27128a.d create mode 100644 ld/testsuite/ld-elf/pr27128b.d create mode 100644 ld/testsuite/ld-elf/pr27128c.d create mode 100644 ld/testsuite/ld-elf/pr27128d.d create mode 100644 ld/testsuite/ld-elf/pr27128e.d diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 9bbe1fe061b..7bd55845686 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,10 @@ +2020-12-31 Alan Modra + + 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-12-29 H.J. Lu * elfedit (usage): Pass osabi to reconcat. diff --git a/binutils/nm.c b/binutils/nm.c index 2946bd69046..e77828eeff6 100644 --- a/binutils/nm.c +++ b/binutils/nm.c @@ -407,21 +407,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; @@ -431,11 +427,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 diff --git a/ld/ChangeLog b/ld/ChangeLog index f14a0b28ee1..03b4b224b7b 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,15 @@ +2020-12-31 H.J. Lu + Alan Modra + + 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-12-24 Alan Modra * testsuite/ld-elf/retain7a.d: Don't run on hppa-linux. diff --git a/ld/testsuite/ld-elf/pr27128.s b/ld/testsuite/ld-elf/pr27128.s new file mode 100644 index 00000000000..7af5be183b6 --- /dev/null +++ b/ld/testsuite/ld-elf/pr27128.s @@ -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 index 00000000000..27669a505b6 --- /dev/null +++ b/ld/testsuite/ld-elf/pr27128.t @@ -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 index 00000000000..9ce8eaa5467 --- /dev/null +++ b/ld/testsuite/ld-elf/pr27128a.d @@ -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 index 00000000000..934f8330d76 --- /dev/null +++ b/ld/testsuite/ld-elf/pr27128b.d @@ -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 index 00000000000..f80c57b64cd --- /dev/null +++ b/ld/testsuite/ld-elf/pr27128c.d @@ -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 index 00000000000..ba628d22de3 --- /dev/null +++ b/ld/testsuite/ld-elf/pr27128d.d @@ -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 index 00000000000..b8b1657fe71 --- /dev/null +++ b/ld/testsuite/ld-elf/pr27128e.d @@ -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 -- 2.30.2