binutils-gdb/ld/testsuite/ld-arm/thumb1-movs.s
Mickael Guene 72d98d16ed [ARM] Add support for thumb1 pcrop relocations.
To support thumb1 execute-only code we need to support four new
relocations (R_ARM_THM_ALU_ABS_G0_NC, R_ARM_THM_ALU_ABS_G1_NC,
R_ARM_THM_ALU_ABS_G2_NC and  R_ARM_THM_ALU_ABS_G3_NC).
These relocations allow the static linker to finalize construction
of symbol address.
Typical sequence of code to get address of the symbol foo is then
the following :
	movs	r3, #:upper8_15:#foo
	lsls	r3, #8
	adds	r3, #:upper0_7:#foo
	lsls	r3, #8
	adds	r3, #:lower8_15:#foo
	lsls	r3, #8
	adds	r3, #:lower0_7:#foo
This will give following sequence of text and relocations after
assembly :
   4:	2300      	movs	r3, #0
			4: R_ARM_THM_ALU_ABS_G3_NC	foo
   6:	021b      	lsls	r3, r3, #8
   8:	3300      	adds	r3, #0
			8: R_ARM_THM_ALU_ABS_G2_NC	foo
   a:	021b      	lsls	r3, r3, #8
   c:	3300      	adds	r3, #0
			c: R_ARM_THM_ALU_ABS_G1_NC	foo
   e:	021b      	lsls	r3, r3, #8
  10:	3300      	adds	r3, #0
			10: R_ARM_THM_ALU_ABS_G0_NC	foo
2015-12-16 10:19:51 +01:00

44 lines
920 B
ArmAsm

.text
.arch armv6s-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