readelf: Correct version flag formatting

Remove a trailing space or a leading pipe character from version flags
printed with `readelf --version-info'.

For example with the `mips-linux' target we get:

$ cat ver_def.s
	.data
	.globl	new_foo
	.type	new_foo, %object
new_foo:
	.symver	new_foo, foo@@ver_foo
$ cat ver_def.ver
{ global: *foo*; local: *; };
$ as -o ver_def.o ver_def.s
$ ld -e 0 --export-dynamic --version-script=ver_def.ver -o ver_def ver_def.o
$ readelf -V ver_def

Version symbols section '.gnu.version' contains 4 entries:
 Addr: 000000000000007e  Offset: 0x01007e  Link: 2 (.dynsym)
  000:   0 (*local*)       2 (ver_foo)       1 (*global*)      2 (ver_foo)

Version definition section '.gnu.version_d' contains 2 entries:
  Addr: 0x0000000000000088  Offset: 0x010088  Link: 3 (.dynstr)
  000000: Rev: 1  Flags: BASE   Index: 1  Cnt: 1  Name: ver_def
  0x001c: Rev: 1  Flags: none  Index: 2  Cnt: 1  Name: ver_foo
$

which includes an unnecessary space after `BASE'; both call sites
already provide suitable separation from output that follows.  Also if
only unknown flags were present, then lone `| <unknown>' would be
printed.

	binutils/
	* readelf.c (get_ver_flags): Tidy the formatting of the string
	returned
This commit is contained in:
Maciej W. Rozycki 2017-02-23 18:18:51 +00:00
parent 5235cd6861
commit 7bb1ad1738
2 changed files with 16 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2017-02-24 Maciej W. Rozycki <macro@imgtec.com>
* readelf.c (get_ver_flags): Tidy the formatting of the string
returned
2017-02-24 Maciej W. Rozycki <macro@imgtec.com> 2017-02-24 Maciej W. Rozycki <macro@imgtec.com>
* readelf.c (process_version_sections) <SHT_GNU_verdef>: Make * readelf.c (process_version_sections) <SHT_GNU_verdef>: Make

View File

@ -9947,26 +9947,31 @@ get_ver_flags (unsigned int flags)
return _("none"); return _("none");
if (flags & VER_FLG_BASE) if (flags & VER_FLG_BASE)
strcat (buff, "BASE "); strcat (buff, "BASE");
if (flags & VER_FLG_WEAK) if (flags & VER_FLG_WEAK)
{ {
if (flags & VER_FLG_BASE) if (flags & VER_FLG_BASE)
strcat (buff, "| "); strcat (buff, " | ");
strcat (buff, "WEAK "); strcat (buff, "WEAK");
} }
if (flags & VER_FLG_INFO) if (flags & VER_FLG_INFO)
{ {
if (flags & (VER_FLG_BASE|VER_FLG_WEAK)) if (flags & (VER_FLG_BASE|VER_FLG_WEAK))
strcat (buff, "| "); strcat (buff, " | ");
strcat (buff, "INFO "); strcat (buff, "INFO");
} }
if (flags & ~(VER_FLG_BASE | VER_FLG_WEAK | VER_FLG_INFO)) if (flags & ~(VER_FLG_BASE | VER_FLG_WEAK | VER_FLG_INFO))
strcat (buff, _("| <unknown>")); {
if (flags & (VER_FLG_BASE | VER_FLG_WEAK | VER_FLG_INFO))
strcat (buff, " | ");
strcat (buff, _("<unknown>"));
}
return buff; return buff;
} }