* Thumb branches to an absolute address
@ 2011-05-31 14:11 Paul Brook
0 siblings, 0 replies; only message in thread
From: Paul Brook @ 2011-05-31 14:11 UTC (permalink / raw)
To: binutils
[-- Attachment #1: Type: Text/Plain, Size: 636 bytes --]
The attached patch fixes an assebler bug processing Thumb-2 branches to
absolute addresses. We don't know how far away these really are, so if no
size suffix is specified we must assume they require a long branch. Currently
we end up with a narrow branch, which is almost never suficient. We also
segfault in some circumstances.
Tested on arm-none-eabi and arm-wrs-vxworks
Applied to CVS head
Paul
2011-05-31 Paul Brook <paul@codesourcery.com>
gas/
* config/tc-arm.c (do_t_branch): Avoid relaxing branches to constant
addresses.
gas/testsuite/
* arm/t2-branch-global.d: New test.
* arm/t2-branch-global.s: New test.
[-- Attachment #2: patch --]
[-- Type: text/x-patch, Size: 1333 bytes --]
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index a9839cd..b09bf81 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -9845,7 +9845,9 @@ do_t_branch (void)
if (unified_syntax
&& (inst.size_req == 4
- || (inst.size_req != 2 && inst.operands[0].hasreloc)))
+ || (inst.size_req != 2
+ && (inst.operands[0].hasreloc
+ || inst.reloc.exp.X_op == O_constant))))
{
inst.instruction = THUMB_OP32(opcode);
if (cond == COND_ALWAYS)
diff --git a/gas/testsuite/gas/arm/t2-branch-global.d b/gas/testsuite/gas/arm/t2-branch-global.d
new file mode 100644
index 0000000..5850d6b
--- /dev/null
+++ b/gas/testsuite/gas/arm/t2-branch-global.d
@@ -0,0 +1,14 @@
+#name: Thumb-2 branch to constant address
+#This test is only valid on ELF based ports.
+#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+#objdump: -rd
+
+
+.*: +file format.*arm.*
+
+
+Disassembly of section .text:
+
+00000000 <foo>:
+ 0: f... b... b\.w .*
+ 0: R_ARM_THM_JUMP24 \*ABS\*.*
diff --git a/gas/testsuite/gas/arm/t2-branch-global.s b/gas/testsuite/gas/arm/t2-branch-global.s
new file mode 100644
index 0000000..223d924
--- /dev/null
+++ b/gas/testsuite/gas/arm/t2-branch-global.s
@@ -0,0 +1,5 @@
+.thumb
+.arch armv7
+.syntax unified
+foo:
+ b 0x10 @ Assembler must not relax this
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2011-05-31 14:04 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-31 14:11 Thumb branches to an absolute address Paul Brook
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).