Skip to content

Commit

Permalink
Add support for PPC32/64 relocations
Browse files Browse the repository at this point in the history
  • Loading branch information
yd0b0N authored and romainthomas committed May 2, 2018
1 parent 2031956 commit 08b5141
Show file tree
Hide file tree
Showing 11 changed files with 649 additions and 0 deletions.
145 changes: 145 additions & 0 deletions api/python/ELF/pyELFStructures.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -838,6 +838,151 @@ void init_ELF_Structures_enum(py::module& m) {
.value(PY_ENUM(RELOC_AARCH64::R_AARCH64_TLSDESC))
.value(PY_ENUM(RELOC_AARCH64::R_AARCH64_IRELATIVE));

LIEF::enum_<RELOC_POWERPC32>(m, "RELOCATION_PPC")
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_NONE))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_ADDR32))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_ADDR24))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_ADDR16))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_ADDR16_LO))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_ADDR16_HI))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_ADDR16_HA))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_ADDR14))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_ADDR14_BRTAKEN))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_ADDR14_BRNTAKEN))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_REL24))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_REL14))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_REL14_BRTAKEN))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_REL14_BRNTAKEN))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT16))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT16_LO))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT16_HI))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT16_HA))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_PLTREL24))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_JMP_SLOT))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_RELATIVE))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_LOCAL24PC))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_REL32))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_TLS))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_DTPMOD32))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_TPREL16))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_TPREL16_LO))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_TPREL16_HI))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_TPREL16_HA))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_TPREL32))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_DTPREL16))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_DTPREL16_LO))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_DTPREL16_HI))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_DTPREL16_HA))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_DTPREL32))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT_TLSGD16))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT_TLSGD16_LO))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT_TLSGD16_HI))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT_TLSGD16_HA))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT_TLSLD16))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT_TLSLD16_LO))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT_TLSLD16_HI))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT_TLSLD16_HA))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT_TPREL16))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT_TPREL16_LO))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT_TPREL16_HI))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT_TPREL16_HA))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT_DTPREL16))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT_DTPREL16_LO))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT_DTPREL16_HI))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_GOT_DTPREL16_HA))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_TLSGD))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_TLSLD))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_REL16))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_REL16_LO))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_REL16_HI))
.value(PY_ENUM(RELOC_POWERPC32::R_PPC_REL16_HA));

LIEF::enum_<RELOC_POWERPC64>(m, "RELOCATION_PPC64")
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_NONE))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_ADDR32))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_ADDR24))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_ADDR16))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_ADDR16_LO))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_ADDR16_HI))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_ADDR16_HA))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_ADDR14))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_ADDR14_BRTAKEN))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_ADDR14_BRNTAKEN))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_REL24))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_REL14))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_REL14_BRTAKEN))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_REL14_BRNTAKEN))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT16))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT16_LO))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT16_HI))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT16_HA))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_JMP_SLOT))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_RELATIVE))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_REL32))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_ADDR64))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_ADDR16_HIGHER))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_ADDR16_HIGHERA))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_ADDR16_HIGHEST))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_ADDR16_HIGHESTA))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_REL64))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TOC16))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TOC16_LO))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TOC16_HI))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TOC16_HA))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TOC))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_ADDR16_DS))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_ADDR16_LO_DS))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT16_DS))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT16_LO_DS))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TOC16_DS))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TOC16_LO_DS))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TLS))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_DTPMOD64))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TPREL16))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TPREL16_LO))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TPREL16_HI))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TPREL16_HA))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TPREL64))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_DTPREL16))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_DTPREL16_LO))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_DTPREL16_HI))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_DTPREL16_HA))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_DTPREL64))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT_TLSGD16))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT_TLSGD16_LO))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT_TLSGD16_HI))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT_TLSGD16_HA))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT_TLSLD16))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT_TLSLD16_LO))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT_TLSLD16_HI))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT_TLSLD16_HA))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT_TPREL16_DS))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT_TPREL16_LO_DS))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT_TPREL16_HI))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT_TPREL16_HA))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT_DTPREL16_DS))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT_DTPREL16_LO_DS))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT_DTPREL16_HI))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_GOT_DTPREL16_HA))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TPREL16_DS))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TPREL16_LO_DS))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TPREL16_HIGHER))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TPREL16_HIGHERA))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TPREL16_HIGHEST))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TPREL16_HIGHESTA))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_DTPREL16_DS))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_DTPREL16_LO_DS))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_DTPREL16_HIGHER))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_DTPREL16_HIGHERA))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_DTPREL16_HIGHEST))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_DTPREL16_HIGHESTA))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TLSGD))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_TLSLD))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_REL16))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_REL16_LO))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_REL16_HI))
.value(PY_ENUM(RELOC_POWERPC64::R_PPC64_REL16_HA));


