ZHCADC4B September 2011 – August 2025
表 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_SLOT | 任一 | [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 | 无 | 无 | 无 | 无 | 否 | 无 |