diff --git a/elf/arch-ppc64v1.cc b/elf/arch-ppc64v1.cc index 5c0e224ff4..6f3550dff4 100644 --- a/elf/arch-ppc64v1.cc +++ b/elf/arch-ppc64v1.cc @@ -262,6 +262,9 @@ void InputSection::apply_reloc_alloc(Context &ctx, u8 *base) { case R_PPC64_DTPREL16_LO: *(ub16 *)loc = lo(S + A - ctx.dtp_addr); break; + case R_PPC64_DTPREL16_LO_DS: + *(ub16 *)loc |= ((S + A - ctx.dtp_addr) & 0x3fff) << 2; + break; case R_PPC64_TPREL16_HA: *(ub16 *)loc = ha(S + A - ctx.tp_addr); break; @@ -401,6 +404,7 @@ void InputSection::scan_relocations(Context &ctx) { case R_PPC64_TLSLD: case R_PPC64_DTPREL16_HA: case R_PPC64_DTPREL16_LO: + case R_PPC64_DTPREL16_LO_DS: break; default: Error(ctx) << *this << ": unknown relocation: " << rel;