diff --git a/api/python/lief/__init__.pyi b/api/python/lief/__init__.pyi index 6c783911..8339e86f 100644 --- a/api/python/lief/__init__.pyi +++ b/api/python/lief/__init__.pyi @@ -201,6 +201,8 @@ class Header(Object): LOONGARCH = 11 + PPC64 = 12 + class ENDIANNESS(enum.Enum): @staticmethod def from_value(arg: int, /) -> Header.ENDIANNESS: ... diff --git a/api/python/src/Abstract/pyHeader.cpp b/api/python/src/Abstract/pyHeader.cpp index 35d6656c..50b4be3f 100644 --- a/api/python/src/Abstract/pyHeader.cpp +++ b/api/python/src/Abstract/pyHeader.cpp @@ -47,6 +47,7 @@ void create
(nb::module_& m) { ENTRY(XCORE) ENTRY(RISCV) ENTRY(LOONGARCH) + ENTRY(PPC64) ; #undef ENTRY diff --git a/include/LIEF/Abstract/Header.hpp b/include/LIEF/Abstract/Header.hpp index 7a49310c..1dd558c4 100644 --- a/include/LIEF/Abstract/Header.hpp +++ b/include/LIEF/Abstract/Header.hpp @@ -52,6 +52,7 @@ class LIEF_API Header : public Object { XCORE, RISCV, LOONGARCH, + PPC64, }; enum class ENDIANNESS { diff --git a/src/Abstract/Header.cpp b/src/Abstract/Header.cpp index d95400cc..e19ab10f 100644 --- a/src/Abstract/Header.cpp +++ b/src/Abstract/Header.cpp @@ -84,6 +84,10 @@ Header Header::from(const ELF::Binary& elf) { hdr.architecture_ = ARCHITECTURES::PPC; break; + case ELF::ARCH::PPC64: + hdr.architecture_ = ARCHITECTURES::PPC64; + break; + case ELF::ARCH::RISCV: hdr.architecture_ = ARCHITECTURES::RISCV; break; @@ -248,8 +252,12 @@ Header Header::from(const MachO::Binary& macho) { hdr.architecture_ = ARCHITECTURES::MIPS; break; - case MachO::Header::CPU_TYPE::POWERPC: case MachO::Header::CPU_TYPE::POWERPC64: + hdr.architecture_ = ARCHITECTURES::PPC64; + hdr.endianness_ = ENDIANNESS::BIG; + break; + + case MachO::Header::CPU_TYPE::POWERPC: hdr.architecture_ = ARCHITECTURES::PPC; hdr.endianness_ = ENDIANNESS::BIG; break; @@ -319,6 +327,7 @@ const char* to_string(Header::ARCHITECTURES e) { ENTRY(XCORE), ENTRY(RISCV), ENTRY(LOONGARCH), + ENTRY(PPC64), }; #undef ENTRY if (auto it = enums2str.find(e); it != enums2str.end()) { diff --git a/tests/abstract/test_abstract.py b/tests/abstract/test_abstract.py index 0695e8fc..df2023c8 100644 --- a/tests/abstract/test_abstract.py +++ b/tests/abstract/test_abstract.py @@ -115,3 +115,7 @@ def test_entropy(): assert weird_section_0 >= 0 assert weird_section_1 >= 0 + +def test_issue_1217(): + elf = lief.ELF.parse(get_sample("ELF/bitcoin_ppc_be")) + assert elf.abstract.header.architecture == lief.Header.ARCHITECTURES.PPC64