多长时间决定重定位类型MIPS GPREL16的偏移量?

时间:2012-07-05 19:52:59

标签: mips ld elf

我正在为MIPS32 arch编写运行时链接程序,并且遇到问题 GPREL16重定位类型。 例如,编译器/汇编器输出一个可重定位目标对象 以下说明:

ff838018        sd      v1,-32744(gp)

此处涉及的符号属于.sbss部分,并设置为 运行时地址0x12b119e8。 鉴于_gp是0x12b12220,而.sbss部分从0x12b11868开始。 (从目标ELF对象读取值。)

在ld重新定位后,指令变为:

ff83f7c8        sd      v1,-2104(gp)

我的问题是:ld如何计算偏移量0xf7c8? 我的猜测是0xf7c8是由_gp,.sbss地址和 原始偏移量0x8018。 我相信相关的代码是常规的 _bfd_mips_elf_gprel16_reloc of binutils / src / bfd / elf32-mips.c。

但我无法弄清楚这是如何计算的。 有人可以伸手吗?

谢谢& 问候, -Qinglai

0 个答案:

没有答案