aboutsummaryrefslogtreecommitdiffstats
path: root/ldid.cpp
diff options
context:
space:
mode:
authorJay Freeman (saurik) <saurik@saurik.com>2010-11-05 13:26:22 -0700
committerJay Freeman (saurik) <saurik@saurik.com>2010-11-05 13:26:22 -0700
commit04802ab148864821973653ddf52f4f14f69d2589 (patch)
treeabd8fd1e9e5470657e16df40cafdf36c3256ca6a /ldid.cpp
parent6212944b8293bb035b4a3fd4bdfd14abdd545a5a (diff)
downloadldid-04802ab148864821973653ddf52f4f14f69d2589.tar.gz
ldid-04802ab148864821973653ddf52f4f14f69d2589.tar.zst
ldid-04802ab148864821973653ddf52f4f14f69d2589.zip
Support ldid on PPC binaries.
Diffstat (limited to 'ldid.cpp')
-rw-r--r--ldid.cpp32
1 files 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<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;
}
}