ZHCADC4A September 2011 – March 2014
C6000 的 ELF 重定位经过了专门定义,以便将与执行重定位所需的所有信息包含在重定位条目、对象字段和关联符号中。除了解压对象字段之外,链接器不需要解码指令来执行重定位。这导致重定位类型略多于较旧的 C6000 COFF ABI。COFF 与 ELF 之间的重定位类型不兼容。
重定位指定为对可重定位字段进行操作。大致来说,可重定位字段是受重定位影响的程序映像位。此字段根据可寻址容器定义,其地址由重定位条目的 r_offset 字段提供。此字段在容器中的大小和位置以及重定位值的计算由重定位类型指定。重定位操作包括提取可重定位的字段、执行操作和将结果值重新插入此字段。
ELF 重定位可以是 Elf32_Rela 或 Elf32_Rel 类型。Rela 条目包含用于重定位计算的显式加数。Rel 类型的条目使用可重定位字段本身作为加数。某些重定位仅标识为 Rela。大多数情况下,这些重定位对应于 32 位地址的高 16 位,其中结果值取决于来自此字段中不可用低位的进位传播。如果指定了 Rela,则实现必须遵守此要求。实现可选择将 Rel 或 Rela 类型重定位用于其他重定位。