1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/macho_utilities.cc Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,90 @@ 1.4 +// Copyright (c) 2006, Google Inc. 1.5 +// All rights reserved. 1.6 +// 1.7 +// Redistribution and use in source and binary forms, with or without 1.8 +// modification, are permitted provided that the following conditions are 1.9 +// met: 1.10 +// 1.11 +// * Redistributions of source code must retain the above copyright 1.12 +// notice, this list of conditions and the following disclaimer. 1.13 +// * Redistributions in binary form must reproduce the above 1.14 +// copyright notice, this list of conditions and the following disclaimer 1.15 +// in the documentation and/or other materials provided with the 1.16 +// distribution. 1.17 +// * Neither the name of Google Inc. nor the names of its 1.18 +// contributors may be used to endorse or promote products derived from 1.19 +// this software without specific prior written permission. 1.20 +// 1.21 +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1.22 +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1.23 +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1.24 +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1.25 +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 1.26 +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 1.27 +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 1.28 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 1.29 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 1.30 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 1.31 +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1.32 + 1.33 +// macho_utilties.cc: Utilities for dealing with mach-o files 1.34 +// 1.35 +// Author: Dave Camp 1.36 + 1.37 +#include "common/mac/byteswap.h" 1.38 +#include "common/mac/macho_utilities.h" 1.39 + 1.40 +void breakpad_swap_uuid_command(struct breakpad_uuid_command *uc, 1.41 + enum NXByteOrder target_byte_order) 1.42 +{ 1.43 + uc->cmd = ByteSwap(uc->cmd); 1.44 + uc->cmdsize = ByteSwap(uc->cmdsize); 1.45 +} 1.46 + 1.47 +void breakpad_swap_segment_command_64(struct segment_command_64 *sg, 1.48 + enum NXByteOrder target_byte_order) 1.49 +{ 1.50 + sg->cmd = ByteSwap(sg->cmd); 1.51 + sg->cmdsize = ByteSwap(sg->cmdsize); 1.52 + 1.53 + sg->vmaddr = ByteSwap(sg->vmaddr); 1.54 + sg->vmsize = ByteSwap(sg->vmsize); 1.55 + sg->fileoff = ByteSwap(sg->fileoff); 1.56 + sg->filesize = ByteSwap(sg->filesize); 1.57 + 1.58 + sg->maxprot = ByteSwap(sg->maxprot); 1.59 + sg->initprot = ByteSwap(sg->initprot); 1.60 + sg->nsects = ByteSwap(sg->nsects); 1.61 + sg->flags = ByteSwap(sg->flags); 1.62 +} 1.63 + 1.64 +void breakpad_swap_mach_header_64(struct mach_header_64 *mh, 1.65 + enum NXByteOrder target_byte_order) 1.66 +{ 1.67 + mh->magic = ByteSwap(mh->magic); 1.68 + mh->cputype = ByteSwap(mh->cputype); 1.69 + mh->cpusubtype = ByteSwap(mh->cpusubtype); 1.70 + mh->filetype = ByteSwap(mh->filetype); 1.71 + mh->ncmds = ByteSwap(mh->ncmds); 1.72 + mh->sizeofcmds = ByteSwap(mh->sizeofcmds); 1.73 + mh->flags = ByteSwap(mh->flags); 1.74 + mh->reserved = ByteSwap(mh->reserved); 1.75 +} 1.76 + 1.77 +void breakpad_swap_section_64(struct section_64 *s, 1.78 + uint32_t nsects, 1.79 + enum NXByteOrder target_byte_order) 1.80 +{ 1.81 + for (uint32_t i = 0; i < nsects; i++) { 1.82 + s[i].addr = ByteSwap(s[i].addr); 1.83 + s[i].size = ByteSwap(s[i].size); 1.84 + 1.85 + s[i].offset = ByteSwap(s[i].offset); 1.86 + s[i].align = ByteSwap(s[i].align); 1.87 + s[i].reloff = ByteSwap(s[i].reloff); 1.88 + s[i].nreloc = ByteSwap(s[i].nreloc); 1.89 + s[i].flags = ByteSwap(s[i].flags); 1.90 + s[i].reserved1 = ByteSwap(s[i].reserved1); 1.91 + s[i].reserved2 = ByteSwap(s[i].reserved2); 1.92 + } 1.93 +}