ZHCADC4A September 2011 – March 2014
表 13-6 提供了有关如何编码和执行每个重定位的详细信息。此表使用以下表示法:
F | 可重定位字段。此字段使用元组 [CS, O, FS] 指定,其中 CS 是容器大小,O 是从容器的 LSB 到字段的 LSB 的起始偏移量,FS 是字段的大小。所有值均以位数表示。 |
R | 重定位操作的算术结果 |
EV | 要存储回重定位字段的编码值 |
SE(x) | x 的符号扩展值。从概念上讲,符号扩展是针对地址空间的宽度执行的。 |
ZE(x) | x 的零扩展值。从概念上讲,零扩展是针对地址空间的宽度执行的。 |
对于启用了溢出检查的重定位类型,如果编码值(包括其符号,如果有)无法编码到可重定位字段中,则会发生溢出。即:
重定位名称 | 符号 | 字段 [CS, O, FS] (F) | 加数 (A) | 结果 (R) | 溢出检查 | 编码值 (EV) |
---|---|---|---|---|---|---|
R_C6000_NONE | 无 | [32, 0, 32] | 无 | 无 | 否 | 无 |
R_C6000_ABS32 | 任一 | [32, 0, 32] | F | S + A | 否 | R |
R_C6000_ABS16 | 任一 | [16, 0, 16] | SE(F) | S + A | 是 | R |
R_C6000_ABS8 | 任一 | [8, 0, 8] | SE(F) | S + A | 是 | R |
R_C6000_PCR_S21 | 有符号 | [32, 7, 21] | SE(F << 2) | S + A – P | 是 | R >> 2 |
R_C6000_PCR_S12 | 有符号 | [32, 16, 12] | SE(F << 2) | S + A – P | 是 | R >> 2 |
R_C6000_PCR_S10 | 有符号 | [32, 13, 10] | SE(F << 2) | S + A – P | 是 | R >> 2 |
R_C6000_PCR_S7 | 有符号 | [32, 16, 7] | SE(F << 2) | S + A – P | 是 | R >> 2 |
R_C6000_ABS_S16 | 有符号 | [32, 7, 16] | SE(F) | S + A | 是 | R |
R_C6000_ABS_L16 | 无 | [32, 7, 16] | F | S + A | 否 | R |
R_C6000_ABS_H16 | 无 | [32, 7, 16] | r_addend | S + A | 否 | R >> 16 |
R_C6000_SBR_U15_B | 无符号 | [32, 8, 15] | ZE(F) | S + A – B | 是 | R |
R_C6000_SBR_U15_H | 无符号 | [32, 8, 15] | ZE(F << 1) | S + A – B | 是 | R >> 1 |
R_C6000_SBR_U15_W | 无符号 | [32, 8, 15] | ZE(F << 2) | S + A – B | 是 | R >> 2 |
R_C6000_SBR_S16 | 有符号 | [32, 7, 16] | SE(F) | S + A – B | 是 | R |
R_C6000_SBR_L16_B | 无符号 | [32, 7, 16] | ZE(F) | S + A – B | 否 | R |
R_C6000_SBR_L16_H | 无符号 | [32, 7, 16] | ZE(F << 1) | S + A – B | 否 | R >> 1 |
R_C6000_SBR_L16_W | 无符号 | [32, 7, 16] | ZE(F << 2) | S + A – B | 否 | R >> 2 |
R_C6000_SBR_H16_B | 无符号 | [32, 7, 16] | r_addend | S + A – B | 否 | R >> 16 |
R_C6000_SBR_H16_H | 无符号 | [32, 7, 16] | r_addend | S + A – B | 否 | R >> 17 |
R_C6000_SBR_H16_W | 无符号 | [32, 7, 16] | r_addend | S + A – B | 否 | R >> 18 |
R_C6000_SBR_GOT_U15_W | 无符号 | [32, 8, 15] | ZE(F << 2) | GOT(s) + A – B | 是 | R >> 2 |
R_C6000_SBR_GOT_L16_W | 无符号 | [32, 7, 16] | ZE(F << 2) | GOT(s) + A – B | 否 | R >> 2 |
R_C6000_SBR_GOT_H16_W | 无符号 | [32, 7, 16] | r_addend | GOT(s) + A – B | 否 | R >> 18 |
R_C6000_DSBT_INDEX | 无符号 | [32, 8, 15] | 无 | DSBT 索引 | 是 | R |
R_C6000_PREL31 | 无 | [32, 0, 31] | SE(F << 1) | S + A - PC | 否 | R >> 1 |
R_C6000_COPY | 无 | [32, 0, 32] | 无 | F | 否 | F |
R_C6000_JUMP_SHOT | 任一 | [32, 0, 32] | F | S + A | 否 | R |
R_C6000_EHTYPE | 任一 | [32, 0, 32] | F | S + A – B | 否 | R |
R_C6000_PCR_H16 | 有符号 | [32, 7, 16] | r_addend | S-FP(P-A) | 否 | R >> 16 |
R_C6000_PCR_L16 | 无 | [32, 7, 16] | r_addend | S-FP(P-A) | 否 | R |
R_C6000_TBR_U15_B | 无符号 | [32,8,15] | ZE(F) | TBR(S) | 是 | R |
R_C6000_TBR_U15_H | 无符号 | [32,8,15] | ZE(F<<1) | TBR(S) | 是 | R >> 1 |
R_C6000_TBR_U15_W | 无符号 | [32,8,15] | ZE(F<<2) | TBR(S) | 是 | R >> 2 |
R_C6000_TBR_U15_D | 无符号 | [32,8,15] | ZE(F<<3) | TBR(S) | 是 | R >> 3 |
R_C6000_TPR_S16 | 有符号 | [32,7,16] | SE(F) | TBR(S) | 是 | R |
R_C6000_TPR_U15_B | 无符号 | [32,8,15] | ZE(F) | TPR(S) | 是 | R |
R_C6000_TPR_U15_H | 无符号 | [32,8,15] | ZE(F<<1) | TPR(S) | 是 | R >> 1 |
R_C6000_TPR_U15_W | 无符号 | [32,8,15] | ZE(F<<2) | TPR(S) | 是 | R >> 2 |
R_C6000_TPR_U15_D | 无符号 | [32,8,15] | ZE(F<<3) | TPR(S) | 是 | R >> 3 |
R_C6000_TPR_U32_B | 无符号 | [32,0,326] | ZE(F) | TPR(S) | 否 | R |
R_C6000_TPR_U32_H | 无符号 | [32,0,326] | ZE(F<<1) | TPR(S) | 否 | R >> 1 |
R_C6000_TPR_U32_W | 无符号 | [32,0,326] | ZE(F<<2) | TPR(S) | 否 | R >> 2 |
R_C6000_TPR_U32_D | 无符号 | [32,0,326] | ZE(F<<3) | TPR(S) | 否 | R >> 3 |
R_C6000_SBR_GOT_U15_W_TLSMOD | 无符号 | [32,8,15] | ZE(F<<2) | GOT(TLSMOD(S)) + A - B | 是 | R >> 2 |
R_C6000_SBR_GOT_U15_W_TBR | 无符号 | [32,8,15] | ZE(F<<2) | GOT(TBR(S)) + A - B | 是 | R >> 2 |
R_C6000_SBR_GOT_U15_W_TPR_B | 无符号 | [32,8,15] | ZE(F<<2) | GOT(TBR(S)) + A - B | 是 | R >> 2 |
R_C6000_SBR_GOT_U15_W_TPR_H | 无符号 | [32,8,15] | ZE(F<<2) | GOT(TBR(S)) + A - B | 是 | R >> 2 |
R_C6000_SBR_GOT_U15_W_TPR_W | 无符号 | [32,8,15] | ZE(F<<2) | GOT(TBR(S)) + A - B | 是 | R >> 2 |
R_C6000_SBR_GOT_U15_W_TPR_D | 无符号 | [32,8,15] | ZE(F<<2) | GOT(TBR(S)) + A - B | 是 | R >> 2 |
R_C6000_SBR_GOT_L16_W_TLSMOD | 无符号 | [32,7,16] | ZE(F<<2) | GOT(TLSMOD(S)) + A - B | 否 | R >> 2 |
R_C6000_SBR_GOT_L16_W_TBR | 无符号 | [32,7,16] | ZE(F<<2) | GOT(TBR(S)) + A - B | 否 | R >> 2 |
R_C6000_SBR_GOT_L16_W_TPR_B | 无符号 | [32,7,16] | ZE(F<<2) | GOT(TBR(S)) + A - B | 否 | R >> 2 |
R_C6000_SBR_GOT_L16_W_TPR_H | 无符号 | [32,7,16] | ZE(F<<2) | GOT(TBR(S)) + A - B | 否 | R >> 2 |
R_C6000_SBR_GOT_L16_W_TPR_W | 无符号 | [32,7,16] | ZE(F<<2) | GOT(TBR(S)) + A - B | 否 | R >> 2 |
R_C6000_SBR_GOT_L16_W_TPR_D | 无符号 | [32,7,16] | ZE(F<<2) | GOT(TBR(S)) + A - B | 否 | R >> 2 |
R_C6000_SBR_GOT_H16_W_TLSMOD | 无符号 | [32,7,16] | ZE(F<<2) | GOT(TLSMOD(S)) + A - B | 否 | R >> 18 |
R_C6000_SBR_GOT_H16_W_TBR | 无符号 | [32,7,16] | ZE(F<<2) | GOT(TBR(S)) + A - B | 否 | R >> 18 |
R_C6000_SBR_GOT_H16_W_TPR_B | 无符号 | [32,7,16] | ZE(F<<2) | GOT(TBR(S)) + A - B | 否 | R >> 18 |
R_C6000_SBR_GOT_H16_W_TPR_H | 无符号 | [32,7,16] | ZE(F<<2) | GOT(TBR(S)) + A - B | 否 | R >> 18 |
R_C6000_SBR_GOT_H16_W_TPR_W | 无符号 | [32,7,16] | ZE(F<<2) | GOT(TBR(S)) + A - B | 否 | R >> 18 |
R_C6000_SBR_GOT_H16_W_TPR_D | 无符号 | [32,7,16] | ZE(F<<2) | GOT(TBR(S)) + A - B | 否 | R >> 18 |
R_C6000_TLSMOD | 无符号 | [32,0,32] | F | TLSMOD(S) | 否 | R |
R_C6000_TBR_U32 | 无符号 | [32,0,32] | F | TBR(S) | 否 | R |
R_C6000_FPHEAD | 无 | 无 | 无 | 无 | 否 | 无 |
R_C6000_NOCMP | 无 | 无 | 无 | 无 | 否 | 无 |