LD: vfinfo: Make clever formatters consistent WRT function name reporting
authorMaciej W. Rozycki <macro@imgtec.com>
Tue, 7 Feb 2017 02:08:23 +0000 (02:08 +0000)
committerMaciej W. Rozycki <macro@imgtec.com>
Wed, 15 Feb 2017 13:41:51 +0000 (13:41 +0000)
commitebf0b03c706b28c990f5f3c6713dacd23f58341e
treee27697be2bf1feb704466f11de04f06813b28368
parent174d0a74a2e631d7303fe00b517bcee75003a4a6
LD: vfinfo: Make clever formatters consistent WRT function name reporting

Remove an inconsistency in linker error message processing causing that
it depends on the ability to infer the name of the originating source
file whether or not the name of the offending function is repeated by
clever formatters for each issue reported within the function.

Taking the `ld/testsuite/ld-powerpc/tocopt7.s' test case source as an
example and the `powerpc-linux' target we have:

$ as -gdwarf2 -o tocopt.o -a64 tocopt.s
$ ld -o tocopt -melf64ppc tocopt.o
tocopt.o: In function `_start':
tocopt.s:35:(.text+0x14): toc optimization is not supported for 0x3fa00000 instruction.
tocopt.s:49:(.text+0x34): toc optimization is not supported for 0x3fa00000 instruction.
$

vs:

$ as -o tocopt.o -a64 tocopt.s
$ ld -o tocopt -melf64ppc tocopt.o
tocopt.o: In function `_start':
(.text+0x14): toc optimization is not supported for 0x3fa00000 instruction.
tocopt.o: In function `_start':
(.text+0x34): toc optimization is not supported for 0x3fa00000 instruction.
$

Similarly with the `mips-linux' target and this source:

$ cat jal-global-multi-overflow.s
.text
.set noreorder
.space 0x2000

.align 4
.globl foo
.ent foo
foo:
jal bar
 nor $0, $0
jal bar
 nor $0, $0
.end foo

.space 0x1ff0

.align 4
.globl bar
.ent bar
bar:
jal foo
 nor $0, $0
jal foo
 nor $0, $0
.end bar
$ as -o jal-global-multi-overflow.o jal-global-multi-overflow.s
$ ld -Ttext 0x1fffd000 -e foo -o jal-global-multi-overflow jal-global-multi-overflow.o
jal-global-multi-overflow.o: In function `foo':
(.text+0x2000): relocation truncated to fit: R_MIPS_26 against `bar'
jal-global-multi-overflow.o: In function `foo':
(.text+0x2008): relocation truncated to fit: R_MIPS_26 against `bar'
jal-global-multi-overflow.o: In function `bar':
(.text+0x4000): relocation truncated to fit: R_MIPS_26 against `foo'
jal-global-multi-overflow.o: In function `bar':
(.text+0x4008): relocation truncated to fit: R_MIPS_26 against `foo'
$

Not only this is inconsistent, but it causes output clutter as well with
redundant information.

The cause for this is a check in `vfinfo' the intent of which is to
print the function heading whenever (among others) the name of the
source file has changed, which however does not take into account a
situation where the name couldn't have been established both now and
previously.

Adjust the check then for this situation, yielding:

$ as -o tocopt.o -a64 tocopt.s
$ ld -o tocopt -melf64ppc tocopt.o
tocopt.o: In function `_start':
(.text+0x14): toc optimization is not supported for 0x3fa00000 instruction.
(.text+0x34): toc optimization is not supported for 0x3fa00000 instruction.
$

and:

$ as -o jal-global-multi-overflow.o jal-global-multi-overflow.s
$ ld -Ttext 0x1fffd000 -e foo -o jal-global-multi-overflow jal-global-multi-overflow.o
jal-global-multi-overflow.o: In function `foo':
(.text+0x2000): relocation truncated to fit: R_MIPS_26 against `bar'
(.text+0x2008): relocation truncated to fit: R_MIPS_26 against `bar'
jal-global-multi-overflow.o: In function `bar':
(.text+0x4000): relocation truncated to fit: R_MIPS_26 against `foo'
(.text+0x4008): relocation truncated to fit: R_MIPS_26 against `foo'
$

