SymX(gcdIntegerIntzh_fast) \
SymX(gcdIntzh_fast) \
SymX(genSymZh) \
+ SymX(genericRaise) \
SymX(getProgArgv) \
SymX(getStablePtr) \
SymX(initLinker) \
// Step 1: Figure out what the relocated value should be
if(scat->r_type == GENERIC_RELOC_VANILLA)
{
- word = scat->r_value + sect->offset + ((long) image);
+ word = *wordPtr + (unsigned long) relocateAddress(
+ oc,
+ nSections,
+ sections,
+ scat->r_value)
+ - scat->r_value;
}
else if(scat->r_type == PPC_RELOC_SECTDIFF
|| scat->r_type == PPC_RELOC_LO16_SECTDIFF
else if(reloc->r_type == PPC_RELOC_BR24)
{
word = *wordPtr;
- word = (word & 0x03FFFFFC) | (word & 0x02000000) ? 0xFC000000 : 0;
+ word = (word & 0x03FFFFFC) | ((word & 0x02000000) ? 0xFC000000 : 0);
}
if(reloc->r_pcrel)
{
- ASSERT(word == 0);
+ // In the .o file, this should be a relative jump to NULL
+ // and we'll change it to a jump to a relative jump to the symbol
+ ASSERT(-word == reloc->r_address);
word = symbolAddress;
jumpIsland = makeJumpIsland(oc,reloc->r_symbolnum,word);
word -= ((long)image) + sect->offset + reloc->r_address;