mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
ebf0b03c70
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.
40 lines
2.8 KiB
Makefile
40 lines
2.8 KiB
Makefile
#name: MIPS16 link branch to unaligned symbol
|
|
#as: -EB -n32 -march=from-abi
|
|
#ld: -EB -Ttext 0x1c000000 -e 0x1c000000
|
|
#source: ../../../gas/testsuite/gas/mips/unaligned-branch-mips16-2.s
|
|
#error: \A[^\n]*: In function `foo':\n
|
|
#error: \(\.text\+0x1002\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x1008\): Cannot convert a branch to JALX for a non-word-aligned address\n
|
|
#error: \(\.text\+0x1008\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x100e\): Cannot convert a branch to JALX for a non-word-aligned address\n
|
|
#error: \(\.text\+0x100e\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x1014\): Cannot convert a branch to JALX for a non-word-aligned address\n
|
|
#error: \(\.text\+0x1014\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x101a\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x1020\): Cannot convert a branch to JALX for a non-word-aligned address\n
|
|
#error: \(\.text\+0x1020\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x1026\): Cannot convert a branch to JALX for a non-word-aligned address\n
|
|
#error: \(\.text\+0x1026\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x102c\): Cannot convert a branch to JALX for a non-word-aligned address\n
|
|
#error: \(\.text\+0x102c\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x1032\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x104a\): Branch to a non-instruction-aligned address\n
|
|
#error: \(\.text\+0x1056\): Branch to a non-instruction-aligned address\n
|
|
#error: \(\.text\+0x1062\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x1068\): Cannot convert a branch to JALX for a non-word-aligned address\n
|
|
#error: \(\.text\+0x1068\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x106e\): Cannot convert a branch to JALX for a non-word-aligned address\n
|
|
#error: \(\.text\+0x106e\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x1074\): Cannot convert a branch to JALX for a non-word-aligned address\n
|
|
#error: \(\.text\+0x1074\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x107a\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x1080\): Cannot convert a branch to JALX for a non-word-aligned address\n
|
|
#error: \(\.text\+0x1080\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x1086\): Cannot convert a branch to JALX for a non-word-aligned address\n
|
|
#error: \(\.text\+0x1086\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x108c\): Cannot convert a branch to JALX for a non-word-aligned address\n
|
|
#error: \(\.text\+0x108c\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x1092\): Unsupported branch between ISA modes\n
|
|
#error: \(\.text\+0x10aa\): Branch to a non-instruction-aligned address\n
|
|
#error: \(\.text\+0x10b6\): Branch to a non-instruction-aligned address\Z
|