| 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);
|
|
|