This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] Thumb2 pc-relative addressing


The attached patch fixes a segfault when assembling the thumb2 instruction
ldr rN, [pc, #im]

encode_thumb32_addr_mode was incorrectly setting inst.reloc.pc_rel. This will 
already have been set by parse_address in the ldr rN, label case.

Tested with cross to arm-none-eabi.
Ok?

Paul

2005-07-21  Paul Brook  <paul@codesourcery.com>

gas/
	* config/tc-arm.c (encode_thumb32_addr_mode): Don't set
	inst.reloc.pc_rel.
gas/testsuite/
	* gas/arm/thumb32.s: Add tests for [pc, #imm] addressing modes.
	* gas/arm/thumb32.d: Ditto.
Index: gas/config/tc-arm.c
===================================================================
RCS file: /var/cvsroot/src-cvs/src/gas/config/tc-arm.c,v
retrieving revision 1.212
diff -u -p -r1.212 tc-arm.c
--- gas/config/tc-arm.c	4 Jul 2005 14:27:07 -0000	1.212
+++ gas/config/tc-arm.c	21 Jul 2005 02:30:01 -0000
@@ -5667,7 +5667,6 @@ encode_thumb32_addr_mode (int i, bfd_boo
 	    inst.instruction |= 0x00000100;
 	}
       inst.reloc.type = BFD_RELOC_ARM_T32_OFFSET_IMM;
-      inst.reloc.pc_rel = is_pc;
     }
   else if (inst.operands[i].postind)
     {
Index: gas/testsuite/gas/arm/thumb32.d
===================================================================
RCS file: /var/cvsroot/src-cvs/src/gas/testsuite/gas/arm/thumb32.d,v
retrieving revision 1.6
diff -u -p -r1.6 thumb32.d
--- gas/testsuite/gas/arm/thumb32.d	4 Jul 2005 14:55:52 -0000	1.6
+++ gas/testsuite/gas/arm/thumb32.d	21 Jul 2005 02:27:17 -0000
@@ -991,3 +991,23 @@ Disassembly of section .text:
 0+ca4 <[^>]+> fa52 f183 	uxtab	r1, r2, r3
 0+ca8 <[^>]+> fa32 f183 	uxtab16	r1, r2, r3
 0+cac <[^>]+> fa12 f183 	uxtah	r1, r2, r3
+0+cb0 <[^>]+> f89f 12aa 	ldrb\.w	r1, \[pc, #682\]	; 0+f5e <[^>]+>
+0+cb4 <[^>]+> f89f 1155 	ldrb\.w	r1, \[pc, #341\]	; 0+e0d <[^>]+>
+0+cb8 <[^>]+> f81f 12aa 	ldrb\.w	r1, \[pc, #-682\]	; 0+a12 <[^>]+>
+0+cbc <[^>]+> f81f 1155 	ldrb\.w	r1, \[pc, #-341\]	; 0+b6b <[^>]+>
+0+cc0 <[^>]+> f99f 12aa 	ldrsb\.w	r1, \[pc, #682\]	; 0+f6e <[^>]+>
+0+cc4 <[^>]+> f99f 1155 	ldrsb\.w	r1, \[pc, #341\]	; 0+e1d <[^>]+>
+0+cc8 <[^>]+> f91f 12aa 	ldrsb\.w	r1, \[pc, #-682\]	; 0+a22 <[^>]+>
+0+ccc <[^>]+> f91f 1155 	ldrsb\.w	r1, \[pc, #-341\]	; 0+b7b <[^>]+>
+0+cd0 <[^>]+> f8bf 12aa 	ldrh\.w	r1, \[pc, #682\]	; 0+f7e <[^>]+>
+0+cd4 <[^>]+> f8bf 1155 	ldrh\.w	r1, \[pc, #341\]	; 0+e2d <[^>]+>
+0+cd8 <[^>]+> f83f 12aa 	ldrh\.w	r1, \[pc, #-682\]	; 0+a32 <[^>]+>
+0+cdc <[^>]+> f83f 1155 	ldrh\.w	r1, \[pc, #-341\]	; 0+b8b <[^>]+>
+0+ce0 <[^>]+> f9bf 12aa 	ldrsh\.w	r1, \[pc, #682\]	; 0+f8e <[^>]+>
+0+ce4 <[^>]+> f9bf 1155 	ldrsh\.w	r1, \[pc, #341\]	; 0+e3d <[^>]+>
+0+ce8 <[^>]+> f93f 12aa 	ldrsh\.w	r1, \[pc, #-682\]	; 0+a42 <[^>]+>
+0+cec <[^>]+> f93f 1155 	ldrsh\.w	r1, \[pc, #-341\]	; 0+b9b <[^>]+>
+0+cf0 <[^>]+> f8df 12aa 	ldr\.w	r1, \[pc, #682\]	; 0+f9e <[^>]+>
+0+cf4 <[^>]+> f8df 1155 	ldr\.w	r1, \[pc, #341\]	; 0+e4d <[^>]+>
+0+cf8 <[^>]+> f85f 12aa 	ldr\.w	r1, \[pc, #-682\]	; 0+a52 <[^>]+>
+0+cfc <[^>]+> f85f 1155 	ldr\.w	r1, \[pc, #-341\]	; 0+bab <[^>]+>
Index: gas/testsuite/gas/arm/thumb32.s
===================================================================
RCS file: /var/cvsroot/src-cvs/src/gas/testsuite/gas/arm/thumb32.s,v
retrieving revision 1.2
diff -u -p -r1.2 thumb32.s
--- gas/testsuite/gas/arm/thumb32.s	18 May 2005 05:40:10 -0000	1.2
+++ gas/testsuite/gas/arm/thumb32.s	21 Jul 2005 02:29:31 -0000
@@ -733,3 +733,15 @@ xta:	
 	uxtab	r1, r2, r3
 	uxtab16	r1, r2, r3
 	uxtah	r1, r2, r3
+
+	.macro	ldpcimm op
+	\op	r1, [pc, #0x2aa]
+	\op	r1, [pc, #0x155]
+	\op	r1, [pc, #-0x2aa]
+	\op	r1, [pc, #-0x155]
+	.endm
+	ldpcimm	ldrb
+	ldpcimm	ldrsb
+	ldpcimm	ldrh
+	ldpcimm	ldrsh
+	ldpcimm	ldr

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]