LIEF::enum_<DYNSYM_COUNT_METHODS>(m, "DYNSYM_COUNT_METHODS")
.value(PY_ENUM(DYNSYM_COUNT_METHODS::COUNT_AUTO))
Expand Down
2 changes: 2 additions & 0 deletions include/LIEF/ELF/EnumToString.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ LIEF_API const char* to_string(RELOC_x86_64 e);
LIEF_API const char* to_string(RELOC_ARM e);
LIEF_API const char* to_string(RELOC_i386 e);
LIEF_API const char* to_string(RELOC_AARCH64 e);
LIEF_API const char* to_string(RELOC_POWERPC32 e);
LIEF_API const char* to_string(RELOC_POWERPC64 e);
LIEF_API const char* to_string(ELF_CLASS e);
LIEF_API const char* to_string(ELF_DATA e);
LIEF_API const char* to_string(OS_ABI e);
Expand Down
147 changes: 147 additions & 0 deletions include/LIEF/ELF/RelocationSizes.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,153 @@ static const std::map<RELOC_AARCH64, uint32_t> relocation_AARCH64_sizes {
{ RELOC_AARCH64::R_AARCH64_IRELATIVE, 64 },
};

static const std::map<RELOC_POWERPC32, uint32_t> relocation_PPC_sizes {
{ RELOC_POWERPC32::R_PPC_NONE, 0 },
{ RELOC_POWERPC32::R_PPC_ADDR32, 32 },
{ RELOC_POWERPC32::R_PPC_ADDR24, 32 },
{ RELOC_POWERPC32::R_PPC_ADDR16, 16 },
{ RELOC_POWERPC32::R_PPC_ADDR16_LO, 16 },
{ RELOC_POWERPC32::R_PPC_ADDR16_HI, 16 },
{ RELOC_POWERPC32::R_PPC_ADDR16_HA, 16 },
{ RELOC_POWERPC32::R_PPC_ADDR14, 32 },
{ RELOC_POWERPC32::R_PPC_ADDR14_BRTAKEN, 32 },
{ RELOC_POWERPC32::R_PPC_ADDR14_BRNTAKEN, 32 },
{ RELOC_POWERPC32::R_PPC_REL24, 32 },
{ RELOC_POWERPC32::R_PPC_REL14, 32 },
{ RELOC_POWERPC32::R_PPC_REL14_BRTAKEN, 32 },
{ RELOC_POWERPC32::R_PPC_REL14_BRNTAKEN, 32 },
{ RELOC_POWERPC32::R_PPC_GOT16, 16 },
{ RELOC_POWERPC32::R_PPC_GOT16_LO, 16 },
{ RELOC_POWERPC32::R_PPC_GOT16_HI, 16 },
{ RELOC_POWERPC32::R_PPC_GOT16_HA, 16 },
{ RELOC_POWERPC32::R_PPC_PLTREL24, 32 },
{ RELOC_POWERPC32::R_PPC_JMP_SLOT, 0 },
{ RELOC_POWERPC32::R_PPC_RELATIVE, 32 },
{ RELOC_POWERPC32::R_PPC_LOCAL24PC, 32 },
{ RELOC_POWERPC32::R_PPC_REL32, 32 },
{ RELOC_POWERPC32::R_PPC_TLS, 32 },
{ RELOC_POWERPC32::R_PPC_DTPMOD32, 32 },
{ RELOC_POWERPC32::R_PPC_TPREL16, 16 },
{ RELOC_POWERPC32::R_PPC_TPREL16_LO, 16 },
{ RELOC_POWERPC32::R_PPC_TPREL16_HI, 16 },
{ RELOC_POWERPC32::R_PPC_TPREL16_HA, 16 },
{ RELOC_POWERPC32::R_PPC_TPREL32, 32 },
{ RELOC_POWERPC32::R_PPC_DTPREL16, 16 },
{ RELOC_POWERPC32::R_PPC_DTPREL16_LO, 16 },
{ RELOC_POWERPC32::R_PPC_DTPREL16_HI, 16 },
{ RELOC_POWERPC32::R_PPC_DTPREL16_HA, 16 },
{ RELOC_POWERPC32::R_PPC_DTPREL32, 32 },
{ RELOC_POWERPC32::R_PPC_GOT_TLSGD16, 16 },
{ RELOC_POWERPC32::R_PPC_GOT_TLSGD16_LO, 16 },
{ RELOC_POWERPC32::R_PPC_GOT_TLSGD16_HI, 16 },
{ RELOC_POWERPC32::R_PPC_GOT_TLSGD16_HA, 16 },
{ RELOC_POWERPC32::R_PPC_GOT_TLSLD16, 16 },
{ RELOC_POWERPC32::R_PPC_GOT_TLSLD16_LO, 16 },
{ RELOC_POWERPC32::R_PPC_GOT_TLSLD16_HI, 16 },
{ RELOC_POWERPC32::R_PPC_GOT_TLSLD16_HA, 16 },
{ RELOC_POWERPC32::R_PPC_GOT_TPREL16, 16 },
{ RELOC_POWERPC32::R_PPC_GOT_TPREL16_LO, 16 },
{ RELOC_POWERPC32::R_PPC_GOT_TPREL16_HI, 16 },
{ RELOC_POWERPC32::R_PPC_GOT_TPREL16_HA, 16 },
{ RELOC_POWERPC32::R_PPC_GOT_DTPREL16, 16 },
{ RELOC_POWERPC32::R_PPC_GOT_DTPREL16_LO, 16 },
{ RELOC_POWERPC32::R_PPC_GOT_DTPREL16_HI, 16 },
{ RELOC_POWERPC32::R_PPC_GOT_DTPREL16_HA, 16 },
{ RELOC_POWERPC32::R_PPC_TLSGD, 32 },
{ RELOC_POWERPC32::R_PPC_TLSLD, 32 },
{ RELOC_POWERPC32::R_PPC_REL16, 16 },
{ RELOC_POWERPC32::R_PPC_REL16_LO, 16 },
{ RELOC_POWERPC32::R_PPC_REL16_HI, 16 },
{ RELOC_POWERPC32::R_PPC_REL16_HA, 16 },
};

