aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorMickael Guene <mickael.guene@st.com>2016-03-10 17:05:29 +0100
committerChristophe Lyon <christophe.lyon@linaro.org>2016-03-10 17:06:35 +0100
commita9f02af88d230aabf6771f94a6c401727a865188 (patch)
treee000eaf3c094176163f45952a579466d94b66ec3 /ld
parent3ed4ff97cbbeeb2658286769ac9e8a6a35390f26 (diff)
downloadgdb-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/ChangeLog7
-rw-r--r--ld/testsuite/ld-arm/arm-elf.exp6
-rw-r--r--ld/testsuite/ld-arm/thumb1-adds-armv7-m.s43
-rw-r--r--ld/testsuite/ld-arm/thumb1-movs-armv7-m.s43
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
+