[ARM] Add support for thumb1 pcrop relocations.
authorMickael Guene <mickael.guene@st.com>
Wed, 16 Dec 2015 09:09:05 +0000 (10:09 +0100)
committerChristophe Lyon <christophe.lyon@linaro.org>
Wed, 16 Dec 2015 09:19:51 +0000 (10:19 +0100)
commit72d98d16ed09584660d0cbb759d90f8dfeef2343
tree6a1f1e78ca24f2306e718025bf4d90d891956880
parent9c35a5290213e9a28e6cc691e1cc7ba5055653f7
[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
16 files changed:
bfd/bfd-in2.h
bfd/elf32-arm.c
bfd/libbfd.h
bfd/reloc.c
gas/config/tc-arm.c
gas/doc/c-arm.texi
gas/testsuite/gas/arm/adds-thumb1-reloc-local.d [new file with mode: 0644]
gas/testsuite/gas/arm/adds-thumb1-reloc-local.s [new file with mode: 0644]
gas/testsuite/gas/arm/movs-thumb1-reloc-local.d [new file with mode: 0644]
gas/testsuite/gas/arm/movs-thumb1-reloc-local.s [new file with mode: 0644]
include/elf/arm.h
ld/testsuite/ld-arm/arm-elf.exp
ld/testsuite/ld-arm/thumb1-adds.d [new file with mode: 0644]
ld/testsuite/ld-arm/thumb1-adds.s [new file with mode: 0644]
ld/testsuite/ld-arm/thumb1-movs.d [new file with mode: 0644]
ld/testsuite/ld-arm/thumb1-movs.s [new file with mode: 0644]