static const std::map<RELOC_POWERPC64, uint32_t> relocation_PPC64_sizes {
{ RELOC_POWERPC64::R_PPC64_NONE, 0 },
{ RELOC_POWERPC64::R_PPC64_ADDR32, 32 },
{ RELOC_POWERPC64::R_PPC64_ADDR24, 32 },
{ RELOC_POWERPC64::R_PPC64_ADDR16, 16 },
{ RELOC_POWERPC64::R_PPC64_ADDR16_LO, 16 },
{ RELOC_POWERPC64::R_PPC64_ADDR16_HI, 16 },
{ RELOC_POWERPC64::R_PPC64_ADDR16_HA, 16 },
{ RELOC_POWERPC64::R_PPC64_ADDR14, 32 },
{ RELOC_POWERPC64::R_PPC64_ADDR14_BRTAKEN, 32 },
{ RELOC_POWERPC64::R_PPC64_ADDR14_BRNTAKEN, 32 },
{ RELOC_POWERPC64::R_PPC64_REL24, 32 },
{ RELOC_POWERPC64::R_PPC64_REL14, 32 },
{ RELOC_POWERPC64::R_PPC64_REL14_BRTAKEN, 32 },
{ RELOC_POWERPC64::R_PPC64_REL14_BRNTAKEN, 32 },
{ RELOC_POWERPC64::R_PPC64_GOT16, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT16_LO, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT16_HI, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT16_HA, 16 },
{ RELOC_POWERPC64::R_PPC64_JMP_SLOT, 64 },
{ RELOC_POWERPC64::R_PPC64_RELATIVE, 64 },
{ RELOC_POWERPC64::R_PPC64_REL32, 32 },
{ RELOC_POWERPC64::R_PPC64_ADDR64, 64 },
{ RELOC_POWERPC64::R_PPC64_ADDR16_HIGHER, 16 },
{ RELOC_POWERPC64::R_PPC64_ADDR16_HIGHERA, 16 },
{ RELOC_POWERPC64::R_PPC64_ADDR16_HIGHEST, 16 },
{ RELOC_POWERPC64::R_PPC64_ADDR16_HIGHESTA, 16 },
{ RELOC_POWERPC64::R_PPC64_REL64, 64 },
{ RELOC_POWERPC64::R_PPC64_TOC16, 16 },
{ RELOC_POWERPC64::R_PPC64_TOC16_LO, 16 },
{ RELOC_POWERPC64::R_PPC64_TOC16_HI, 16 },
{ RELOC_POWERPC64::R_PPC64_TOC16_HA, 16 },
{ RELOC_POWERPC64::R_PPC64_TOC, 16 },
{ RELOC_POWERPC64::R_PPC64_ADDR16_DS, 16 },
{ RELOC_POWERPC64::R_PPC64_ADDR16_LO_DS, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT16_DS, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT16_LO_DS, 16 },
{ RELOC_POWERPC64::R_PPC64_TOC16_DS, 16 },
{ RELOC_POWERPC64::R_PPC64_TOC16_LO_DS, 16 },
{ RELOC_POWERPC64::R_PPC64_TLS, 0 },
{ RELOC_POWERPC64::R_PPC64_DTPMOD64, 64 },
{ RELOC_POWERPC64::R_PPC64_TPREL16, 16 },
{ RELOC_POWERPC64::R_PPC64_TPREL16_LO, 16 },
{ RELOC_POWERPC64::R_PPC64_TPREL16_HI, 16 },
{ RELOC_POWERPC64::R_PPC64_TPREL16_HA, 16 },
{ RELOC_POWERPC64::R_PPC64_TPREL64, 64 },
{ RELOC_POWERPC64::R_PPC64_DTPREL16, 16 },
{ RELOC_POWERPC64::R_PPC64_DTPREL16_LO, 16 },
{ RELOC_POWERPC64::R_PPC64_DTPREL16_HI, 16 },
{ RELOC_POWERPC64::R_PPC64_DTPREL16_HA, 16 },
{ RELOC_POWERPC64::R_PPC64_DTPREL64, 64 },
{ RELOC_POWERPC64::R_PPC64_GOT_TLSGD16, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT_TLSGD16_LO, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT_TLSGD16_HI, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT_TLSGD16_HA, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT_TLSLD16, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT_TLSLD16_LO, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT_TLSLD16_HI, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT_TLSLD16_HA, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT_TPREL16_DS, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT_TPREL16_LO_DS, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT_TPREL16_HI, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT_TPREL16_HA, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT_DTPREL16_DS, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT_DTPREL16_LO_DS, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT_DTPREL16_HI, 16 },
{ RELOC_POWERPC64::R_PPC64_GOT_DTPREL16_HA, 16 },
{ RELOC_POWERPC64::R_PPC64_TPREL16_DS, 16 },
{ RELOC_POWERPC64::R_PPC64_TPREL16_LO_DS, 16 },
{ RELOC_POWERPC64::R_PPC64_TPREL16_HIGHER, 16 },
{ RELOC_POWERPC64::R_PPC64_TPREL16_HIGHERA, 16 },
{ RELOC_POWERPC64::R_PPC64_TPREL16_HIGHEST, 16 },
{ RELOC_POWERPC64::R_PPC64_TPREL16_HIGHESTA, 16 },
{ RELOC_POWERPC64::R_PPC64_DTPREL16_DS, 16 },
{ RELOC_POWERPC64::R_PPC64_DTPREL16_LO_DS, 16 },
{ RELOC_POWERPC64::R_PPC64_DTPREL16_HIGHER, 16 },
{ RELOC_POWERPC64::R_PPC64_DTPREL16_HIGHERA, 16 },
{ RELOC_POWERPC64::R_PPC64_DTPREL16_HIGHEST, 16 },
{ RELOC_POWERPC64::R_PPC64_DTPREL16_HIGHESTA, 16 },
{ RELOC_POWERPC64::R_PPC64_TLSGD, 0 },
{ RELOC_POWERPC64::R_PPC64_TLSLD, 0 },
{ RELOC_POWERPC64::R_PPC64_REL16, 16 },
{ RELOC_POWERPC64::R_PPC64_REL16_LO, 16 },
{ RELOC_POWERPC64::R_PPC64_REL16_HI, 16 },
{ RELOC_POWERPC64::R_PPC64_REL16_HA, 16 },
};

}
}

