diff options
-rw-r--r-- | rts/Linker.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/rts/Linker.c b/rts/Linker.c index f3b170b501..2437e8366b 100644 --- a/rts/Linker.c +++ b/rts/Linker.c @@ -5952,6 +5952,9 @@ do_Elf_Rela_relocations ( ObjectCode* oc, char* ehdrC, *(Elf32_Word *) P = value - P; break; + case R_PPC_PLTREL24: + value -= 0x8000; /* See Note [.LCTOC1 in PPC PIC code] */ + /* fallthrough */ case R_PPC_REL24: delta = value - P; @@ -5972,6 +5975,18 @@ do_Elf_Rela_relocations ( ObjectCode* oc, char* ehdrC, *(Elf_Word *) P = (*(Elf_Word *) P & 0xfc000003) | (delta & 0x3fffffc); break; + + case R_PPC_REL16_LO: + *(Elf32_Half*) P = value - P; + break; + + case R_PPC_REL16_HI: + *(Elf32_Half*) P = (value - P) >> 16; + break; + + case R_PPC_REL16_HA: + *(Elf32_Half*) P = (value + 0x8000 - P) >> 16; + break; # endif #if x86_64_HOST_ARCH |