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.
This commit is contained in:
Alan Modra 2020-12-30 22:00:57 +10:30
parent 4ff509e75b
commit cab3f4da68
10 changed files with 133 additions and 13 deletions

View File

@ -1,3 +1,10 @@
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-12-29 H.J. Lu <hongjiu.lu@intel.com>
* elfedit (usage): Pass osabi to reconcat.

View File

@ -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

View File

@ -1,3 +1,15 @@
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-12-24 Alan Modra <amodra@gmail.com>
* testsuite/ld-elf/retain7a.d: Don't run on hppa-linux.

View File

@ -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

View File

@ -0,0 +1,6 @@
VERS_2.0 {
global:
foo; _Zrm1XS_;
local:
*;
};

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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