respectively instead.  Adjust the test suite accordingly.

ld/
* ldmisc.c (vfinfo): Don't print the function name again either
if no source file name has been found both now and previously.
* testsuite/ld-cris/tls-err-20x.d: Adjust accordingly.
* testsuite/ld-mips-elf/mode-change-error-1.d: Likewise.
* testsuite/ld-mips-elf/unaligned-branch.d: Likewise.
* testsuite/ld-mips-elf/unaligned-branch-mips16.d: Likewise.
* testsuite/ld-mips-elf/unaligned-branch-micromips.d: Likewise.
* testsuite/ld-mips-elf/unaligned-branch-r6-1.d: Likewise.
* testsuite/ld-mips-elf/unaligned-branch-2.d: Likewise.
* testsuite/ld-mips-elf/unaligned-branch-r6-2.d: Likewise.
* testsuite/ld-mips-elf/unaligned-branch-ignore-2.d: Likewise.
* testsuite/ld-mips-elf/unaligned-branch-ignore-mips16.d:
Likewise.
* testsuite/ld-mips-elf/unaligned-branch-ignore-micromips.d:
Likewise.
* testsuite/ld-mips-elf/unaligned-branch-ignore-r6-1.d:
Likewise.
* testsuite/ld-mips-elf/unaligned-jalx-addend-1.d: Likewise.
* testsuite/ld-mips-elf/unaligned-jalx-addend-mips16-1.d:
Likewise.
* testsuite/ld-mips-elf/unaligned-jalx-addend-micromips-1.d:
Likewise.
* testsuite/ld-mips-elf/unaligned-jalx-addend-3.d: Likewise.
* testsuite/ld-mips-elf/unaligned-jump.d: Likewise.
* testsuite/ld-mips-elf/unaligned-jump-mips16.d: Likewise.
* testsuite/ld-mips-elf/unaligned-jump-micromips.d: Likewise.
* testsuite/ld-mips-elf/unaligned-lwpc-1.d: Likewise.
* testsuite/ld-mips-elf/unaligned-ldpc-1.d: Likewise.
* testsuite/ld-powerpc/tocopt.out: Likewise.
* testsuite/ld-powerpc/tocopt7.out: Likewise.
25 files changed:
ld/ChangeLog
ld/ldmisc.c
ld/testsuite/ld-cris/tls-err-20x.d
ld/testsuite/ld-mips-elf/mode-change-error-1.d
ld/testsuite/ld-mips-elf/unaligned-branch-2.d
ld/testsuite/ld-mips-elf/unaligned-branch-ignore-2.d
ld/testsuite/ld-mips-elf/unaligned-branch-ignore-micromips.d
ld/testsuite/ld-mips-elf/unaligned-branch-ignore-mips16.d
ld/testsuite/ld-mips-elf/unaligned-branch-ignore-r6-1.d
ld/testsuite/ld-mips-elf/unaligned-branch-micromips.d
ld/testsuite/ld-mips-elf/unaligned-branch-mips16.d
ld/testsuite/ld-mips-elf/unaligned-branch-r6-1.d
ld/testsuite/ld-mips-elf/unaligned-branch-r6-2.d
ld/testsuite/ld-mips-elf/unaligned-branch.d
ld/testsuite/ld-mips-elf/unaligned-jalx-addend-1.d
ld/testsuite/ld-mips-elf/unaligned-jalx-addend-3.d
ld/testsuite/ld-mips-elf/unaligned-jalx-addend-micromips-1.d
ld/testsuite/ld-mips-elf/unaligned-jalx-addend-mips16-1.d
ld/testsuite/ld-mips-elf/unaligned-jump-micromips.d
ld/testsuite/ld-mips-elf/unaligned-jump-mips16.d
ld/testsuite/ld-mips-elf/unaligned-jump.d
ld/testsuite/ld-mips-elf/unaligned-ldpc-1.d
ld/testsuite/ld-mips-elf/unaligned-lwpc-1.d
ld/testsuite/ld-powerpc/tocopt.out
ld/testsuite/ld-powerpc/tocopt7.out