michael@0: // Copyright (c) 2006, Google Inc. michael@0: // All rights reserved. michael@0: // michael@0: // Redistribution and use in source and binary forms, with or without michael@0: // modification, are permitted provided that the following conditions are michael@0: // met: michael@0: // michael@0: // * Redistributions of source code must retain the above copyright michael@0: // notice, this list of conditions and the following disclaimer. michael@0: // * Redistributions in binary form must reproduce the above michael@0: // copyright notice, this list of conditions and the following disclaimer michael@0: // in the documentation and/or other materials provided with the michael@0: // distribution. michael@0: // * Neither the name of Google Inc. nor the names of its michael@0: // contributors may be used to endorse or promote products derived from michael@0: // this software without specific prior written permission. michael@0: // michael@0: // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS michael@0: // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT michael@0: // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR michael@0: // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT michael@0: // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, michael@0: // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT michael@0: // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, michael@0: // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY michael@0: // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT michael@0: // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE michael@0: // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. michael@0: michael@0: // macho_utilties.cc: Utilities for dealing with mach-o files michael@0: // michael@0: // Author: Dave Camp michael@0: michael@0: #include "common/mac/byteswap.h" michael@0: #include "common/mac/macho_utilities.h" michael@0: michael@0: void breakpad_swap_uuid_command(struct breakpad_uuid_command *uc, michael@0: enum NXByteOrder target_byte_order) michael@0: { michael@0: uc->cmd = ByteSwap(uc->cmd); michael@0: uc->cmdsize = ByteSwap(uc->cmdsize); michael@0: } michael@0: michael@0: void breakpad_swap_segment_command_64(struct segment_command_64 *sg, michael@0: enum NXByteOrder target_byte_order) michael@0: { michael@0: sg->cmd = ByteSwap(sg->cmd); michael@0: sg->cmdsize = ByteSwap(sg->cmdsize); michael@0: michael@0: sg->vmaddr = ByteSwap(sg->vmaddr); michael@0: sg->vmsize = ByteSwap(sg->vmsize); michael@0: sg->fileoff = ByteSwap(sg->fileoff); michael@0: sg->filesize = ByteSwap(sg->filesize); michael@0: michael@0: sg->maxprot = ByteSwap(sg->maxprot); michael@0: sg->initprot = ByteSwap(sg->initprot); michael@0: sg->nsects = ByteSwap(sg->nsects); michael@0: sg->flags = ByteSwap(sg->flags); michael@0: } michael@0: michael@0: void breakpad_swap_mach_header_64(struct mach_header_64 *mh, michael@0: enum NXByteOrder target_byte_order) michael@0: { michael@0: mh->magic = ByteSwap(mh->magic); michael@0: mh->cputype = ByteSwap(mh->cputype); michael@0: mh->cpusubtype = ByteSwap(mh->cpusubtype); michael@0: mh->filetype = ByteSwap(mh->filetype); michael@0: mh->ncmds = ByteSwap(mh->ncmds); michael@0: mh->sizeofcmds = ByteSwap(mh->sizeofcmds); michael@0: mh->flags = ByteSwap(mh->flags); michael@0: mh->reserved = ByteSwap(mh->reserved); michael@0: } michael@0: michael@0: void breakpad_swap_section_64(struct section_64 *s, michael@0: uint32_t nsects, michael@0: enum NXByteOrder target_byte_order) michael@0: { michael@0: for (uint32_t i = 0; i < nsects; i++) { michael@0: s[i].addr = ByteSwap(s[i].addr); michael@0: s[i].size = ByteSwap(s[i].size); michael@0: michael@0: s[i].offset = ByteSwap(s[i].offset); michael@0: s[i].align = ByteSwap(s[i].align); michael@0: s[i].reloff = ByteSwap(s[i].reloff); michael@0: s[i].nreloc = ByteSwap(s[i].nreloc); michael@0: s[i].flags = ByteSwap(s[i].flags); michael@0: s[i].reserved1 = ByteSwap(s[i].reserved1); michael@0: s[i].reserved2 = ByteSwap(s[i].reserved2); michael@0: } michael@0: }