From 04802ab148864821973653ddf52f4f14f69d2589 Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Fri, 5 Nov 2010 13:26:22 -0700 Subject: [PATCH] Support ldid on PPC binaries. --- ldid.cpp | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/ldid.cpp b/ldid.cpp index 5ee0675..8700e7e 100644 --- a/ldid.cpp +++ b/ldid.cpp @@ -68,11 +68,7 @@ struct fat_arch { struct mach_header { uint32_t magic; uint32_t cputype; - - // XXX: byte swapped? - uint16_t cpusubtype; - uint16_t caps; - + uint32_t cpusubtype; uint32_t filetype; uint32_t ncmds; uint32_t sizeofcmds; @@ -296,6 +292,14 @@ class Framework { return size_; } + uint32_t GetCPUType() const { + return Swap(mach_header_->cputype); + } + + uint16_t GetCPUSubtype() const { + return Swap(mach_header_->cpusubtype) & 0xff; + } + std::vector GetLoadCommands() { std::vector load_commands; @@ -582,24 +586,34 @@ int main(int argc, const char *argv[]) { if (size == _not(size_t)) size = framework.GetSize(); - switch (framework->cputype) { - case 7: switch (framework->cpusubtype) { + switch (framework.GetCPUType()) { + case 7: switch (framework.GetCPUSubtype()) { case 3: arch = "i386"; break; default: arch = NULL; break; } break; - case 12: switch (framework->cpusubtype) { + case 12: switch (framework.GetCPUSubtype()) { case 0: arch = "arm"; break; case 6: arch = "armv6"; break; case 9: arch = "armv7"; break; default: arch = NULL; break; } break; - case 16777223: switch (framework->cpusubtype) { + case 18: switch (framework.GetCPUSubtype()) { + case 10: arch = "ppc7400"; break; + default: arch = NULL; break; + } break; + + case 16777223: switch (framework.GetCPUSubtype()) { case 3: arch = "x86_64"; break; default: arch = NULL; break; } break; + case 16777234: switch (framework.GetCPUSubtype()) { + case 0: arch = "ppc64"; break; + default: arch = NULL; break; + } break; + default: arch = NULL; break; } } -- 2.45.2