diff options
author | Mickael Guene <mickael.guene@st.com> | 2016-03-10 17:05:29 +0100 |
---|---|---|
committer | Christophe Lyon <christophe.lyon@linaro.org> | 2016-03-10 17:06:35 +0100 |
commit | a9f02af88d230aabf6771f94a6c401727a865188 (patch) | |
tree | e000eaf3c094176163f45952a579466d94b66ec3 /ld | |
parent | 3ed4ff97cbbeeb2658286769ac9e8a6a35390f26 (diff) | |
download | gdb-a9f02af88d230aabf6771f94a6c401727a865188.zip gdb-a9f02af88d230aabf6771f94a6c401727a865188.tar.gz gdb-a9f02af88d230aabf6771f94a6c401727a865188.tar.bz2 |
PR gas/19744: Thumb-1 pcrop relocations don't work on Thumb-2 targets
gas/
* config/tc-arm.c (do_arit): Protect against bad relocations usage.
(do_mov): Likewise.
(do_t_add_sub): Allow pcrop relocations for Thumb-2 targets.
(do_t_mov_cmp): Likewise.
(do_t_add_sub): Protect against bad relocations usage.
(do_t_mov_cmp): Likewise.
gas/testsuite/
* gas/arm/adds-thumb1-reloc-local-armv7-m.s: New.
* gas/arm/adds-thumb1-reloc-local-armv7-m.d: New.
* gas/arm/movs-thumb1-reloc-local-armv7-m.s: New.
* gas/arm/movs-thumb1-reloc-local-armv7-m.d: New.
ld/
* testsuite/ld-arm/arm-elf.exp: New tests.
* testsuite/ld-arm/thumb1-adds-armv7-m.s: New.
* testsuite/ld-arm/thumb1-movs-armv7-m.s: New.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 7 | ||||
-rw-r--r-- | ld/testsuite/ld-arm/arm-elf.exp | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-arm/thumb1-adds-armv7-m.s | 43 | ||||
-rw-r--r-- | ld/testsuite/ld-arm/thumb1-movs-armv7-m.s | 43 |
4 files changed, 99 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index a9869f1..4890e43 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2016-03-10 Mickael Guene <mickael.guene@st.com> + + PR gas/19744 + * testsuite/ld-arm/arm-elf.exp: New tests. + * testsuite/ld-arm/thumb1-adds-armv7-m.s: New. + * testsuite/ld-arm/thumb1-movs-armv7-m.s: New. + 2016-03-10 Nick Clifton <nickc@redhat.com> * scripttempl/elf32msp430.sc (.rodata): Remove spurious LONG(0). diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp index a2082a8..0af32c0 100644 --- a/ld/testsuite/ld-arm/arm-elf.exp +++ b/ld/testsuite/ld-arm/arm-elf.exp @@ -235,6 +235,12 @@ set armelftests_common_3 { {"ADDS thumb1 relocations" "-static -T arm.ld" "" "" {thumb1-adds.s} {{objdump -dw thumb1-adds.d}} "thumb1-adds"} + {"MOVS thumb1 relocations for armv7-m target" "-static -T arm.ld" "" "" {thumb1-movs-armv7-m.s} + {{objdump -dw thumb1-movs.d}} + "thumb1-movs"} + {"ADDS thumb1 relocations for armv7-m target" "-static -T arm.ld" "" "" {thumb1-adds-armv7-m.s} + {{objdump -dw thumb1-adds.d}} + "thumb1-adds"} } run_ld_link_tests $armelftests_common_1 diff --git a/ld/testsuite/ld-arm/thumb1-adds-armv7-m.s b/ld/testsuite/ld-arm/thumb1-adds-armv7-m.s new file mode 100644 index 0000000..9640072 --- /dev/null +++ b/ld/testsuite/ld-arm/thumb1-adds-armv7-m.s @@ -0,0 +1,43 @@ + .text + .arch armv7-m + .syntax unified + .global _start + .thumb_func + .type _start, %function +_start: + .thumb_func + .type thumb1, %function +thumb1: + adds r0, #:upper8_15:#thumb3 + adds r1, #:upper0_7:#thumb3 + adds r2, #:lower8_15:#thumb1 + adds r3, #:lower0_7:#thumb1 + adds r4, #:lower0_7:#thumb3 + adds r5, #:lower8_15:#thumb3 + adds r6, #:upper0_7:#thumb1 + adds r7, #:upper8_15:#thumb1 + .thumb_func + .type thumb2, %function +thumb2: + adds r0, #:upper8_15:#thumb3 + adds r1, #:upper0_7:#(var2 + 1) + adds r2, #:lower8_15:#(thumb3 + 255) + adds r3, #:lower0_7:#(var1 + 0xaa) + adds r7, #:upper8_15:#var1 + 4 + adds r6, #:upper0_7:#thumb3 + adds r5, #:lower8_15:#var2 + 0xff + adds r4, #:lower0_7:#var2 - (-2) +var1: + .byte 1 +var2: + .byte 2 + + .section .far, "ax", %progbits + .thumb_func + .type thumb3, %function +thumb3: + adds r0, #:upper8_15:#thumb1 + adds r1, #:upper0_7:#thumb2 + adds r2, #:lower8_15:#thumb3 + adds r3, #:lower0_7:#thumb1 + diff --git a/ld/testsuite/ld-arm/thumb1-movs-armv7-m.s b/ld/testsuite/ld-arm/thumb1-movs-armv7-m.s new file mode 100644 index 0000000..ffb8273 --- /dev/null +++ b/ld/testsuite/ld-arm/thumb1-movs-armv7-m.s @@ -0,0 +1,43 @@ + .text + .arch armv7-m + .syntax unified + .global _start + .thumb_func + .type _start, %function +_start: + .thumb_func + .type thumb1, %function +thumb1: + movs r0, #:upper8_15:#thumb3 + movs r1, #:upper0_7:#thumb3 + movs r2, #:lower8_15:#thumb1 + movs r3, #:lower0_7:#thumb1 + movs r4, #:lower0_7:#thumb3 + movs r5, #:lower8_15:#thumb3 + movs r6, #:upper0_7:#thumb1 + movs r7, #:upper8_15:#thumb1 + .thumb_func + .type thumb2, %function +thumb2: + movs r0, #:upper8_15:#(thumb3 + 0) + movs r1, #:upper0_7:#(thumb2 + 1) + movs r2, #:lower8_15:#(var1 + 255) + movs r3, #:lower0_7:#var1 + movs r7, #:upper8_15:#var1 + 4 + movs r6, #:upper0_7:#var2 + movs r5, #:lower8_15:#var2 + 0xff + movs r4, #:lower0_7:#var2 - (-1) +var1: + .byte 1 +var2: + .byte 2 + + .section .far, "ax", %progbits + .thumb_func + .type thumb3, %function +thumb3: + movs r0, #:upper8_15:#thumb1 + movs r1, #:upper0_7:#thumb2 + movs r2, #:lower8_15:#thumb3 + movs r3, #:lower0_7:#thumb1 + |