diff options
Diffstat (limited to 'ld/testsuite/ld-mips-elf')
-rw-r--r-- | ld/testsuite/ld-mips-elf/jaloverflow.d | 11 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/jaloverflow.s | 12 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/mips-elf.exp | 2 |
3 files changed, 25 insertions, 0 deletions
diff --git a/ld/testsuite/ld-mips-elf/jaloverflow.d b/ld/testsuite/ld-mips-elf/jaloverflow.d new file mode 100644 index 0000000..b77afe6 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/jaloverflow.d @@ -0,0 +1,11 @@ +#name: JAL overflow +#source: jaloverflow.s +#as: +#ld: -Ttext=0xffffff0 -e start +#error: .*relocation truncated to fit.* + +# This tests whether we correctly detect overflow in the jal +# instruction. jal is a bit weird since the upper four bits of the +# destination address are taken from the source address. So overflow +# occurs if the source and destination address do not have the same +# most significant four bits. diff --git a/ld/testsuite/ld-mips-elf/jaloverflow.s b/ld/testsuite/ld-mips-elf/jaloverflow.s new file mode 100644 index 0000000..4dd98b8 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/jaloverflow.s @@ -0,0 +1,12 @@ +# This file gets linked to start at 0xffffff0, so the call is an overflow. + .text + .global start + .set noreorder +start: + nop + nop + nop + nop + jal start + nop + .type start, @function diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp index c3417bc..0cc8489 100644 --- a/ld/testsuite/ld-mips-elf/mips-elf.exp +++ b/ld/testsuite/ld-mips-elf/mips-elf.exp @@ -79,3 +79,5 @@ if {$has_newabi && $linux_gnu} { run_dump_test "eh-frame1-n32" run_dump_test "eh-frame1-n64" } + +run_dump_test "jaloverflow" |