diff options
author | Jay Freeman (saurik) <saurik@saurik.com> | 2010-11-05 13:26:22 -0700 |
---|---|---|
committer | Jay Freeman (saurik) <saurik@saurik.com> | 2010-11-05 13:26:22 -0700 |
commit | 04802ab148864821973653ddf52f4f14f69d2589 (patch) | |
tree | abd8fd1e9e5470657e16df40cafdf36c3256ca6a | |
parent | 6212944b8293bb035b4a3fd4bdfd14abdd545a5a (diff) | |
download | ldid-04802ab148864821973653ddf52f4f14f69d2589.tar.gz ldid-04802ab148864821973653ddf52f4f14f69d2589.tar.zst ldid-04802ab148864821973653ddf52f4f14f69d2589.zip |
Support ldid on PPC binaries.
-rw-r--r-- | ldid.cpp | 32 |
1 files changed, 23 insertions, 9 deletions
@@ -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<struct load_command *> GetLoadCommands() { std::vector<struct load_command *> 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; } } |