Index: src/common/mac/macho_utilities.cc |
diff --git a/src/common/mac/macho_utilities.cc b/src/common/mac/macho_utilities.cc |
index 89f9e775cfe6b873015f9319e2694e3826763f6e..f56fe768c10dcef0c7ee2e9c372170b75360e0ce 100644 |
--- a/src/common/mac/macho_utilities.cc |
+++ b/src/common/mac/macho_utilities.cc |
@@ -34,16 +34,44 @@ |
#include "common/mac/byteswap.h" |
#include "common/mac/macho_utilities.h" |
-void breakpad_swap_uuid_command(struct breakpad_uuid_command *uc, |
- enum NXByteOrder target_byte_order) |
-{ |
+#include <mach-o/fat.h> |
+#include <mach-o/loader.h> |
+ |
+void breakpad_swap_uuid_command(struct breakpad_uuid_command *uc) { |
uc->cmd = ByteSwap(uc->cmd); |
uc->cmdsize = ByteSwap(uc->cmdsize); |
} |
-void breakpad_swap_segment_command_64(struct segment_command_64 *sg, |
- enum NXByteOrder target_byte_order) |
-{ |
+void breakpad_swap_load_command(struct load_command *lc) { |
+ lc->cmd = ByteSwap(lc->cmd); |
+ lc->cmdsize = ByteSwap(lc->cmdsize); |
+} |
+ |
+void breakpad_swap_dylib_command(struct dylib_command *dc) { |
+ dc->cmd = ByteSwap(dc->cmd); |
+ dc->cmdsize = ByteSwap(dc->cmdsize); |
+ |
+ dc->dylib.name.offset = ByteSwap(dc->dylib.name.offset); |
+ dc->dylib.timestamp = ByteSwap(dc->dylib.timestamp); |
+ dc->dylib.current_version = ByteSwap(dc->dylib.current_version); |
+ dc->dylib.compatibility_version = ByteSwap(dc->dylib.compatibility_version); |
+} |
+ |
+void breakpad_swap_segment_command(struct segment_command *sc) { |
+ sc->cmd = ByteSwap(sc->cmd); |
+ sc->cmdsize = ByteSwap(sc->cmdsize); |
+ |
+ sc->vmaddr = ByteSwap(sc->vmaddr); |
+ sc->vmsize = ByteSwap(sc->vmsize); |
+ sc->fileoff = ByteSwap(sc->fileoff); |
+ sc->filesize = ByteSwap(sc->filesize); |
+ sc->maxprot = ByteSwap(sc->maxprot); |
+ sc->initprot = ByteSwap(sc->initprot); |
+ sc->nsects = ByteSwap(sc->nsects); |
+ sc->flags = ByteSwap(sc->flags); |
+} |
+ |
+void breakpad_swap_segment_command_64(struct segment_command_64 *sg) { |
sg->cmd = ByteSwap(sg->cmd); |
sg->cmdsize = ByteSwap(sg->cmdsize); |
@@ -58,9 +86,32 @@ void breakpad_swap_segment_command_64(struct segment_command_64 *sg, |
sg->flags = ByteSwap(sg->flags); |
} |
-void breakpad_swap_mach_header_64(struct mach_header_64 *mh, |
- enum NXByteOrder target_byte_order) |
-{ |
+void breakpad_swap_fat_header(struct fat_header *fh) { |
+ fh->magic = ByteSwap(fh->magic); |
+ fh->nfat_arch = ByteSwap(fh->nfat_arch); |
+} |
+ |
+void breakpad_swap_fat_arch(struct fat_arch *fa, uint32_t narchs) { |
+ for (uint32_t i = 0; i < narchs; ++i) { |
+ fa[i].cputype = ByteSwap(fa[i].cputype); |
+ fa[i].cpusubtype = ByteSwap(fa[i].cpusubtype); |
+ fa[i].offset = ByteSwap(fa[i].offset); |
+ fa[i].size = ByteSwap(fa[i].size); |
+ fa[i].align = ByteSwap(fa[i].align); |
+ } |
+} |
+ |
+void breakpad_swap_mach_header(struct mach_header *mh) { |
+ mh->magic = ByteSwap(mh->magic); |
+ mh->cputype = ByteSwap(mh->cputype); |
+ mh->cpusubtype = ByteSwap(mh->cpusubtype); |
+ mh->filetype = ByteSwap(mh->filetype); |
+ mh->ncmds = ByteSwap(mh->ncmds); |
+ mh->sizeofcmds = ByteSwap(mh->sizeofcmds); |
+ mh->flags = ByteSwap(mh->flags); |
+} |
+ |
+void breakpad_swap_mach_header_64(struct mach_header_64 *mh) { |
mh->magic = ByteSwap(mh->magic); |
mh->cputype = ByteSwap(mh->cputype); |
mh->cpusubtype = ByteSwap(mh->cpusubtype); |
@@ -71,10 +122,24 @@ void breakpad_swap_mach_header_64(struct mach_header_64 *mh, |
mh->reserved = ByteSwap(mh->reserved); |
} |
+void breakpad_swap_section(struct section *s, |
+ uint32_t nsects) { |
+ for (uint32_t i = 0; i < nsects; i++) { |
+ s[i].addr = ByteSwap(s[i].addr); |
+ s[i].size = ByteSwap(s[i].size); |
+ |
+ s[i].offset = ByteSwap(s[i].offset); |
+ s[i].align = ByteSwap(s[i].align); |
+ s[i].reloff = ByteSwap(s[i].reloff); |
+ s[i].nreloc = ByteSwap(s[i].nreloc); |
+ s[i].flags = ByteSwap(s[i].flags); |
+ s[i].reserved1 = ByteSwap(s[i].reserved1); |
+ s[i].reserved2 = ByteSwap(s[i].reserved2); |
+ } |
+} |
+ |
void breakpad_swap_section_64(struct section_64 *s, |
- uint32_t nsects, |
- enum NXByteOrder target_byte_order) |
-{ |
+ uint32_t nsects) { |
for (uint32_t i = 0; i < nsects; i++) { |
s[i].addr = ByteSwap(s[i].addr); |
s[i].size = ByteSwap(s[i].size); |