和每个重定向类型相关的计算成员:
A
加数
P
要重定向的位置,r_offset加上section的基地址。
S
符号的值
B
符号定义所在section的基地址。
ARM relocation types 0-16
Type | Name | Field | Computation and meaning |
0 | R_ARM_NONE | Any | No relocation. Encodes dependencies between sections. |
1 | R_ARM_PC24 | ARM B/BL | S-P+A |
2 | R_ARM_ABS32 | 32-bit word | S+A |
3 | R_ARM_REL32 | 32-bit word | S-P+A |
4 | R_ARM_PC13 | ARM LDR r,[pc...] | S-P+A |
5 | R_ARM_ABS16 | 16-bit half-word | S+A |
6 | R_ARM_ABS12 | ARM LDR/STR | S+A |
7 | R_ARM_THM_ABS | Thumb LDR/STR | S+A |
8 | R_ARM_ABS8 | 8-bit byte | S+A |
9 | R_ARM_SBREL32 | 32-bit word | S-B+A |
10 | R_ARM_THM_PC22 | Thumb BL pair | S-P+A |
11 | R_ARM_THM_PC8 | Thumb LDR r,[pc...] | S-P+A |
12 | R_ARM_AMP_VCALL9 | AMP VCALL | Obsolete - SA-1500 only. |
13 | R_ARM_SWI24 | ARM SWI | S+A |
14 | R_ARM_THM_SWI8 | Thumb SWI | S+A |
15 | R_ARM_XPC25 | ARM BLX | S-P+A |
16 | R_ARM_THM_XPC22 | Thumb BLX pair | S-P+A |
Note
R_ARM_NONE记录Section包含要重定向的地址,该地址依赖于符号定义所在的Section,该Section应当保留。
ARM relocation types 17-31, reserved to ARM Linux
Type | Name | Field | Computation and meaning |
17-19 | Reserved to ARM LINUX | ||
20 | R_ARM_COPY | 32 bit word | Copy symbol at dynamic link time |
21 | R_ARM_GLOB_DAT | 32 bit word | Create GOT entry |
22 | R_ARM_JUMP_SLOT | 32 bit word | Create PLT entry |
23 | R_ARM_RELATIVE | 32 bit word | Adjust by program base |
24 | R_ARM_GOTOFF | 32 bit word | Offset relative to start of GOT |
25 | R_ARM_GOTPC | 32 bit word | Insert address of GOT |
26 | R_ARM_GOT32 | 32 bit word | Entry in GOT |
27 | R_ARM_PLT32 | ARM BL | Entry in PLT |
28-31 | Reserved to ARM LINUX |
参考
ARM ELF. 8 June, 2001.