diff options
author | Andrew Bennett <andrew.bennett@imgtec.com> | 2014-11-20 15:40:16 +0000 |
---|---|---|
committer | Andrew Bennett <andrew.bennett@imgtec.com> | 2014-12-02 13:27:36 +0000 |
commit | 538baf8b7e6d17a490f126f8565638469da70204 (patch) | |
tree | f745305eacbe1920bebcd9803dbc50016da037fc /ld | |
parent | 51aecdc5320d1707e1f034f05a378e60aae71d18 (diff) | |
download | gdb-538baf8b7e6d17a490f126f8565638469da70204.zip gdb-538baf8b7e6d17a490f126f8565638469da70204.tar.gz gdb-538baf8b7e6d17a490f126f8565638469da70204.tar.bz2 |
[MIPS] When calculating a relocation using an undefined weak symbol don't check for overflow.
In MIPS the relocation calculation only ignores the overflow checks for undefined
weak symbols on relocations associated with j/jal. This patch extends this to
the relocations used by the: b* instructions; pc/gp relative symbol offsets; and the
lwpc/ldpc MIPS r6 instructions.
bfd/
* elfxx-mips.c (mips_elf_calculate_relocation): Only check for overflow
on non-weak undefined symbols.
ld/testsuite/
* ld-mips-elf/mips-elf.exp: Add in undefined weak overflow tests for
o32, n32 and n64.
* ld-mips-elf/undefweak-overflow.s: New test.
* ld-mips-elf/undefweak-overflow.d: New test.
* ld-mips-elf/undefweak-overflow-n32.d: New test.
* ld-mips-elf/undefweak-overflow-n64.d: New test.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/mips-elf.exp | 7 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/undefweak-overflow-n32.d | 23 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/undefweak-overflow-n64.d | 23 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/undefweak-overflow.d | 23 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/undefweak-overflow.s | 25 |
6 files changed, 110 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index ef59947..de784f7 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2014-12-02 Andrew Bennett <andrew.bennett@imgtec.com> + + * ld-mips-elf/mips-elf.exp: Add undefined weak overflow + tests for o32, n32 and n64. + * ld-mips-elf/undefweak-overflow.s: New test. + * ld-mips-elf/undefweak-overflow.d: New test. + * ld-mips-elf/undefweak-overflow-n32.d: New test. + * ld-mips-elf/undefweak-overflow-n64.d: New test. + 2014-12-01 H.J. Lu <hongjiu.lu@intel.com> PR ld/16452 diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp index 91036de..21c809f 100644 --- a/ld/testsuite/ld-mips-elf/mips-elf.exp +++ b/ld/testsuite/ld-mips-elf/mips-elf.exp @@ -434,6 +434,13 @@ if {$linux_gnu} { run_dump_test "jaloverflow" run_dump_test "jaloverflow-2" +run_dump_test "undefweak-overflow" + +if {$has_newabi} { + run_dump_test "undefweak-overflow-n32" + run_dump_test "undefweak-overflow-n64" +} + if {$has_newabi} { run_dump_test "jalbal" [list [list ld $abi_ldflags(n32)]] } diff --git a/ld/testsuite/ld-mips-elf/undefweak-overflow-n32.d b/ld/testsuite/ld-mips-elf/undefweak-overflow-n32.d new file mode 100644 index 0000000..4d965b8 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/undefweak-overflow-n32.d @@ -0,0 +1,23 @@ +#name: undefined weak symbol overflow (n32) +#source: undefweak-overflow.s +#as: -n32 -EB +#ld: -melf32btsmipn32 -Ttext=0x20000000 -e start +#objdump: -dr +#... +0*20000000: d85fffff.* +0*20000004: 00000000.* +0*20000008: f85ffffd.* +0*2000000c: ec4ffffd.* +0*20000010: ec5bfffe.* +0*20000014: cbfffffa.* +0*20000018: 3c04e000.* +0*2000001c: 1000fff8.* +0*20000020: 2484ffe0.* +0*20000024: 0411fff6.* +0*20000028: 00000000.* +0*2000002c: 3c047fd0.* +0*20000030: 8e670c00.* +0*20000034: cfe50c00.* +0*20000038: 9400ffe2.* +0*2000003c: 0c000c00.* +#pass diff --git a/ld/testsuite/ld-mips-elf/undefweak-overflow-n64.d b/ld/testsuite/ld-mips-elf/undefweak-overflow-n64.d new file mode 100644 index 0000000..e0d9fda --- /dev/null +++ b/ld/testsuite/ld-mips-elf/undefweak-overflow-n64.d @@ -0,0 +1,23 @@ +#name: undefined weak symbol overflow (n64) +#source: undefweak-overflow.s +#as: -64 -EB +#ld: -melf64btsmip -Ttext=0x20000000 -e start +#objdump: -dr +#... + 0*20000000: d85fffff.* + 0*20000004: 00000000.* + 0*20000008: f85ffffd.* + 0*2000000c: ec4ffffd.* + 0*20000010: ec5bfffe.* + 0*20000014: cbfffffa.* + 0*20000018: 3c04e000.* + 0*2000001c: 1000fff8.* + 0*20000020: 2484ffe0.* + 0*20000024: 0411fff6.* + 0*20000028: 00000000.* + 0*2000002c: 3c047fd0.* + 0*20000030: 8e670c00.* + 0*20000034: cfe50c00.* + 0*20000038: 9400ffe2.* + 0*2000003c: 0c000c00.* +#pass diff --git a/ld/testsuite/ld-mips-elf/undefweak-overflow.d b/ld/testsuite/ld-mips-elf/undefweak-overflow.d new file mode 100644 index 0000000..18b3a90 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/undefweak-overflow.d @@ -0,0 +1,23 @@ +#name: undefined weak symbol overflow +#source: undefweak-overflow.s +#as: -32 -EB +#ld: -melf32btsmip -Ttext=0x20000000 -e start +#objdump: -dr +#... +0*20000000: d85fffff.* +0*20000004: 00000000.* +0*20000008: f85ffffd.* +0*2000000c: ec4ffffd.* +0*20000010: ec5bfffe.* +0*20000014: cbfffffa.* +0*20000018: 3c04e000.* +0*2000001c: 1000fff8.* +0*20000020: 2484ffe0.* +0*20000024: 0411fff6.* +0*20000028: 00000000.* +0*2000002c: 3c047fd0.* +0*20000030: 8e670c00.* +0*20000034: cfe50c00.* +0*20000038: 9400ffe2.* +0*2000003c: 0c000c00.* +#pass diff --git a/ld/testsuite/ld-mips-elf/undefweak-overflow.s b/ld/testsuite/ld-mips-elf/undefweak-overflow.s new file mode 100644 index 0000000..525f11b --- /dev/null +++ b/ld/testsuite/ld-mips-elf/undefweak-overflow.s @@ -0,0 +1,25 @@ +# relocs against undefined weak symbols should not be treated as +# overflowing + + + .globl start + .weak foo +start: + .set mips64r6 + beqzc $2, foo + bnezc $2, foo + lwpc $2, foo + ldpc $2, foo + bc foo + lui $4, %pcrel_hi(foo) + addiu $4, $4, %pcrel_lo(foo) + + .set mips32r2 + b foo + bal foo + lui $4, %gp_rel(foo) + + .set micromips + beqz16 $4, foo + b16 foo + b foo |