Qinglai Xiao
unread,Jul 6, 2012, 1:41:06 AM7/6/12You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
Hi,
I'm writing a runtime linker for MIPS32 arch, and have problems with
GPREL16 relocation type.
For instance, the compiler/assembler outputs a relocatable object with
an instruction as below :
ff838018 sd v1,-32744(gp)
The symbol involved here belongs to .sbss section, and is set to
runtime address 0x12b119e8.
Given that _gp is 0x12b12220, and .sbss section starts at 0x12b11868.
( The values are read from target ELF object.)
After relocated by ld, the instruction becomes:
ff83f7c8 sd v1,-2104(gp)
My question is: How ld calculates the offset 0xf7c8?
My guess is that 0xf7c8 is calculated by _gp, .sbss address and
original offset 0x8018.
And I believe the related code is in routine
_bfd_mips_elf_gprel16_reloc of binutils/src/bfd/elf32-mips.c.
But I'm not able to figure out how this is calculated.
Could someone give a hand?
thanks &
regards,
-Qinglai