Next: ARM-Neon-Alignment, Previous: ARM-Regs, Up: ARM Syntax [Contents][Index]

#### 9.4.2.4 ARM relocation generation

Specific data relocations can be generated by putting the relocation name in parentheses after the symbol name. For example:

            .word foo(TARGET1)

This will generate an ‘`R_ARM_TARGET1`’ relocation against the symbol foo. The following relocations are supported: `GOT`, `GOTOFF`, `TARGET1`, `TARGET2`, `SBREL`, `TLSGD`, `TLSLDM`, `TLSLDO`, `TLSDESC`, `TLSCALL`, `GOTTPOFF`, `GOT_PREL` and `TPOFF`.

For compatibility with older toolchains the assembler also accepts `(PLT)` after branch targets. On legacy targets this will generate the deprecated ‘`R_ARM_PLT32`’ relocation. On EABI targets it will encode either the ‘`R_ARM_CALL`’ or ‘`R_ARM_JUMP24`’ relocation, as appropriate.

Relocations for ‘`MOVW`’ and ‘`MOVT`’ instructions can be generated by prefixing the value with ‘`#:lower16:`’ and ‘`#:upper16`’ respectively. For example to load the 32-bit address of foo into r0:

            MOVW r0, #:lower16:foo
            MOVT r0, #:upper16:foo

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`’ can be generated by prefixing the value with ‘`#:lower0_7:#`’, ‘`#:lower8_15:#`’, ‘`#:upper0_7:#`’ and ‘`#:upper8_15:#`’ respectively. For example to load the 32-bit address of foo into r0:

            MOVS r0, #:upper8_15:#foo
            LSLS r0, r0, #8
            ADDS r0, #:upper0_7:#foo
            LSLS r0, r0, #8
            ADDS r0, #:lower8_15:#foo
            LSLS r0, r0, #8
            ADDS r0, #:lower0_7:#foo