Index: usr.sbin/kldxref/ef_powerpc.c =================================================================== --- usr.sbin/kldxref/ef_powerpc.c +++ usr.sbin/kldxref/ef_powerpc.c @@ -55,6 +55,7 @@ Elf_Off dataoff, size_t len, void *dest) { Elf_Addr *where, addend; + Elf32_Addr *where32; Elf_Size rtype, symidx; const Elf_Rela *rela; @@ -63,6 +64,7 @@ rela = (const Elf_Rela *)reldata; where = (Elf_Addr *) ((Elf_Off)dest - dataoff + rela->r_offset); + where32 = (Elf32_Addr *) ((Elf_Off)dest - dataoff + rela->r_offset); addend = rela->r_addend; rtype = ELF_R_TYPE(rela->r_info); symidx = ELF_R_SYM(rela->r_info); @@ -74,9 +76,14 @@ case R_PPC_RELATIVE: /* word32|doubleword64 B + A */ *where = relbase + addend; break; - case R_PPC64_ADDR64: /* S + A */ + case R_PPC_ADDR32: /* word32 S + A */ + *where32 = EF_SYMADDR(ef, symidx) + addend; + break; +#ifdef __powerpc64__ + case R_PPC64_ADDR64: /* doubleword64 S + A */ *where = EF_SYMADDR(ef, symidx) + addend; break; +#endif default: warnx("unhandled relocation type %" PRI_ELF_SIZE, rtype); }