Expand Down
1 change: 1 addition & 0 deletions include/LIEF/ELF/Relocations/PowerPC.def
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ ELF_RELOC(R_PPC_GOT16_HI, 16)
ELF_RELOC(R_PPC_GOT16_HA, 17)
ELF_RELOC(R_PPC_PLTREL24, 18)
ELF_RELOC(R_PPC_JMP_SLOT, 21)
ELF_RELOC(R_PPC_RELATIVE, 22)
ELF_RELOC(R_PPC_LOCAL24PC, 23)
ELF_RELOC(R_PPC_REL32, 26)
ELF_RELOC(R_PPC_TLS, 67)
Expand Down
1 change: 1 addition & 0 deletions include/LIEF/ELF/Relocations/PowerPC64.def
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ ELF_RELOC(R_PPC64_GOT16_LO, 15)
ELF_RELOC(R_PPC64_GOT16_HI, 16)
ELF_RELOC(R_PPC64_GOT16_HA, 17)
ELF_RELOC(R_PPC64_JMP_SLOT, 21)
ELF_RELOC(R_PPC64_RELATIVE, 22)
ELF_RELOC(R_PPC64_REL32, 26)
ELF_RELOC(R_PPC64_ADDR64, 38)
ELF_RELOC(R_PPC64_ADDR16_HIGHER, 39)
Expand Down
2 changes: 2 additions & 0 deletions include/LIEF/ELF/undef.h
Original file line number Diff line number Diff line change
Expand Up @@ -1233,6 +1233,7 @@
#undef R_PPC_GOT16_HA
#undef R_PPC_PLTREL24
#undef R_PPC_JMP_SLOT
#undef R_PPC_RELATIVE
#undef R_PPC_LOCAL24PC
#undef R_PPC_REL32
#undef R_PPC_TLS
Expand Down Expand Up @@ -1289,6 +1290,7 @@
#undef R_PPC64_GOT16_HI
#undef R_PPC64_GOT16_HA
#undef R_PPC64_JMP_SLOT
#undef R_PPC64_RELATIVE
#undef R_PPC64_REL32
#undef R_PPC64_ADDR64
#undef R_PPC64_ADDR16_HIGHER
Expand Down
16 changes: 16 additions & 0 deletions src/ELF/Builder.tcc
Original file line number Diff line number Diff line change
Expand Up @@ -1753,6 +1753,22 @@ void Builder::relocate_dynamic_array(DynamicEntryArray& entry_array, DynamicEntr
break;
}

/*
case ARCH::EM_PPC:
{
relocation = new Relocation(address_relocation, RELOC_POWERPC32::R_PPC_RELATIVE, array[i], is_rela);
break;
}
*/

/*
case ARCH::EM_PPC64:
{
relocation = new Relocation(address_relocation, RELOC_POWERPC64::R_PPC64_RELATIVE, array[i], is_rela);
break;
}
*/

default:
{
LOG(WARNING) << to_string(arch) << " is not supported";
Expand Down
Loading

0 comments on commit 08b5141

Please sign in to comment.