summaryrefslogtreecommitdiffstats
path: root/toolkit/crashreporter/google-breakpad/src/tools/mac
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/crashreporter/google-breakpad/src/tools/mac')
-rw-r--r--toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.mm408
-rw-r--r--toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj618
-rw-r--r--toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.h111
-rw-r--r--toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.mm314
-rw-r--r--toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj1857
-rw-r--r--toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc264
-rw-r--r--toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/macho_dump.cc203
-rw-r--r--toolkit/crashreporter/google-breakpad/src/tools/mac/symupload/minidump_upload.m135
-rw-r--r--toolkit/crashreporter/google-breakpad/src/tools/mac/symupload/symupload.m204
-rw-r--r--toolkit/crashreporter/google-breakpad/src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj254
-rw-r--r--toolkit/crashreporter/google-breakpad/src/tools/mac/tools_mac.gypi116
-rw-r--r--toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_constants.h67
-rw-r--r--toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_reader.go69
-rw-r--r--toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.go432
14 files changed, 5052 insertions, 0 deletions
diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.mm b/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.mm
new file mode 100644
index 0000000000..f68200c7c9
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.mm
@@ -0,0 +1,408 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// crash_report.mm: Convert the contents of a minidump into a format that
+// looks more like Apple's CrashReporter format
+
+#include <unistd.h>
+
+#include <mach/machine.h>
+#include <mach-o/arch.h>
+
+#include <string>
+
+#include <Foundation/Foundation.h>
+
+#include "common/scoped_ptr.h"
+#include "google_breakpad/processor/basic_source_line_resolver.h"
+#include "google_breakpad/processor/call_stack.h"
+#include "google_breakpad/processor/code_module.h"
+#include "google_breakpad/processor/minidump.h"
+#include "google_breakpad/processor/minidump_processor.h"
+#include "google_breakpad/processor/process_state.h"
+#include "google_breakpad/processor/stack_frame_cpu.h"
+#include "google_breakpad/processor/system_info.h"
+#include "processor/pathname_stripper.h"
+#include "processor/simple_symbol_supplier.h"
+
+#include "on_demand_symbol_supplier.h"
+
+using std::string;
+
+using google_breakpad::BasicSourceLineResolver;
+using google_breakpad::CallStack;
+using google_breakpad::CodeModule;
+using google_breakpad::CodeModules;
+using google_breakpad::Minidump;
+using google_breakpad::MinidumpProcessor;
+using google_breakpad::OnDemandSymbolSupplier;
+using google_breakpad::PathnameStripper;
+using google_breakpad::ProcessState;
+using google_breakpad::scoped_ptr;
+using google_breakpad::StackFrame;
+using google_breakpad::StackFramePPC;
+using google_breakpad::StackFrameX86;
+using google_breakpad::SystemInfo;
+
+typedef struct {
+ NSString *minidumpPath;
+ NSString *searchDir;
+ NSString *symbolSearchDir;
+ BOOL printThreadMemory;
+} Options;
+
+//=============================================================================
+static int PrintRegister(const char *name, u_int32_t value, int sequence) {
+ if (sequence % 4 == 0) {
+ printf("\n");
+ }
+ printf("%6s = 0x%08x ", name, value);
+ return ++sequence;
+}
+
+//=============================================================================
+static void PrintStack(const CallStack *stack, const string &cpu) {
+ size_t frame_count = stack->frames()->size();
+ char buffer[1024];
+ for (size_t frame_index = 0; frame_index < frame_count; ++frame_index) {
+ const StackFrame *frame = stack->frames()->at(frame_index);
+ const CodeModule *module = frame->module;
+ printf("%2zu ", frame_index);
+
+ if (module) {
+ // Module name (20 chars max)
+ strcpy(buffer, PathnameStripper::File(module->code_file()).c_str());
+ int maxStr = 20;
+ buffer[maxStr] = 0;
+ printf("%-*s", maxStr, buffer);
+
+ strcpy(buffer, module->version().c_str());
+ buffer[maxStr] = 0;
+
+ printf("%-*s",maxStr, buffer);
+
+ u_int64_t instruction = frame->instruction;
+
+ // PPC only: Adjust the instruction to match that of Crash reporter. The
+ // instruction listed is actually the return address. See the detailed
+ // comments in stackwalker_ppc.cc for more information.
+ if (cpu == "ppc" && frame_index)
+ instruction += 4;
+
+ printf(" 0x%08llx ", instruction);
+
+ // Function name
+ if (!frame->function_name.empty()) {
+ printf("%s", frame->function_name.c_str());
+ if (!frame->source_file_name.empty()) {
+ string source_file = PathnameStripper::File(frame->source_file_name);
+ printf(" + 0x%llx (%s:%d)",
+ instruction - frame->source_line_base,
+ source_file.c_str(), frame->source_line);
+ } else {
+ printf(" + 0x%llx", instruction - frame->function_base);
+ }
+ }
+ }
+ printf("\n");
+ }
+}
+
+//=============================================================================
+static void PrintRegisters(const CallStack *stack, const string &cpu) {
+ int sequence = 0;
+ const StackFrame *frame = stack->frames()->at(0);
+ if (cpu == "x86") {
+ const StackFrameX86 *frame_x86 =
+ reinterpret_cast<const StackFrameX86*>(frame);
+
+ if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_EIP)
+ sequence = PrintRegister("eip", frame_x86->context.eip, sequence);
+ if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_ESP)
+ sequence = PrintRegister("esp", frame_x86->context.esp, sequence);
+ if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_EBP)
+ sequence = PrintRegister("ebp", frame_x86->context.ebp, sequence);
+ if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_EBX)
+ sequence = PrintRegister("ebx", frame_x86->context.ebx, sequence);
+ if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_ESI)
+ sequence = PrintRegister("esi", frame_x86->context.esi, sequence);
+ if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_EDI)
+ sequence = PrintRegister("edi", frame_x86->context.edi, sequence);
+ if (frame_x86->context_validity == StackFrameX86::CONTEXT_VALID_ALL) {
+ sequence = PrintRegister("eax", frame_x86->context.eax, sequence);
+ sequence = PrintRegister("ecx", frame_x86->context.ecx, sequence);
+ sequence = PrintRegister("edx", frame_x86->context.edx, sequence);
+ sequence = PrintRegister("efl", frame_x86->context.eflags, sequence);
+ }
+ } else if (cpu == "ppc") {
+ const StackFramePPC *frame_ppc =
+ reinterpret_cast<const StackFramePPC*>(frame);
+
+ if ((frame_ppc->context_validity & StackFramePPC::CONTEXT_VALID_ALL) ==
+ StackFramePPC::CONTEXT_VALID_ALL) {
+ sequence = PrintRegister("srr0", frame_ppc->context.srr0, sequence);
+ sequence = PrintRegister("srr1", frame_ppc->context.srr1, sequence);
+ sequence = PrintRegister("cr", frame_ppc->context.cr, sequence);
+ sequence = PrintRegister("xer", frame_ppc->context.xer, sequence);
+ sequence = PrintRegister("lr", frame_ppc->context.lr, sequence);
+ sequence = PrintRegister("ctr", frame_ppc->context.ctr, sequence);
+ sequence = PrintRegister("mq", frame_ppc->context.mq, sequence);
+ sequence = PrintRegister("vrsave", frame_ppc->context.vrsave, sequence);
+
+ sequence = 0;
+ char buffer[5];
+ for (int i = 0; i < MD_CONTEXT_PPC_GPR_COUNT; ++i) {
+ sprintf(buffer, "r%d", i);
+ sequence = PrintRegister(buffer, frame_ppc->context.gpr[i], sequence);
+ }
+ } else {
+ if (frame_ppc->context_validity & StackFramePPC::CONTEXT_VALID_SRR0)
+ sequence = PrintRegister("srr0", frame_ppc->context.srr0, sequence);
+ if (frame_ppc->context_validity & StackFramePPC::CONTEXT_VALID_GPR1)
+ sequence = PrintRegister("r1", frame_ppc->context.gpr[1], sequence);
+ }
+ }
+
+ printf("\n");
+}
+
+static void PrintModules(const CodeModules *modules) {
+ if (!modules)
+ return;
+
+ printf("\n");
+ printf("Loaded modules:\n");
+
+ u_int64_t main_address = 0;
+ const CodeModule *main_module = modules->GetMainModule();
+ if (main_module) {
+ main_address = main_module->base_address();
+ }
+
+ unsigned int module_count = modules->module_count();
+ for (unsigned int module_sequence = 0;
+ module_sequence < module_count;
+ ++module_sequence) {
+ const CodeModule *module = modules->GetModuleAtSequence(module_sequence);
+ assert(module);
+ u_int64_t base_address = module->base_address();
+ printf("0x%08llx - 0x%08llx %s %s%s %s\n",
+ base_address, base_address + module->size() - 1,
+ PathnameStripper::File(module->code_file()).c_str(),
+ module->version().empty() ? "???" : module->version().c_str(),
+ main_module != NULL && base_address == main_address ?
+ " (main)" : "",
+ module->code_file().c_str());
+ }
+}
+
+static void ProcessSingleReport(Options *options, NSString *file_path) {
+ string minidump_file([file_path fileSystemRepresentation]);
+ BasicSourceLineResolver resolver;
+ string search_dir = options->searchDir ?
+ [options->searchDir fileSystemRepresentation] : "";
+ string symbol_search_dir = options->symbolSearchDir ?
+ [options->symbolSearchDir fileSystemRepresentation] : "";
+ scoped_ptr<OnDemandSymbolSupplier> symbol_supplier(
+ new OnDemandSymbolSupplier(search_dir, symbol_search_dir));
+ scoped_ptr<MinidumpProcessor>
+ minidump_processor(new MinidumpProcessor(symbol_supplier.get(), &resolver));
+ ProcessState process_state;
+ scoped_ptr<Minidump> dump(new google_breakpad::Minidump(minidump_file));
+
+ if (!dump->Read()) {
+ fprintf(stderr, "Minidump %s could not be read\n", dump->path().c_str());
+ return;
+ }
+ if (minidump_processor->Process(dump.get(), &process_state) !=
+ google_breakpad::PROCESS_OK) {
+ fprintf(stderr, "MinidumpProcessor::Process failed\n");
+ return;
+ }
+
+ const SystemInfo *system_info = process_state.system_info();
+ string cpu = system_info->cpu;
+
+ // Convert the time to a string
+ u_int32_t time_date_stamp = process_state.time_date_stamp();
+ struct tm timestruct;
+ gmtime_r(reinterpret_cast<time_t*>(&time_date_stamp), &timestruct);
+ char timestr[20];
+ strftime(timestr, 20, "%Y-%m-%d %H:%M:%S", &timestruct);
+ printf("Date: %s GMT\n", timestr);
+
+ printf("Operating system: %s (%s)\n", system_info->os.c_str(),
+ system_info->os_version.c_str());
+ printf("Architecture: %s\n", cpu.c_str());
+
+ if (process_state.crashed()) {
+ printf("Crash reason: %s\n", process_state.crash_reason().c_str());
+ printf("Crash address: 0x%llx\n", process_state.crash_address());
+ } else {
+ printf("No crash\n");
+ }
+
+ int requesting_thread = process_state.requesting_thread();
+ if (requesting_thread != -1) {
+ printf("\n");
+ printf("Thread %d (%s)\n",
+ requesting_thread,
+ process_state.crashed() ? "crashed" :
+ "requested dump, did not crash");
+ PrintStack(process_state.threads()->at(requesting_thread), cpu);
+ }
+
+ // Print all of the threads in the dump.
+ int thread_count = static_cast<int>(process_state.threads()->size());
+ const std::vector<google_breakpad::MemoryRegion*>
+ *thread_memory_regions = process_state.thread_memory_regions();
+
+ for (int thread_index = 0; thread_index < thread_count; ++thread_index) {
+ if (thread_index != requesting_thread) {
+ // Don't print the crash thread again, it was already printed.
+ printf("\n");
+ printf("Thread %d\n", thread_index);
+ PrintStack(process_state.threads()->at(thread_index), cpu);
+ google_breakpad::MemoryRegion *thread_stack_bytes =
+ thread_memory_regions->at(thread_index);
+ if (options->printThreadMemory) {
+ thread_stack_bytes->Print();
+ }
+ }
+ }
+
+ // Print the crashed registers
+ if (requesting_thread != -1) {
+ printf("\nThread %d:", requesting_thread);
+ PrintRegisters(process_state.threads()->at(requesting_thread), cpu);
+ }
+
+ // Print information about modules
+ PrintModules(process_state.modules());
+}
+
+//=============================================================================
+static void Start(Options *options) {
+ NSFileManager *manager = [NSFileManager defaultManager];
+ NSString *minidump_path = options->minidumpPath;
+ BOOL is_dir = NO;
+ BOOL file_exists = [manager fileExistsAtPath:minidump_path
+ isDirectory:&is_dir];
+ if (file_exists && is_dir) {
+ NSDirectoryEnumerator *enumerator =
+ [manager enumeratorAtPath:minidump_path];
+ NSString *current_file = nil;
+ while ((current_file = [enumerator nextObject])) {
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ if ([[current_file pathExtension] isEqualTo:@"dmp"]) {
+ printf("Attempting to process report: %s\n",
+ [current_file cStringUsingEncoding:NSASCIIStringEncoding]);
+ NSString *full_path =
+ [minidump_path stringByAppendingPathComponent:current_file];
+ ProcessSingleReport(options, full_path);
+ }
+ [pool release];
+ }
+ } else if (file_exists) {
+ ProcessSingleReport(options, minidump_path);
+ }
+}
+
+//=============================================================================
+static void Usage(int argc, const char *argv[]) {
+ fprintf(stderr, "Convert a minidump to a crash report. Breakpad symbol "
+ "files will be used (or created if missing) in /tmp.\n"
+ "If a symbol-file-search-dir is specified, any symbol "
+ "files in it will be used instead of being loaded from "
+ "modules on disk.\n"
+ "If modules cannot be found at the paths stored in the "
+ "minidump file, they will be searched for at "
+ "<module-search-dir>/<path-in-minidump-file>.\n");
+ fprintf(stderr, "Usage: %s [-s module-search-dir] [-S symbol-file-search-dir] "
+ "minidump-file\n", argv[0]);
+ fprintf(stderr, "\t-s: Specify a search directory to use for missing modules\n"
+ "\t-S: Specify a search directory to use for symbol files\n"
+ "\t-t: Print thread stack memory in hex\n"
+ "\t-h: Usage\n"
+ "\t-?: Usage\n");
+}
+
+//=============================================================================
+static void SetupOptions(int argc, const char *argv[], Options *options) {
+ extern int optind;
+ char ch;
+
+ while ((ch = getopt(argc, (char * const *)argv, "S:s:ht?")) != -1) {
+ switch (ch) {
+ case 's':
+ options->searchDir = [[NSFileManager defaultManager]
+ stringWithFileSystemRepresentation:optarg
+ length:strlen(optarg)];
+ break;
+
+ case 'S':
+ options->symbolSearchDir = [[NSFileManager defaultManager]
+ stringWithFileSystemRepresentation:optarg
+ length:strlen(optarg)];
+ break;
+
+ case 't':
+ options->printThreadMemory = YES;
+ break;
+ case 'h':
+ case '?':
+ Usage(argc, argv);
+ exit(1);
+ break;
+ }
+ }
+
+ if ((argc - optind) != 1) {
+ fprintf(stderr, "%s: Missing minidump file\n", argv[0]);
+ Usage(argc, argv);
+ exit(1);
+ }
+
+ options->minidumpPath = [[NSFileManager defaultManager]
+ stringWithFileSystemRepresentation:argv[optind]
+ length:strlen(argv[optind])];
+}
+
+//=============================================================================
+int main (int argc, const char * argv[]) {
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ Options options;
+
+ bzero(&options, sizeof(Options));
+ SetupOptions(argc, argv, &options);
+ Start(&options);
+ [pool release];
+
+ return 0;
+}
diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj b/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..33204f7e2e
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj
@@ -0,0 +1,618 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 162F64FE161C5ECB00CD68D5 /* arch_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 162F64FC161C5ECB00CD68D5 /* arch_utilities.cc */; };
+ 4214B800211109A600B769FA /* convert_old_arm64_context.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4214B7FE211109A600B769FA /* convert_old_arm64_context.cc */; };
+ 4247E6402110D5A500482558 /* path_helper.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4247E63F2110D5A500482558 /* path_helper.cc */; };
+ 4D2C721B126F9ACC00B43EAF /* source_line_resolver_base.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C721A126F9ACC00B43EAF /* source_line_resolver_base.cc */; };
+ 4D2C721F126F9ADE00B43EAF /* exploitability.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C721E126F9ADE00B43EAF /* exploitability.cc */; };
+ 4D2C7223126F9AF900B43EAF /* exploitability_win.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C7222126F9AF900B43EAF /* exploitability_win.cc */; };
+ 4D2C7227126F9B0F00B43EAF /* disassembler_x86.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C7226126F9B0F00B43EAF /* disassembler_x86.cc */; };
+ 4D2C722B126F9B5A00B43EAF /* x86_disasm.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C722A126F9B5A00B43EAF /* x86_disasm.c */; };
+ 4D2C722D126F9B6E00B43EAF /* x86_misc.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C722C126F9B6E00B43EAF /* x86_misc.c */; };
+ 4D2C722F126F9B8300B43EAF /* x86_operand_list.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C722E126F9B8300B43EAF /* x86_operand_list.c */; };
+ 4D2C7233126F9BB000B43EAF /* ia32_invariant.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C7232126F9BB000B43EAF /* ia32_invariant.c */; settings = {COMPILER_FLAGS = "-Wno-error"; }; };
+ 4D2C7235126F9BC200B43EAF /* ia32_settings.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C7234126F9BC200B43EAF /* ia32_settings.c */; };
+ 4D2C7246126F9C0B00B43EAF /* ia32_insn.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C7245126F9C0B00B43EAF /* ia32_insn.c */; };
+ 4D2C724A126F9C2300B43EAF /* ia32_opcode_tables.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C7249126F9C2300B43EAF /* ia32_opcode_tables.c */; settings = {COMPILER_FLAGS = "-Wno-error"; }; };
+ 4D2C724C126F9C3800B43EAF /* ia32_implicit.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C724B126F9C3800B43EAF /* ia32_implicit.c */; settings = {COMPILER_FLAGS = "-Wno-error"; }; };
+ 4D2C724E126F9C4D00B43EAF /* ia32_reg.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C724D126F9C4D00B43EAF /* ia32_reg.c */; settings = {COMPILER_FLAGS = "-Wno-error"; }; };
+ 4D2C725B126F9C8000B43EAF /* ia32_operand.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C725A126F9C8000B43EAF /* ia32_operand.c */; };
+ 4D2C725D126F9C9200B43EAF /* x86_insn.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C725C126F9C9200B43EAF /* x86_insn.c */; };
+ 4D2C7264126F9CBB00B43EAF /* ia32_modrm.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C7261126F9CBB00B43EAF /* ia32_modrm.c */; };
+ 4D2C726D126F9CDC00B43EAF /* x86_imm.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C7263126F9CBB00B43EAF /* x86_imm.c */; };
+ 4D72CA5713DFBA84006CABE3 /* md5.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D72CA5613DFBA84006CABE3 /* md5.cc */; };
+ 557800400BE1F28500EC23E0 /* macho_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5578003E0BE1F28500EC23E0 /* macho_utilities.cc */; };
+ 8B31FF2A11F0C62700FCF3E4 /* dwarf_cfi_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FF2411F0C62700FCF3E4 /* dwarf_cfi_to_module.cc */; };
+ 8B31FF2B11F0C62700FCF3E4 /* dwarf_cu_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FF2611F0C62700FCF3E4 /* dwarf_cu_to_module.cc */; };
+ 8B31FF2C11F0C62700FCF3E4 /* dwarf_line_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FF2811F0C62700FCF3E4 /* dwarf_line_to_module.cc */; };
+ 8B31FF4111F0C64400FCF3E4 /* stabs_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FF3D11F0C64400FCF3E4 /* stabs_reader.cc */; };
+ 8B31FF4211F0C64400FCF3E4 /* stabs_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FF3F11F0C64400FCF3E4 /* stabs_to_module.cc */; };
+ 8B31FF7411F0C6E000FCF3E4 /* macho_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FF7211F0C6E000FCF3E4 /* macho_reader.cc */; };
+ 8B31FF8811F0C6FB00FCF3E4 /* language.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FF8411F0C6FB00FCF3E4 /* language.cc */; };
+ 8B31FF8911F0C6FB00FCF3E4 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FF8611F0C6FB00FCF3E4 /* module.cc */; };
+ 8B31FFC511F0C8AB00FCF3E4 /* dwarf2diehandler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FFC311F0C8AB00FCF3E4 /* dwarf2diehandler.cc */; };
+ 8B40BDC00C0638E4009535AF /* logging.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B40BDBF0C0638E4009535AF /* logging.cc */; };
+ 8DD76F9A0486AA7600D96B5E /* crash_report.mm in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* crash_report.mm */; settings = {ATTRIBUTES = (); }; };
+ 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; };
+ 9B35FEEA0B26761C008DE8C7 /* basic_code_modules.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9B35FEE70B26761C008DE8C7 /* basic_code_modules.cc */; };
+ 9B3904990B2E52FD0059FABE /* basic_source_line_resolver.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9B3904980B2E52FD0059FABE /* basic_source_line_resolver.cc */; };
+ 9BDF172C0B1B8B2400F8391B /* call_stack.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF172A0B1B8B2400F8391B /* call_stack.cc */; };
+ 9BDF172D0B1B8B2400F8391B /* minidump_processor.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF172B0B1B8B2400F8391B /* minidump_processor.cc */; };
+ 9BDF17410B1B8B9A00F8391B /* minidump.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF173F0B1B8B9A00F8391B /* minidump.cc */; };
+ 9BDF17540B1B8BF900F8391B /* stackwalker_ppc.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF17510B1B8BF900F8391B /* stackwalker_ppc.cc */; };
+ 9BDF17550B1B8BF900F8391B /* stackwalker_x86.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF17520B1B8BF900F8391B /* stackwalker_x86.cc */; };
+ 9BDF17560B1B8BF900F8391B /* stackwalker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF17530B1B8BF900F8391B /* stackwalker.cc */; };
+ 9BDF175D0B1B8C1B00F8391B /* process_state.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF175B0B1B8C1B00F8391B /* process_state.cc */; };
+ 9BDF176E0B1B8CB100F8391B /* on_demand_symbol_supplier.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF176C0B1B8CB100F8391B /* on_demand_symbol_supplier.mm */; };
+ 9BDF1A280B1BD58200F8391B /* pathname_stripper.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF1A270B1BD58200F8391B /* pathname_stripper.cc */; };
+ 9BDF21A70B1E825400F8391B /* dump_syms.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF192E0B1BC15D00F8391B /* dump_syms.cc */; };
+ 9BE650B20B52FE3000611104 /* file_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650AC0B52FE3000611104 /* file_id.cc */; };
+ 9BE650B40B52FE3000611104 /* macho_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650AE0B52FE3000611104 /* macho_id.cc */; };
+ 9BE650B60B52FE3000611104 /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650B00B52FE3000611104 /* macho_walker.cc */; };
+ D2A5DD4D1188651100081F03 /* cfi_frame_info.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2A5DD4C1188651100081F03 /* cfi_frame_info.cc */; };
+ D2A5DD631188658B00081F03 /* tokenize.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2A5DD621188658B00081F03 /* tokenize.cc */; };
+ F407DC48185773C10064622B /* exploitability_linux.cc in Sources */ = {isa = PBXBuildFile; fileRef = F407DC40185773C10064622B /* exploitability_linux.cc */; };
+ F407DC49185773C10064622B /* stack_frame_symbolizer.cc in Sources */ = {isa = PBXBuildFile; fileRef = F407DC41185773C10064622B /* stack_frame_symbolizer.cc */; };
+ F407DC4A185773C10064622B /* stackwalker_arm64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F407DC42185773C10064622B /* stackwalker_arm64.cc */; };
+ F407DC4B185773C10064622B /* stackwalker_mips.cc in Sources */ = {isa = PBXBuildFile; fileRef = F407DC44185773C10064622B /* stackwalker_mips.cc */; };
+ F407DC4C185773C10064622B /* stackwalker_ppc64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F407DC46185773C10064622B /* stackwalker_ppc64.cc */; };
+ F44DDD8719C85CD50047280E /* dump_context.cc in Sources */ = {isa = PBXBuildFile; fileRef = F44DDD8419C85CD50047280E /* dump_context.cc */; };
+ F44DDD8819C85CD50047280E /* dump_object.cc in Sources */ = {isa = PBXBuildFile; fileRef = F44DDD8519C85CD50047280E /* dump_object.cc */; };
+ F44DDD8919C85CD50047280E /* microdump_processor.cc in Sources */ = {isa = PBXBuildFile; fileRef = F44DDD8619C85CD50047280E /* microdump_processor.cc */; };
+ F47180561D745DEF0032F208 /* elf_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F47180541D745DEF0032F208 /* elf_reader.cc */; };
+ F47180581D7467630032F208 /* proc_maps_linux.cc in Sources */ = {isa = PBXBuildFile; fileRef = F47180571D7467630032F208 /* proc_maps_linux.cc */; };
+ F471805A1D7468A40032F208 /* symbolic_constants_win.cc in Sources */ = {isa = PBXBuildFile; fileRef = F47180591D7468A40032F208 /* symbolic_constants_win.cc */; };
+ F4D43B2F1A38490700C290B2 /* microdump.cc in Sources */ = {isa = PBXBuildFile; fileRef = F4D43B2E1A38490700C290B2 /* microdump.cc */; };
+ F9C7ECE50E8ABCA600E953AD /* bytereader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F9C7ECE20E8ABCA600E953AD /* bytereader.cc */; };
+ F9C7ECE60E8ABCA600E953AD /* dwarf2reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F9C7ECE30E8ABCA600E953AD /* dwarf2reader.cc */; };
+ F9C7ECE70E8ABCA600E953AD /* functioninfo.cc in Sources */ = {isa = PBXBuildFile; fileRef = F9C7ECE40E8ABCA600E953AD /* functioninfo.cc */; };
+ F9F0706710FBC02D0037B88B /* stackwalker_arm.cc in Sources */ = {isa = PBXBuildFile; fileRef = F9F0706510FBC02D0037B88B /* stackwalker_arm.cc */; };
+ FD6625CD0CF4D45C004AC844 /* stackwalker_amd64.cc in Sources */ = {isa = PBXBuildFile; fileRef = FD6625C40CF4D438004AC844 /* stackwalker_amd64.cc */; };
+ FD8EDEAE0CADDAD400A5EDF1 /* stackwalker_sparc.cc in Sources */ = {isa = PBXBuildFile; fileRef = FD8EDEAC0CADDAD400A5EDF1 /* stackwalker_sparc.cc */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 08FB7796FE84155DC02AAC07 /* crash_report.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = crash_report.mm; sourceTree = "<group>"; };
+ 08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 162F64FC161C5ECB00CD68D5 /* arch_utilities.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = arch_utilities.cc; path = ../../../common/mac/arch_utilities.cc; sourceTree = "<group>"; };
+ 162F64FD161C5ECB00CD68D5 /* arch_utilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = arch_utilities.h; path = ../../../common/mac/arch_utilities.h; sourceTree = "<group>"; };
+ 4214B7FE211109A600B769FA /* convert_old_arm64_context.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = convert_old_arm64_context.cc; path = ../../../processor/convert_old_arm64_context.cc; sourceTree = "<group>"; };
+ 4214B7FF211109A600B769FA /* convert_old_arm64_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = convert_old_arm64_context.h; path = ../../../processor/convert_old_arm64_context.h; sourceTree = "<group>"; };
+ 4247E63E2110D5A500482558 /* path_helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = path_helper.h; path = ../../../common/path_helper.h; sourceTree = "<group>"; };
+ 4247E63F2110D5A500482558 /* path_helper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = path_helper.cc; path = ../../../common/path_helper.cc; sourceTree = "<group>"; };
+ 4D2C721A126F9ACC00B43EAF /* source_line_resolver_base.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = source_line_resolver_base.cc; path = ../../../processor/source_line_resolver_base.cc; sourceTree = SOURCE_ROOT; };
+ 4D2C721E126F9ADE00B43EAF /* exploitability.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = exploitability.cc; path = ../../../processor/exploitability.cc; sourceTree = SOURCE_ROOT; };
+ 4D2C7222126F9AF900B43EAF /* exploitability_win.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = exploitability_win.cc; path = ../../../processor/exploitability_win.cc; sourceTree = SOURCE_ROOT; };
+ 4D2C7226126F9B0F00B43EAF /* disassembler_x86.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = disassembler_x86.cc; path = ../../../processor/disassembler_x86.cc; sourceTree = SOURCE_ROOT; };
+ 4D2C722A126F9B5A00B43EAF /* x86_disasm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = x86_disasm.c; path = ../../../third_party/libdisasm/x86_disasm.c; sourceTree = SOURCE_ROOT; };
+ 4D2C722C126F9B6E00B43EAF /* x86_misc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = x86_misc.c; path = ../../../third_party/libdisasm/x86_misc.c; sourceTree = SOURCE_ROOT; };
+ 4D2C722E126F9B8300B43EAF /* x86_operand_list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = x86_operand_list.c; path = ../../../third_party/libdisasm/x86_operand_list.c; sourceTree = SOURCE_ROOT; };
+ 4D2C7232126F9BB000B43EAF /* ia32_invariant.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ia32_invariant.c; path = ../../../third_party/libdisasm/ia32_invariant.c; sourceTree = SOURCE_ROOT; };
+ 4D2C7234126F9BC200B43EAF /* ia32_settings.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ia32_settings.c; path = ../../../third_party/libdisasm/ia32_settings.c; sourceTree = SOURCE_ROOT; };
+ 4D2C7245126F9C0B00B43EAF /* ia32_insn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ia32_insn.c; path = ../../../third_party/libdisasm/ia32_insn.c; sourceTree = SOURCE_ROOT; };
+ 4D2C7249126F9C2300B43EAF /* ia32_opcode_tables.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ia32_opcode_tables.c; path = ../../../third_party/libdisasm/ia32_opcode_tables.c; sourceTree = SOURCE_ROOT; };
+ 4D2C724B126F9C3800B43EAF /* ia32_implicit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ia32_implicit.c; path = ../../../third_party/libdisasm/ia32_implicit.c; sourceTree = SOURCE_ROOT; };
+ 4D2C724D126F9C4D00B43EAF /* ia32_reg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ia32_reg.c; path = ../../../third_party/libdisasm/ia32_reg.c; sourceTree = SOURCE_ROOT; };
+ 4D2C725A126F9C8000B43EAF /* ia32_operand.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ia32_operand.c; path = ../../../third_party/libdisasm/ia32_operand.c; sourceTree = SOURCE_ROOT; };
+ 4D2C725C126F9C9200B43EAF /* x86_insn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = x86_insn.c; path = ../../../third_party/libdisasm/x86_insn.c; sourceTree = SOURCE_ROOT; };
+ 4D2C7261126F9CBB00B43EAF /* ia32_modrm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ia32_modrm.c; path = ../../../third_party/libdisasm/ia32_modrm.c; sourceTree = SOURCE_ROOT; };
+ 4D2C7263126F9CBB00B43EAF /* x86_imm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = x86_imm.c; path = ../../../third_party/libdisasm/x86_imm.c; sourceTree = SOURCE_ROOT; };
+ 4D72CA5613DFBA84006CABE3 /* md5.cc */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = md5.cc; path = ../../../common/md5.cc; sourceTree = SOURCE_ROOT; };
+ 5578003E0BE1F28500EC23E0 /* macho_utilities.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macho_utilities.cc; path = ../../../common/mac/macho_utilities.cc; sourceTree = SOURCE_ROOT; };
+ 5578003F0BE1F28500EC23E0 /* macho_utilities.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macho_utilities.h; path = ../../../common/mac/macho_utilities.h; sourceTree = SOURCE_ROOT; };
+ 8B31025311F0D2D400FCF3E4 /* Breakpad.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Breakpad.xcconfig; path = ../../../common/mac/Breakpad.xcconfig; sourceTree = SOURCE_ROOT; };
+ 8B3102DA11F0D65600FCF3E4 /* BreakpadDebug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadDebug.xcconfig; path = ../../../common/mac/BreakpadDebug.xcconfig; sourceTree = SOURCE_ROOT; };
+ 8B3102DB11F0D65600FCF3E4 /* BreakpadRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadRelease.xcconfig; path = ../../../common/mac/BreakpadRelease.xcconfig; sourceTree = SOURCE_ROOT; };
+ 8B31FF2411F0C62700FCF3E4 /* dwarf_cfi_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_cfi_to_module.cc; path = ../../../common/dwarf_cfi_to_module.cc; sourceTree = SOURCE_ROOT; };
+ 8B31FF2511F0C62700FCF3E4 /* dwarf_cfi_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_cfi_to_module.h; path = ../../../common/dwarf_cfi_to_module.h; sourceTree = SOURCE_ROOT; };
+ 8B31FF2611F0C62700FCF3E4 /* dwarf_cu_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_cu_to_module.cc; path = ../../../common/dwarf_cu_to_module.cc; sourceTree = SOURCE_ROOT; };
+ 8B31FF2711F0C62700FCF3E4 /* dwarf_cu_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_cu_to_module.h; path = ../../../common/dwarf_cu_to_module.h; sourceTree = SOURCE_ROOT; };
+ 8B31FF2811F0C62700FCF3E4 /* dwarf_line_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_line_to_module.cc; path = ../../../common/dwarf_line_to_module.cc; sourceTree = SOURCE_ROOT; };
+ 8B31FF2911F0C62700FCF3E4 /* dwarf_line_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_line_to_module.h; path = ../../../common/dwarf_line_to_module.h; sourceTree = SOURCE_ROOT; };
+ 8B31FF3D11F0C64400FCF3E4 /* stabs_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_reader.cc; path = ../../../common/stabs_reader.cc; sourceTree = SOURCE_ROOT; };
+ 8B31FF3E11F0C64400FCF3E4 /* stabs_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stabs_reader.h; path = ../../../common/stabs_reader.h; sourceTree = SOURCE_ROOT; };
+ 8B31FF3F11F0C64400FCF3E4 /* stabs_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_to_module.cc; path = ../../../common/stabs_to_module.cc; sourceTree = SOURCE_ROOT; };
+ 8B31FF4011F0C64400FCF3E4 /* stabs_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stabs_to_module.h; path = ../../../common/stabs_to_module.h; sourceTree = SOURCE_ROOT; };
+ 8B31FF7211F0C6E000FCF3E4 /* macho_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macho_reader.cc; path = ../../../common/mac/macho_reader.cc; sourceTree = SOURCE_ROOT; };
+ 8B31FF7311F0C6E000FCF3E4 /* macho_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macho_reader.h; path = ../../../common/mac/macho_reader.h; sourceTree = SOURCE_ROOT; };
+ 8B31FF8411F0C6FB00FCF3E4 /* language.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = language.cc; path = ../../../common/language.cc; sourceTree = SOURCE_ROOT; };
+ 8B31FF8511F0C6FB00FCF3E4 /* language.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = language.h; path = ../../../common/language.h; sourceTree = SOURCE_ROOT; };
+ 8B31FF8611F0C6FB00FCF3E4 /* module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = module.cc; path = ../../../common/module.cc; sourceTree = SOURCE_ROOT; };
+ 8B31FF8711F0C6FB00FCF3E4 /* module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = module.h; path = ../../../common/module.h; sourceTree = SOURCE_ROOT; };
+ 8B31FFC311F0C8AB00FCF3E4 /* dwarf2diehandler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2diehandler.cc; path = ../../../common/dwarf/dwarf2diehandler.cc; sourceTree = SOURCE_ROOT; };
+ 8B31FFC411F0C8AB00FCF3E4 /* dwarf2diehandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf2diehandler.h; path = ../../../common/dwarf/dwarf2diehandler.h; sourceTree = SOURCE_ROOT; };
+ 8B40BDBF0C0638E4009535AF /* logging.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = logging.cc; path = ../../../processor/logging.cc; sourceTree = SOURCE_ROOT; };
+ 8DD76FA10486AA7600D96B5E /* crash_report */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = crash_report; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9B35FEE20B2675F9008DE8C7 /* code_module.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = code_module.h; path = ../../../google_breakpad/processor/code_module.h; sourceTree = SOURCE_ROOT; };
+ 9B35FEE30B2675F9008DE8C7 /* code_modules.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = code_modules.h; path = ../../../google_breakpad/processor/code_modules.h; sourceTree = SOURCE_ROOT; };
+ 9B35FEE60B26761C008DE8C7 /* basic_code_module.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = basic_code_module.h; path = ../../../processor/basic_code_module.h; sourceTree = SOURCE_ROOT; };
+ 9B35FEE70B26761C008DE8C7 /* basic_code_modules.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = basic_code_modules.cc; path = ../../../processor/basic_code_modules.cc; sourceTree = SOURCE_ROOT; };
+ 9B35FEE80B26761C008DE8C7 /* basic_code_modules.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = basic_code_modules.h; path = ../../../processor/basic_code_modules.h; sourceTree = SOURCE_ROOT; };
+ 9B3904940B2E52D90059FABE /* basic_source_line_resolver.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = basic_source_line_resolver.h; sourceTree = "<group>"; };
+ 9B3904950B2E52D90059FABE /* source_line_resolver_interface.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = source_line_resolver_interface.h; sourceTree = "<group>"; };
+ 9B3904980B2E52FD0059FABE /* basic_source_line_resolver.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = basic_source_line_resolver.cc; path = ../../../processor/basic_source_line_resolver.cc; sourceTree = SOURCE_ROOT; };
+ 9B44619D0B66C66B00BBB817 /* system_info.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = system_info.h; sourceTree = "<group>"; };
+ 9BDF16F90B1B8ACD00F8391B /* breakpad_types.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = breakpad_types.h; sourceTree = "<group>"; };
+ 9BDF16FA0B1B8ACD00F8391B /* minidump_format.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = minidump_format.h; sourceTree = "<group>"; };
+ 9BDF16FC0B1B8ACD00F8391B /* call_stack.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = call_stack.h; sourceTree = "<group>"; };
+ 9BDF16FD0B1B8ACD00F8391B /* memory_region.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = memory_region.h; sourceTree = "<group>"; };
+ 9BDF16FE0B1B8ACD00F8391B /* minidump.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = minidump.h; sourceTree = "<group>"; };
+ 9BDF16FF0B1B8ACD00F8391B /* minidump_processor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = minidump_processor.h; sourceTree = "<group>"; };
+ 9BDF17000B1B8ACD00F8391B /* process_state.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = process_state.h; sourceTree = "<group>"; };
+ 9BDF17010B1B8ACD00F8391B /* stack_frame.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = stack_frame.h; sourceTree = "<group>"; };
+ 9BDF17020B1B8ACD00F8391B /* stack_frame_cpu.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = stack_frame_cpu.h; sourceTree = "<group>"; };
+ 9BDF17030B1B8ACD00F8391B /* stackwalker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = stackwalker.h; sourceTree = "<group>"; };
+ 9BDF17040B1B8ACD00F8391B /* symbol_supplier.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = symbol_supplier.h; sourceTree = "<group>"; };
+ 9BDF172A0B1B8B2400F8391B /* call_stack.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = call_stack.cc; path = ../../../processor/call_stack.cc; sourceTree = SOURCE_ROOT; };
+ 9BDF172B0B1B8B2400F8391B /* minidump_processor.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = minidump_processor.cc; path = ../../../processor/minidump_processor.cc; sourceTree = SOURCE_ROOT; };
+ 9BDF173F0B1B8B9A00F8391B /* minidump.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = minidump.cc; path = ../../../processor/minidump.cc; sourceTree = SOURCE_ROOT; };
+ 9BDF17510B1B8BF900F8391B /* stackwalker_ppc.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = stackwalker_ppc.cc; path = ../../../processor/stackwalker_ppc.cc; sourceTree = SOURCE_ROOT; };
+ 9BDF17520B1B8BF900F8391B /* stackwalker_x86.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = stackwalker_x86.cc; path = ../../../processor/stackwalker_x86.cc; sourceTree = SOURCE_ROOT; };
+ 9BDF17530B1B8BF900F8391B /* stackwalker.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = stackwalker.cc; path = ../../../processor/stackwalker.cc; sourceTree = SOURCE_ROOT; };
+ 9BDF175B0B1B8C1B00F8391B /* process_state.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = process_state.cc; path = ../../../processor/process_state.cc; sourceTree = SOURCE_ROOT; };
+ 9BDF176B0B1B8CB100F8391B /* on_demand_symbol_supplier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = on_demand_symbol_supplier.h; sourceTree = "<group>"; };
+ 9BDF176C0B1B8CB100F8391B /* on_demand_symbol_supplier.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = on_demand_symbol_supplier.mm; sourceTree = "<group>"; };
+ 9BDF192D0B1BC15D00F8391B /* dump_syms.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = dump_syms.h; path = ../../../common/mac/dump_syms.h; sourceTree = SOURCE_ROOT; };
+ 9BDF192E0B1BC15D00F8391B /* dump_syms.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = dump_syms.cc; path = ../../../common/mac/dump_syms.cc; sourceTree = SOURCE_ROOT; };
+ 9BDF1A270B1BD58200F8391B /* pathname_stripper.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = pathname_stripper.cc; path = ../../../processor/pathname_stripper.cc; sourceTree = SOURCE_ROOT; };
+ 9BDF1A7A0B1BE30100F8391B /* range_map-inl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = "range_map-inl.h"; path = "../../../processor/range_map-inl.h"; sourceTree = SOURCE_ROOT; };
+ 9BDF1A7B0B1BE30100F8391B /* range_map.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = range_map.h; path = ../../../processor/range_map.h; sourceTree = SOURCE_ROOT; };
+ 9BDF1AFA0B1BEB6300F8391B /* address_map-inl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = "address_map-inl.h"; path = "../../../processor/address_map-inl.h"; sourceTree = SOURCE_ROOT; };
+ 9BDF1AFB0B1BEB6300F8391B /* address_map.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = address_map.h; path = ../../../processor/address_map.h; sourceTree = SOURCE_ROOT; };
+ 9BE650AC0B52FE3000611104 /* file_id.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = file_id.cc; path = ../../../common/mac/file_id.cc; sourceTree = SOURCE_ROOT; };
+ 9BE650AD0B52FE3000611104 /* file_id.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = file_id.h; path = ../../../common/mac/file_id.h; sourceTree = SOURCE_ROOT; };
+ 9BE650AE0B52FE3000611104 /* macho_id.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macho_id.cc; path = ../../../common/mac/macho_id.cc; sourceTree = SOURCE_ROOT; };
+ 9BE650AF0B52FE3000611104 /* macho_id.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macho_id.h; path = ../../../common/mac/macho_id.h; sourceTree = SOURCE_ROOT; };
+ 9BE650B00B52FE3000611104 /* macho_walker.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macho_walker.cc; path = ../../../common/mac/macho_walker.cc; sourceTree = SOURCE_ROOT; };
+ 9BE650B10B52FE3000611104 /* macho_walker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macho_walker.h; path = ../../../common/mac/macho_walker.h; sourceTree = SOURCE_ROOT; };
+ D2A5DD4C1188651100081F03 /* cfi_frame_info.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cfi_frame_info.cc; path = ../../../processor/cfi_frame_info.cc; sourceTree = SOURCE_ROOT; };
+ D2A5DD621188658B00081F03 /* tokenize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tokenize.cc; path = ../../../processor/tokenize.cc; sourceTree = SOURCE_ROOT; };
+ F407DC40185773C10064622B /* exploitability_linux.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = exploitability_linux.cc; path = ../../../processor/exploitability_linux.cc; sourceTree = "<group>"; };
+ F407DC41185773C10064622B /* stack_frame_symbolizer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stack_frame_symbolizer.cc; path = ../../../processor/stack_frame_symbolizer.cc; sourceTree = "<group>"; };
+ F407DC42185773C10064622B /* stackwalker_arm64.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stackwalker_arm64.cc; path = ../../../processor/stackwalker_arm64.cc; sourceTree = "<group>"; };
+ F407DC43185773C10064622B /* stackwalker_arm64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stackwalker_arm64.h; path = ../../../processor/stackwalker_arm64.h; sourceTree = "<group>"; };
+ F407DC44185773C10064622B /* stackwalker_mips.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stackwalker_mips.cc; path = ../../../processor/stackwalker_mips.cc; sourceTree = "<group>"; };
+ F407DC45185773C10064622B /* stackwalker_mips.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stackwalker_mips.h; path = ../../../processor/stackwalker_mips.h; sourceTree = "<group>"; };
+ F407DC46185773C10064622B /* stackwalker_ppc64.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stackwalker_ppc64.cc; path = ../../../processor/stackwalker_ppc64.cc; sourceTree = "<group>"; };
+ F407DC47185773C10064622B /* stackwalker_ppc64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stackwalker_ppc64.h; path = ../../../processor/stackwalker_ppc64.h; sourceTree = "<group>"; };
+ F44DDD8419C85CD50047280E /* dump_context.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dump_context.cc; path = ../../../processor/dump_context.cc; sourceTree = "<group>"; };
+ F44DDD8519C85CD50047280E /* dump_object.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dump_object.cc; path = ../../../processor/dump_object.cc; sourceTree = "<group>"; };
+ F44DDD8619C85CD50047280E /* microdump_processor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = microdump_processor.cc; path = ../../../processor/microdump_processor.cc; sourceTree = "<group>"; };
+ F44DDD8A19C85CFB0047280E /* dump_context.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dump_context.h; path = ../../../google_breakpad/processor/dump_context.h; sourceTree = "<group>"; };
+ F44DDD8B19C85CFB0047280E /* dump_object.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dump_object.h; path = ../../../google_breakpad/processor/dump_object.h; sourceTree = "<group>"; };
+ F44DDD8C19C85CFC0047280E /* microdump_processor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = microdump_processor.h; path = ../../../google_breakpad/processor/microdump_processor.h; sourceTree = "<group>"; };
+ F44DDD8D19C85CFC0047280E /* process_result.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = process_result.h; path = ../../../google_breakpad/processor/process_result.h; sourceTree = "<group>"; };
+ F47180541D745DEF0032F208 /* elf_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = elf_reader.cc; path = ../../../common/dwarf/elf_reader.cc; sourceTree = "<group>"; };
+ F47180551D745DEF0032F208 /* elf_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = elf_reader.h; path = ../../../common/dwarf/elf_reader.h; sourceTree = "<group>"; };
+ F47180571D7467630032F208 /* proc_maps_linux.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = proc_maps_linux.cc; path = ../../../processor/proc_maps_linux.cc; sourceTree = "<group>"; };
+ F47180591D7468A40032F208 /* symbolic_constants_win.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = symbolic_constants_win.cc; path = ../../../processor/symbolic_constants_win.cc; sourceTree = "<group>"; };
+ F4D43B2E1A38490700C290B2 /* microdump.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = microdump.cc; path = ../../../processor/microdump.cc; sourceTree = "<group>"; };
+ F4D43B301A38492000C290B2 /* microdump.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = microdump.h; path = ../../../google_breakpad/processor/microdump.h; sourceTree = "<group>"; };
+ F9C7ECE20E8ABCA600E953AD /* bytereader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bytereader.cc; path = ../../../common/dwarf/bytereader.cc; sourceTree = SOURCE_ROOT; };
+ F9C7ECE30E8ABCA600E953AD /* dwarf2reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2reader.cc; path = ../../../common/dwarf/dwarf2reader.cc; sourceTree = SOURCE_ROOT; };
+ F9C7ECE40E8ABCA600E953AD /* functioninfo.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = functioninfo.cc; path = ../../../common/dwarf/functioninfo.cc; sourceTree = SOURCE_ROOT; };
+ F9F0706510FBC02D0037B88B /* stackwalker_arm.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stackwalker_arm.cc; path = ../../../processor/stackwalker_arm.cc; sourceTree = SOURCE_ROOT; };
+ F9F0706610FBC02D0037B88B /* stackwalker_arm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stackwalker_arm.h; path = ../../../processor/stackwalker_arm.h; sourceTree = SOURCE_ROOT; };
+ FD6625C40CF4D438004AC844 /* stackwalker_amd64.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stackwalker_amd64.cc; path = ../../../processor/stackwalker_amd64.cc; sourceTree = SOURCE_ROOT; };
+ FD6625C50CF4D438004AC844 /* stackwalker_amd64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stackwalker_amd64.h; path = ../../../processor/stackwalker_amd64.h; sourceTree = SOURCE_ROOT; };
+ FD8EDEAC0CADDAD400A5EDF1 /* stackwalker_sparc.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = stackwalker_sparc.cc; path = ../../../processor/stackwalker_sparc.cc; sourceTree = SOURCE_ROOT; };
+ FD8EDEAD0CADDAD400A5EDF1 /* stackwalker_sparc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = stackwalker_sparc.h; path = ../../../processor/stackwalker_sparc.h; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8DD76F9B0486AA7600D96B5E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 08FB7794FE84155DC02AAC07 /* crash_report */ = {
+ isa = PBXGroup;
+ children = (
+ 4214B7FE211109A600B769FA /* convert_old_arm64_context.cc */,
+ 4214B7FF211109A600B769FA /* convert_old_arm64_context.h */,
+ 4247E63F2110D5A500482558 /* path_helper.cc */,
+ 4247E63E2110D5A500482558 /* path_helper.h */,
+ 8B31025311F0D2D400FCF3E4 /* Breakpad.xcconfig */,
+ 8B3102DA11F0D65600FCF3E4 /* BreakpadDebug.xcconfig */,
+ 8B3102DB11F0D65600FCF3E4 /* BreakpadRelease.xcconfig */,
+ F9C7ECE10E8ABC7F00E953AD /* DWARF */,
+ 162F64FC161C5ECB00CD68D5 /* arch_utilities.cc */,
+ 162F64FD161C5ECB00CD68D5 /* arch_utilities.h */,
+ 5578003E0BE1F28500EC23E0 /* macho_utilities.cc */,
+ 5578003F0BE1F28500EC23E0 /* macho_utilities.h */,
+ 8B31FF7211F0C6E000FCF3E4 /* macho_reader.cc */,
+ 8B31FF7311F0C6E000FCF3E4 /* macho_reader.h */,
+ 9BDF192D0B1BC15D00F8391B /* dump_syms.h */,
+ 9BDF192E0B1BC15D00F8391B /* dump_syms.cc */,
+ 08FB7796FE84155DC02AAC07 /* crash_report.mm */,
+ F44DDD8D19C85CFC0047280E /* process_result.h */,
+ 9BDF176B0B1B8CB100F8391B /* on_demand_symbol_supplier.h */,
+ F44DDD8419C85CD50047280E /* dump_context.cc */,
+ F44DDD8A19C85CFB0047280E /* dump_context.h */,
+ F44DDD8519C85CD50047280E /* dump_object.cc */,
+ F44DDD8B19C85CFB0047280E /* dump_object.h */,
+ F4D43B2E1A38490700C290B2 /* microdump.cc */,
+ F4D43B301A38492000C290B2 /* microdump.h */,
+ F44DDD8619C85CD50047280E /* microdump_processor.cc */,
+ F44DDD8C19C85CFC0047280E /* microdump_processor.h */,
+ 9BDF176C0B1B8CB100F8391B /* on_demand_symbol_supplier.mm */,
+ 8B31FF2411F0C62700FCF3E4 /* dwarf_cfi_to_module.cc */,
+ 8B31FF2511F0C62700FCF3E4 /* dwarf_cfi_to_module.h */,
+ 8B31FF2611F0C62700FCF3E4 /* dwarf_cu_to_module.cc */,
+ 8B31FF2711F0C62700FCF3E4 /* dwarf_cu_to_module.h */,
+ 8B31FF2811F0C62700FCF3E4 /* dwarf_line_to_module.cc */,
+ 8B31FF2911F0C62700FCF3E4 /* dwarf_line_to_module.h */,
+ 8B31FF3D11F0C64400FCF3E4 /* stabs_reader.cc */,
+ 8B31FF3E11F0C64400FCF3E4 /* stabs_reader.h */,
+ 8B31FF3F11F0C64400FCF3E4 /* stabs_to_module.cc */,
+ 8B31FF4011F0C64400FCF3E4 /* stabs_to_module.h */,
+ 8B31FF8411F0C6FB00FCF3E4 /* language.cc */,
+ 8B31FF8511F0C6FB00FCF3E4 /* language.h */,
+ 4D72CA5613DFBA84006CABE3 /* md5.cc */,
+ 8B31FF8611F0C6FB00FCF3E4 /* module.cc */,
+ 8B31FF8711F0C6FB00FCF3E4 /* module.h */,
+ 08FB7795FE84155DC02AAC07 /* breakpad */,
+ 4D2C726E126F9CE200B43EAF /* libdisasm */,
+ 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */,
+ 1AB674ADFE9D54B511CA2CBB /* Products */,
+ );
+ name = crash_report;
+ sourceTree = "<group>";
+ };
+ 08FB7795FE84155DC02AAC07 /* breakpad */ = {
+ isa = PBXGroup;
+ children = (
+ 9BE650AB0B52FE1A00611104 /* common */,
+ 9BDF17280B1B8B0200F8391B /* processor */,
+ 9BDF16F70B1B8ACD00F8391B /* google_breakpad */,
+ );
+ name = breakpad;
+ sourceTree = "<group>";
+ };
+ 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB779EFE84155DC02AAC07 /* Foundation.framework */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+ 1AB674ADFE9D54B511CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8DD76FA10486AA7600D96B5E /* crash_report */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 4D2C726E126F9CE200B43EAF /* libdisasm */ = {
+ isa = PBXGroup;
+ children = (
+ 4D2C7226126F9B0F00B43EAF /* disassembler_x86.cc */,
+ 4D2C724B126F9C3800B43EAF /* ia32_implicit.c */,
+ 4D2C7245126F9C0B00B43EAF /* ia32_insn.c */,
+ 4D2C7232126F9BB000B43EAF /* ia32_invariant.c */,
+ 4D2C7261126F9CBB00B43EAF /* ia32_modrm.c */,
+ 4D2C7249126F9C2300B43EAF /* ia32_opcode_tables.c */,
+ 4D2C725A126F9C8000B43EAF /* ia32_operand.c */,
+ 4D2C724D126F9C4D00B43EAF /* ia32_reg.c */,
+ 4D2C7234126F9BC200B43EAF /* ia32_settings.c */,
+ 4D2C722A126F9B5A00B43EAF /* x86_disasm.c */,
+ 4D2C7263126F9CBB00B43EAF /* x86_imm.c */,
+ 4D2C725C126F9C9200B43EAF /* x86_insn.c */,
+ 4D2C722C126F9B6E00B43EAF /* x86_misc.c */,
+ 4D2C722E126F9B8300B43EAF /* x86_operand_list.c */,
+ );
+ name = libdisasm;
+ sourceTree = "<group>";
+ };
+ 9BDF16F70B1B8ACD00F8391B /* google_breakpad */ = {
+ isa = PBXGroup;
+ children = (
+ 9BDF16F80B1B8ACD00F8391B /* common */,
+ 9BDF16FB0B1B8ACD00F8391B /* processor */,
+ );
+ name = google_breakpad;
+ path = ../../../google_breakpad;
+ sourceTree = SOURCE_ROOT;
+ };
+ 9BDF16F80B1B8ACD00F8391B /* common */ = {
+ isa = PBXGroup;
+ children = (
+ 9BDF16F90B1B8ACD00F8391B /* breakpad_types.h */,
+ 9BDF16FA0B1B8ACD00F8391B /* minidump_format.h */,
+ );
+ path = common;
+ sourceTree = "<group>";
+ };
+ 9BDF16FB0B1B8ACD00F8391B /* processor */ = {
+ isa = PBXGroup;
+ children = (
+ 9B3904940B2E52D90059FABE /* basic_source_line_resolver.h */,
+ 9BDF16FC0B1B8ACD00F8391B /* call_stack.h */,
+ 9B35FEE20B2675F9008DE8C7 /* code_module.h */,
+ 9B35FEE30B2675F9008DE8C7 /* code_modules.h */,
+ 9BDF16FD0B1B8ACD00F8391B /* memory_region.h */,
+ 9BDF16FE0B1B8ACD00F8391B /* minidump.h */,
+ 9BDF16FF0B1B8ACD00F8391B /* minidump_processor.h */,
+ 9BDF17000B1B8ACD00F8391B /* process_state.h */,
+ 9B3904950B2E52D90059FABE /* source_line_resolver_interface.h */,
+ 9BDF17010B1B8ACD00F8391B /* stack_frame.h */,
+ 9BDF17020B1B8ACD00F8391B /* stack_frame_cpu.h */,
+ 9BDF17030B1B8ACD00F8391B /* stackwalker.h */,
+ 9BDF17040B1B8ACD00F8391B /* symbol_supplier.h */,
+ 9B44619D0B66C66B00BBB817 /* system_info.h */,
+ );
+ path = processor;
+ sourceTree = "<group>";
+ };
+ 9BDF17280B1B8B0200F8391B /* processor */ = {
+ isa = PBXGroup;
+ children = (
+ 4D2C7222126F9AF900B43EAF /* exploitability_win.cc */,
+ F407DC40185773C10064622B /* exploitability_linux.cc */,
+ F407DC41185773C10064622B /* stack_frame_symbolizer.cc */,
+ F407DC42185773C10064622B /* stackwalker_arm64.cc */,
+ F407DC43185773C10064622B /* stackwalker_arm64.h */,
+ F407DC44185773C10064622B /* stackwalker_mips.cc */,
+ F407DC45185773C10064622B /* stackwalker_mips.h */,
+ F407DC46185773C10064622B /* stackwalker_ppc64.cc */,
+ F407DC47185773C10064622B /* stackwalker_ppc64.h */,
+ 4D2C721E126F9ADE00B43EAF /* exploitability.cc */,
+ 4D2C721A126F9ACC00B43EAF /* source_line_resolver_base.cc */,
+ D2A5DD621188658B00081F03 /* tokenize.cc */,
+ D2A5DD4C1188651100081F03 /* cfi_frame_info.cc */,
+ F9F0706510FBC02D0037B88B /* stackwalker_arm.cc */,
+ F9F0706610FBC02D0037B88B /* stackwalker_arm.h */,
+ 9B3904980B2E52FD0059FABE /* basic_source_line_resolver.cc */,
+ 9BDF1AFA0B1BEB6300F8391B /* address_map-inl.h */,
+ 9BDF1AFB0B1BEB6300F8391B /* address_map.h */,
+ 9B35FEE60B26761C008DE8C7 /* basic_code_module.h */,
+ 9B35FEE70B26761C008DE8C7 /* basic_code_modules.cc */,
+ 9B35FEE80B26761C008DE8C7 /* basic_code_modules.h */,
+ 9BDF172A0B1B8B2400F8391B /* call_stack.cc */,
+ 8B40BDBF0C0638E4009535AF /* logging.cc */,
+ 9BDF173F0B1B8B9A00F8391B /* minidump.cc */,
+ 9BDF172B0B1B8B2400F8391B /* minidump_processor.cc */,
+ 9BDF1A270B1BD58200F8391B /* pathname_stripper.cc */,
+ F47180571D7467630032F208 /* proc_maps_linux.cc */,
+ 9BDF175B0B1B8C1B00F8391B /* process_state.cc */,
+ 9BDF1A7A0B1BE30100F8391B /* range_map-inl.h */,
+ 9BDF1A7B0B1BE30100F8391B /* range_map.h */,
+ 9BDF17530B1B8BF900F8391B /* stackwalker.cc */,
+ 9BDF17510B1B8BF900F8391B /* stackwalker_ppc.cc */,
+ 9BDF17520B1B8BF900F8391B /* stackwalker_x86.cc */,
+ FD8EDEAC0CADDAD400A5EDF1 /* stackwalker_sparc.cc */,
+ FD8EDEAD0CADDAD400A5EDF1 /* stackwalker_sparc.h */,
+ FD6625C40CF4D438004AC844 /* stackwalker_amd64.cc */,
+ FD6625C50CF4D438004AC844 /* stackwalker_amd64.h */,
+ F47180591D7468A40032F208 /* symbolic_constants_win.cc */,
+ );
+ name = processor;
+ sourceTree = "<group>";
+ };
+ 9BE650AB0B52FE1A00611104 /* common */ = {
+ isa = PBXGroup;
+ children = (
+ 9BE650AC0B52FE3000611104 /* file_id.cc */,
+ 9BE650AD0B52FE3000611104 /* file_id.h */,
+ 9BE650AE0B52FE3000611104 /* macho_id.cc */,
+ 9BE650AF0B52FE3000611104 /* macho_id.h */,
+ 9BE650B00B52FE3000611104 /* macho_walker.cc */,
+ 9BE650B10B52FE3000611104 /* macho_walker.h */,
+ );
+ name = common;
+ sourceTree = "<group>";
+ };
+ F9C7ECE10E8ABC7F00E953AD /* DWARF */ = {
+ isa = PBXGroup;
+ children = (
+ F9C7ECE20E8ABCA600E953AD /* bytereader.cc */,
+ F9C7ECE30E8ABCA600E953AD /* dwarf2reader.cc */,
+ 8B31FFC311F0C8AB00FCF3E4 /* dwarf2diehandler.cc */,
+ 8B31FFC411F0C8AB00FCF3E4 /* dwarf2diehandler.h */,
+ F47180541D745DEF0032F208 /* elf_reader.cc */,
+ F47180551D745DEF0032F208 /* elf_reader.h */,
+ F9C7ECE40E8ABCA600E953AD /* functioninfo.cc */,
+ );
+ name = DWARF;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8DD76F960486AA7600D96B5E /* crash_report */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "crash_report" */;
+ buildPhases = (
+ 8DD76F990486AA7600D96B5E /* Sources */,
+ 8DD76F9B0486AA7600D96B5E /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = crash_report;
+ productInstallPath = "$(HOME)/bin";
+ productName = crash_report;
+ productReference = 8DD76FA10486AA7600D96B5E /* crash_report */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 08FB7793FE84155DC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ };
+ buildConfigurationList = 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "crash_report" */;
+ compatibilityVersion = "Xcode 3.1";
+ developmentRegion = en;
+ hasScannedForEncodings = 1;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ );
+ mainGroup = 08FB7794FE84155DC02AAC07 /* crash_report */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8DD76F960486AA7600D96B5E /* crash_report */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8DD76F990486AA7600D96B5E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 162F64FE161C5ECB00CD68D5 /* arch_utilities.cc in Sources */,
+ 8DD76F9A0486AA7600D96B5E /* crash_report.mm in Sources */,
+ F47180581D7467630032F208 /* proc_maps_linux.cc in Sources */,
+ 9BDF172C0B1B8B2400F8391B /* call_stack.cc in Sources */,
+ 9BDF172D0B1B8B2400F8391B /* minidump_processor.cc in Sources */,
+ 9BDF17410B1B8B9A00F8391B /* minidump.cc in Sources */,
+ F44DDD8719C85CD50047280E /* dump_context.cc in Sources */,
+ 9BDF17540B1B8BF900F8391B /* stackwalker_ppc.cc in Sources */,
+ 9BDF17550B1B8BF900F8391B /* stackwalker_x86.cc in Sources */,
+ 9BDF17560B1B8BF900F8391B /* stackwalker.cc in Sources */,
+ 9BDF175D0B1B8C1B00F8391B /* process_state.cc in Sources */,
+ F47180561D745DEF0032F208 /* elf_reader.cc in Sources */,
+ 9BDF176E0B1B8CB100F8391B /* on_demand_symbol_supplier.mm in Sources */,
+ 9BDF1A280B1BD58200F8391B /* pathname_stripper.cc in Sources */,
+ 9BDF21A70B1E825400F8391B /* dump_syms.cc in Sources */,
+ 9B35FEEA0B26761C008DE8C7 /* basic_code_modules.cc in Sources */,
+ 9B3904990B2E52FD0059FABE /* basic_source_line_resolver.cc in Sources */,
+ 9BE650B20B52FE3000611104 /* file_id.cc in Sources */,
+ 9BE650B40B52FE3000611104 /* macho_id.cc in Sources */,
+ 9BE650B60B52FE3000611104 /* macho_walker.cc in Sources */,
+ 557800400BE1F28500EC23E0 /* macho_utilities.cc in Sources */,
+ 8B40BDC00C0638E4009535AF /* logging.cc in Sources */,
+ FD8EDEAE0CADDAD400A5EDF1 /* stackwalker_sparc.cc in Sources */,
+ FD6625CD0CF4D45C004AC844 /* stackwalker_amd64.cc in Sources */,
+ F9C7ECE50E8ABCA600E953AD /* bytereader.cc in Sources */,
+ F9C7ECE60E8ABCA600E953AD /* dwarf2reader.cc in Sources */,
+ F9C7ECE70E8ABCA600E953AD /* functioninfo.cc in Sources */,
+ F9F0706710FBC02D0037B88B /* stackwalker_arm.cc in Sources */,
+ D2A5DD4D1188651100081F03 /* cfi_frame_info.cc in Sources */,
+ D2A5DD631188658B00081F03 /* tokenize.cc in Sources */,
+ 8B31FF2A11F0C62700FCF3E4 /* dwarf_cfi_to_module.cc in Sources */,
+ F4D43B2F1A38490700C290B2 /* microdump.cc in Sources */,
+ 8B31FF2B11F0C62700FCF3E4 /* dwarf_cu_to_module.cc in Sources */,
+ F44DDD8819C85CD50047280E /* dump_object.cc in Sources */,
+ 8B31FF2C11F0C62700FCF3E4 /* dwarf_line_to_module.cc in Sources */,
+ 8B31FF4111F0C64400FCF3E4 /* stabs_reader.cc in Sources */,
+ 8B31FF4211F0C64400FCF3E4 /* stabs_to_module.cc in Sources */,
+ 8B31FF7411F0C6E000FCF3E4 /* macho_reader.cc in Sources */,
+ 8B31FF8811F0C6FB00FCF3E4 /* language.cc in Sources */,
+ 8B31FF8911F0C6FB00FCF3E4 /* module.cc in Sources */,
+ 8B31FFC511F0C8AB00FCF3E4 /* dwarf2diehandler.cc in Sources */,
+ F407DC49185773C10064622B /* stack_frame_symbolizer.cc in Sources */,
+ F471805A1D7468A40032F208 /* symbolic_constants_win.cc in Sources */,
+ 4D2C721B126F9ACC00B43EAF /* source_line_resolver_base.cc in Sources */,
+ 4D2C721F126F9ADE00B43EAF /* exploitability.cc in Sources */,
+ 4D2C7223126F9AF900B43EAF /* exploitability_win.cc in Sources */,
+ 4D2C7227126F9B0F00B43EAF /* disassembler_x86.cc in Sources */,
+ F407DC48185773C10064622B /* exploitability_linux.cc in Sources */,
+ 4214B800211109A600B769FA /* convert_old_arm64_context.cc in Sources */,
+ 4D2C722B126F9B5A00B43EAF /* x86_disasm.c in Sources */,
+ 4D2C722D126F9B6E00B43EAF /* x86_misc.c in Sources */,
+ 4D2C722F126F9B8300B43EAF /* x86_operand_list.c in Sources */,
+ F407DC4A185773C10064622B /* stackwalker_arm64.cc in Sources */,
+ 4D2C7233126F9BB000B43EAF /* ia32_invariant.c in Sources */,
+ 4D2C7235126F9BC200B43EAF /* ia32_settings.c in Sources */,
+ 4D2C7246126F9C0B00B43EAF /* ia32_insn.c in Sources */,
+ 4D2C724A126F9C2300B43EAF /* ia32_opcode_tables.c in Sources */,
+ 4D2C724C126F9C3800B43EAF /* ia32_implicit.c in Sources */,
+ 4247E6402110D5A500482558 /* path_helper.cc in Sources */,
+ F44DDD8919C85CD50047280E /* microdump_processor.cc in Sources */,
+ 4D2C724E126F9C4D00B43EAF /* ia32_reg.c in Sources */,
+ 4D2C725B126F9C8000B43EAF /* ia32_operand.c in Sources */,
+ F407DC4C185773C10064622B /* stackwalker_ppc64.cc in Sources */,
+ 4D2C725D126F9C9200B43EAF /* x86_insn.c in Sources */,
+ 4D2C7264126F9CBB00B43EAF /* ia32_modrm.c in Sources */,
+ F407DC4B185773C10064622B /* stackwalker_mips.cc in Sources */,
+ 4D2C726D126F9CDC00B43EAF /* x86_imm.c in Sources */,
+ 4D72CA5713DFBA84006CABE3 /* md5.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB927508733DD40010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
+ HEADER_SEARCH_PATHS = ../../../../src;
+ PRODUCT_NAME = crash_report;
+ };
+ name = Debug;
+ };
+ 1DEB927608733DD40010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
+ HEADER_SEARCH_PATHS = ../../../../src;
+ PRODUCT_NAME = crash_report;
+ };
+ name = Release;
+ };
+ 1DEB927908733DD40010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 8B3102DA11F0D65600FCF3E4 /* BreakpadDebug.xcconfig */;
+ buildSettings = {
+ GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
+ GCC_TREAT_WARNINGS_AS_ERRORS = NO;
+ };
+ name = Debug;
+ };
+ 1DEB927A08733DD40010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 8B3102DB11F0D65600FCF3E4 /* BreakpadRelease.xcconfig */;
+ buildSettings = {
+ GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "crash_report" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB927508733DD40010E9CD /* Debug */,
+ 1DEB927608733DD40010E9CD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "crash_report" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB927908733DD40010E9CD /* Debug */,
+ 1DEB927A08733DD40010E9CD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.h b/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.h
new file mode 100644
index 0000000000..3fbe108ebd
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.h
@@ -0,0 +1,111 @@
+// Copyright (c) 2006, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// on_demand_symbol_supplier.h: Provides a Symbol Supplier that will create
+// a breakpad symbol file on demand.
+
+#ifndef TOOLS_MAC_CRASH_REPORT_ON_DEMAND_SYMBOL_SUPPLIER_H__
+#define TOOLS_MAC_CRASH_REPORT_ON_DEMAND_SYMBOL_SUPPLIER_H__
+
+#include <map>
+#include <string>
+#include "google_breakpad/processor/symbol_supplier.h"
+
+namespace google_breakpad {
+
+using std::map;
+using std::string;
+class MinidumpModule;
+
+class OnDemandSymbolSupplier : public SymbolSupplier {
+ public:
+ // |search_dir| is the directory to search for alternative symbols with
+ // the same name as the module in the minidump
+ OnDemandSymbolSupplier(const string &search_dir,
+ const string &symbol_search_dir);
+ virtual ~OnDemandSymbolSupplier() {}
+
+ // Returns the path to the symbol file for the given module.
+ virtual SymbolResult GetSymbolFile(const CodeModule *module,
+ const SystemInfo *system_info,
+ string *symbol_file);
+
+ // Returns the path to the symbol file for the given module.
+ virtual SymbolResult GetSymbolFile(const CodeModule *module,
+ const SystemInfo *system_info,
+ string *symbol_file,
+ string *symbol_data);
+ // Allocates data buffer on heap, and takes the ownership of
+ // the data buffer.
+ virtual SymbolResult GetCStringSymbolData(const CodeModule *module,
+ const SystemInfo *system_info,
+ string *symbol_file,
+ char **symbol_data,
+ size_t *symbol_data_size);
+
+ // Delete the data buffer allocated for module in GetCStringSymbolData().
+ virtual void FreeSymbolData(const CodeModule *module);
+
+ protected:
+ // Search directory
+ string search_dir_;
+ string symbol_search_dir_;
+
+ // When we create a symbol file for a module, save the name of the module
+ // and the path to that module's symbol file.
+ map<string, string> module_file_map_;
+
+ // Map of allocated data buffers, keyed by module->code_file().
+ map<string, char *> memory_buffers_;
+
+ // Return the name for |module| This will be the value used as the key
+ // to the |module_file_map_|.
+ string GetNameForModule(const CodeModule *module);
+
+ // Find the module on local system. If the module resides in a different
+ // location than the full path in the minidump, this will be the location
+ // used.
+ string GetLocalModulePath(const CodeModule *module);
+
+ // Return the full path for |module|.
+ string GetModulePath(const CodeModule *module);
+
+ // Return the path to the symbol file for |module|. If an empty string is
+ // returned, then |module| doesn't have a symbol file.
+ string GetModuleSymbolFile(const CodeModule *module);
+
+ // Generate the breakpad symbol file for |module|. Return true if successful.
+ // File is generated in /tmp.
+ bool GenerateSymbolFile(const CodeModule *module,
+ const SystemInfo *system_info);
+};
+
+} // namespace google_breakpad
+
+#endif // TOOLS_MAC_CRASH_REPORT_ON_DEMAND_SYMBOL_SUPPLIER_H__
diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.mm b/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.mm
new file mode 100644
index 0000000000..1955d2667b
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.mm
@@ -0,0 +1,314 @@
+// Copyright (c) 2006, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#import <Foundation/Foundation.h>
+#include <sys/stat.h>
+#include <map>
+#include <string>
+#include <iostream>
+#include <fstream>
+#include <utility>
+
+#include "google_breakpad/processor/basic_source_line_resolver.h"
+#include "google_breakpad/processor/minidump.h"
+#include "google_breakpad/processor/system_info.h"
+#include "processor/pathname_stripper.h"
+
+#include "on_demand_symbol_supplier.h"
+#include "common/mac/dump_syms.h"
+
+using std::map;
+using std::string;
+
+using google_breakpad::OnDemandSymbolSupplier;
+using google_breakpad::PathnameStripper;
+using google_breakpad::SymbolSupplier;
+using google_breakpad::SystemInfo;
+
+OnDemandSymbolSupplier::OnDemandSymbolSupplier(const string &search_dir,
+ const string &symbol_search_dir)
+ : search_dir_(search_dir) {
+ NSFileManager *mgr = [NSFileManager defaultManager];
+ size_t length = symbol_search_dir.length();
+ if (length) {
+ // Load all sym files in symbol_search_dir into our module_file_map
+ // A symbol file always starts with a line like this:
+ // MODULE mac x86 BBF0A8F9BEADDD2048E6464001CA193F0 GoogleDesktopDaemon
+ // or
+ // MODULE mac ppc BBF0A8F9BEADDD2048E6464001CA193F0 GoogleDesktopDaemon
+ const char *symbolSearchStr = symbol_search_dir.c_str();
+ NSString *symbolSearchPath =
+ [mgr stringWithFileSystemRepresentation:symbolSearchStr
+ length:strlen(symbolSearchStr)];
+ NSDirectoryEnumerator *dirEnum = [mgr enumeratorAtPath:symbolSearchPath];
+ NSString *fileName;
+ NSCharacterSet *hexSet =
+ [NSCharacterSet characterSetWithCharactersInString:@"0123456789ABCDEF"];
+ NSCharacterSet *newlineSet =
+ [NSCharacterSet characterSetWithCharactersInString:@"\r\n"];
+ while ((fileName = [dirEnum nextObject])) {
+ // Check to see what type of file we have
+ NSDictionary *attrib = [dirEnum fileAttributes];
+ NSString *fileType = [attrib objectForKey:NSFileType];
+ if ([fileType isEqualToString:NSFileTypeDirectory]) {
+ // Skip subdirectories
+ [dirEnum skipDescendents];
+ } else {
+ NSString *filePath = [symbolSearchPath stringByAppendingPathComponent:fileName];
+ NSString *dataStr = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];
+ if (dataStr) {
+ // Check file to see if it is of appropriate type, and grab module
+ // name.
+ NSScanner *scanner = [NSScanner scannerWithString:dataStr];
+ BOOL goodScan = [scanner scanString:@"MODULE mac " intoString:nil];
+ if (goodScan) {
+ goodScan = ([scanner scanString:@"x86 " intoString:nil] ||
+ [scanner scanString:@"x86_64 " intoString:nil] ||
+ [scanner scanString:@"ppc " intoString:nil]);
+ if (goodScan) {
+ NSString *moduleID;
+ goodScan = [scanner scanCharactersFromSet:hexSet
+ intoString:&moduleID];
+ if (goodScan) {
+ // Module IDs are always 33 chars long
+ goodScan = [moduleID length] == 33;
+ if (goodScan) {
+ NSString *moduleName;
+ goodScan = [scanner scanUpToCharactersFromSet:newlineSet
+ intoString:&moduleName];
+ if (goodScan) {
+ goodScan = [moduleName length] > 0;
+ if (goodScan) {
+ const char *moduleNameStr = [moduleName UTF8String];
+ const char *filePathStr = [filePath fileSystemRepresentation];
+ // Map our file
+ module_file_map_[moduleNameStr] = filePathStr;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+SymbolSupplier::SymbolResult
+OnDemandSymbolSupplier::GetSymbolFile(const CodeModule *module,
+ const SystemInfo *system_info,
+ string *symbol_file) {
+ string path(GetModuleSymbolFile(module));
+
+ if (path.empty()) {
+ if (!GenerateSymbolFile(module, system_info))
+ return NOT_FOUND;
+
+ path = GetModuleSymbolFile(module);
+ }
+
+ if (path.empty())
+ return NOT_FOUND;
+
+ *symbol_file = path;
+ return FOUND;
+}
+
+SymbolSupplier::SymbolResult
+OnDemandSymbolSupplier::GetSymbolFile(const CodeModule *module,
+ const SystemInfo *system_info,
+ string *symbol_file,
+ string *symbol_data) {
+ SymbolSupplier::SymbolResult s = GetSymbolFile(module,
+ system_info,
+ symbol_file);
+
+
+ if (s == FOUND) {
+ std::ifstream in(symbol_file->c_str());
+ getline(in, *symbol_data, std::string::traits_type::to_char_type(
+ std::string::traits_type::eof()));
+ in.close();
+ }
+
+ return s;
+}
+
+SymbolSupplier::SymbolResult
+OnDemandSymbolSupplier::GetCStringSymbolData(const CodeModule *module,
+ const SystemInfo *system_info,
+ string *symbol_file,
+ char **symbol_data,
+ size_t *symbol_data_size) {
+ std::string symbol_data_string;
+ SymbolSupplier::SymbolResult result = GetSymbolFile(module,
+ system_info,
+ symbol_file,
+ &symbol_data_string);
+ if (result == FOUND) {
+ *symbol_data_size = symbol_data_string.size() + 1;
+ *symbol_data = new char[*symbol_data_size];
+ if (*symbol_data == NULL) {
+ // Should return INTERRUPT on memory allocation failure.
+ return INTERRUPT;
+ }
+ memcpy(*symbol_data, symbol_data_string.c_str(), symbol_data_string.size());
+ (*symbol_data)[symbol_data_string.size()] = '\0';
+ memory_buffers_.insert(make_pair(module->code_file(), *symbol_data));
+ }
+ return result;
+}
+
+void OnDemandSymbolSupplier::FreeSymbolData(const CodeModule *module) {
+ map<string, char *>::iterator it = memory_buffers_.find(module->code_file());
+ if (it != memory_buffers_.end()) {
+ delete [] it->second;
+ memory_buffers_.erase(it);
+ }
+}
+
+string OnDemandSymbolSupplier::GetLocalModulePath(const CodeModule *module) {
+ NSFileManager *mgr = [NSFileManager defaultManager];
+ const char *moduleStr = module->code_file().c_str();
+ NSString *modulePath =
+ [mgr stringWithFileSystemRepresentation:moduleStr length:strlen(moduleStr)];
+ const char *searchStr = search_dir_.c_str();
+ NSString *searchDir =
+ [mgr stringWithFileSystemRepresentation:searchStr length:strlen(searchStr)];
+
+ if ([mgr fileExistsAtPath:modulePath])
+ return module->code_file();
+
+ // If the module is not found, try to start appending the components to the
+ // search string and stop if a file (not dir) is found or all components
+ // have been appended
+ NSArray *pathComponents = [modulePath componentsSeparatedByString:@"/"];
+ size_t count = [pathComponents count];
+ NSMutableString *path = [NSMutableString string];
+
+ for (size_t i = 0; i < count; ++i) {
+ [path setString:searchDir];
+
+ for (size_t j = 0; j < i + 1; ++j) {
+ size_t idx = count - 1 - i + j;
+ [path appendFormat:@"/%@", [pathComponents objectAtIndex:idx]];
+ }
+
+ BOOL isDir;
+ if ([mgr fileExistsAtPath:path isDirectory:&isDir] && (!isDir)) {
+ return [path fileSystemRepresentation];
+ }
+ }
+
+ return "";
+}
+
+string OnDemandSymbolSupplier::GetModulePath(const CodeModule *module) {
+ return module->code_file();
+}
+
+string OnDemandSymbolSupplier::GetNameForModule(const CodeModule *module) {
+ return PathnameStripper::File(module->code_file());
+}
+
+string OnDemandSymbolSupplier::GetModuleSymbolFile(const CodeModule *module) {
+ string name(GetNameForModule(module));
+ map<string, string>::iterator result = module_file_map_.find(name);
+
+ return (result == module_file_map_.end()) ? "" : (*result).second;
+}
+
+static float GetFileModificationTime(const char *path) {
+ float result = 0;
+ struct stat file_stat;
+ if (stat(path, &file_stat) == 0)
+ result = (float)file_stat.st_mtimespec.tv_sec +
+ (float)file_stat.st_mtimespec.tv_nsec / 1.0e9f;
+
+ return result;
+}
+
+bool OnDemandSymbolSupplier::GenerateSymbolFile(const CodeModule *module,
+ const SystemInfo *system_info) {
+ bool result = true;
+ string name = GetNameForModule(module);
+ string module_path = GetLocalModulePath(module);
+ NSString *symbol_path = [NSString stringWithFormat:@"/tmp/%s.%s.sym",
+ name.c_str(), system_info->cpu.c_str()];
+
+ if (module_path.empty())
+ return false;
+
+ // Check if there's already a symbol file cached. Ensure that the file is
+ // newer than the module. Otherwise, generate a new one.
+ BOOL generate_file = YES;
+ if ([[NSFileManager defaultManager] fileExistsAtPath:symbol_path]) {
+ // Check if the module file is newer than the saved symbols
+ float cache_time =
+ GetFileModificationTime([symbol_path fileSystemRepresentation]);
+ float module_time =
+ GetFileModificationTime(module_path.c_str());
+
+ if (cache_time > module_time)
+ generate_file = NO;
+ }
+
+ if (generate_file) {
+ DumpSymbols dump(ALL_SYMBOL_DATA, false);
+ if (dump.Read(module_path)) {
+ // What Breakpad calls "x86" should be given to the system as "i386".
+ std::string architecture;
+ if (system_info->cpu.compare("x86") == 0) {
+ architecture = "i386";
+ } else {
+ architecture = system_info->cpu;
+ }
+
+ if (dump.SetArchitecture(architecture)) {
+ std::fstream file([symbol_path fileSystemRepresentation],
+ std::ios_base::out | std::ios_base::trunc);
+ dump.WriteSymbolFile(file);
+ } else {
+ printf("Architecture %s not available for %s\n",
+ system_info->cpu.c_str(), name.c_str());
+ result = false;
+ }
+ } else {
+ printf("Unable to open %s\n", module_path.c_str());
+ result = false;
+ }
+ }
+
+ // Add the mapping
+ if (result)
+ module_file_map_[name] = [symbol_path fileSystemRepresentation];
+
+ return result;
+}
diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj b/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..5b644e24c8
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj
@@ -0,0 +1,1857 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXAggregateTarget section */
+ B88FAFC9116BDCAD00407530 /* all_unittests */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = B88FAFCC116BDCCC00407530 /* Build configuration list for PBXAggregateTarget "all_unittests" */;
+ buildPhases = (
+ B88FB094116CE73E00407530 /* ShellScript */,
+ );
+ dependencies = (
+ B88FB15B116CF53E00407530 /* PBXTargetDependency */,
+ B88FAFCF116BDD7000407530 /* PBXTargetDependency */,
+ B88FB01D116BDF9800407530 /* PBXTargetDependency */,
+ B88FB167116CF54B00407530 /* PBXTargetDependency */,
+ B88FAFD1116BDD7000407530 /* PBXTargetDependency */,
+ B88FB165116CF54B00407530 /* PBXTargetDependency */,
+ B88FB161116CF54B00407530 /* PBXTargetDependency */,
+ B88FB15F116CF54B00407530 /* PBXTargetDependency */,
+ B88FB15D116CF54B00407530 /* PBXTargetDependency */,
+ B84A9201116CF7D2006C210E /* PBXTargetDependency */,
+ B88FB0C8116CEB4A00407530 /* PBXTargetDependency */,
+ 8B31051511F100CF00FCF3E4 /* PBXTargetDependency */,
+ );
+ name = all_unittests;
+ productName = all_unittests;
+ };
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+ 162F64FA161C591500CD68D5 /* arch_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 162F64F8161C591500CD68D5 /* arch_utilities.cc */; };
+ 162F6500161C5F2200CD68D5 /* arch_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 162F64F8161C591500CD68D5 /* arch_utilities.cc */; };
+ 4247E63D2110D4B200482558 /* path_helper.cc in Sources */ = {isa = PBXBuildFile; fileRef = EB06C7511FEBC515000214D9 /* path_helper.cc */; };
+ 4262382721AC496F00E5A3A6 /* dwarf_range_list_handler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4262382521AC496F00E5A3A6 /* dwarf_range_list_handler.cc */; };
+ 4262382821AC49A000E5A3A6 /* dwarf_range_list_handler.h in Sources */ = {isa = PBXBuildFile; fileRef = 4262382621AC496F00E5A3A6 /* dwarf_range_list_handler.h */; };
+ 4D72CAF513DFBAC2006CABE3 /* md5.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D72CAF413DFBAC2006CABE3 /* md5.cc */; };
+ 8BCAAA4C1CE3A7980046090B /* elf_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8BCAAA4A1CE3A7980046090B /* elf_reader.cc */; };
+ 8BCAAA4D1CE3B1260046090B /* elf_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8BCAAA4A1CE3A7980046090B /* elf_reader.cc */; };
+ B84A91F8116CF78F006C210E /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B84A91FB116CF7AF006C210E /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+ B84A91FC116CF7AF006C210E /* stabs_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE3C11666C8900407530 /* stabs_to_module.cc */; };
+ B84A91FD116CF7AF006C210E /* stabs_to_module_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D8116CEC0600407530 /* stabs_to_module_unittest.cc */; };
+ B88FAE1911665FE400407530 /* dwarf2diehandler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE1711665FE400407530 /* dwarf2diehandler.cc */; };
+ B88FAE261166603300407530 /* dwarf_cu_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE1E1166603300407530 /* dwarf_cu_to_module.cc */; };
+ B88FAE271166603300407530 /* dwarf_line_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE201166603300407530 /* dwarf_line_to_module.cc */; };
+ B88FAE281166603300407530 /* language.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE221166603300407530 /* language.cc */; };
+ B88FAE291166603300407530 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+ B88FAE2C1166606200407530 /* macho_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E6E1166571D00DD08C9 /* macho_reader.cc */; };
+ B88FAE351166673E00407530 /* dwarf_cfi_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE331166673E00407530 /* dwarf_cfi_to_module.cc */; };
+ B88FAE3B11666C6F00407530 /* stabs_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE3911666C6F00407530 /* stabs_reader.cc */; };
+ B88FAE3E11666C8900407530 /* stabs_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE3C11666C8900407530 /* stabs_to_module.cc */; };
+ B88FAF37116A595400407530 /* cfi_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAF34116A595400407530 /* cfi_assembler.cc */; };
+ B88FAF38116A595400407530 /* dwarf2reader_cfi_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAF36116A595400407530 /* dwarf2reader_cfi_unittest.cc */; };
+ B88FAF3F116A5A2E00407530 /* dwarf2reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F95B422F0E0E22D100DBDE83 /* dwarf2reader.cc */; };
+ B88FAF40116A5A2E00407530 /* bytereader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F95B422C0E0E22D100DBDE83 /* bytereader.cc */; };
+ B88FB00F116BDEA700407530 /* stabs_reader_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB003116BDE7200407530 /* stabs_reader_unittest.cc */; };
+ B88FB010116BDEA700407530 /* stabs_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE3911666C6F00407530 /* stabs_reader.cc */; };
+ B88FB028116BE03100407530 /* test_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE0911665B5700407530 /* test_assembler.cc */; };
+ B88FB029116BE03100407530 /* gmock-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0EA311665AEA00DD08C9 /* gmock-all.cc */; };
+ B88FB02A116BE03100407530 /* gtest_main.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E9F11665AC300DD08C9 /* gtest_main.cc */; };
+ B88FB02B116BE03100407530 /* gtest-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0EA011665AC300DD08C9 /* gtest-all.cc */; };
+ B88FB03F116BE24200407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB042116BE3C400407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB057116C0CDE00407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB0BD116CEAE000407530 /* module_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0B5116CEA8A00407530 /* module_unittest.cc */; };
+ B88FB0C1116CEB0600407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB0C4116CEB4100407530 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+ B88FB0E3116CEEB000407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB0E5116CEED300407530 /* dwarf2diehandler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE1711665FE400407530 /* dwarf2diehandler.cc */; };
+ B88FB0E6116CEED300407530 /* dwarf2diehandler_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0DB116CEC5800407530 /* dwarf2diehandler_unittest.cc */; };
+ B88FB0F6116CEF2000407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB0FA116CF00E00407530 /* dwarf_line_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE201166603300407530 /* dwarf_line_to_module.cc */; };
+ B88FB0FB116CF00E00407530 /* dwarf_line_to_module_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D7116CEC0600407530 /* dwarf_line_to_module_unittest.cc */; };
+ B88FB0FE116CF02400407530 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+ B88FB10E116CF08100407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB112116CF1F000407530 /* dwarf_cu_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE1E1166603300407530 /* dwarf_cu_to_module.cc */; };
+ B88FB113116CF1F000407530 /* dwarf_cu_to_module_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D6116CEC0600407530 /* dwarf_cu_to_module_unittest.cc */; };
+ B88FB114116CF1F000407530 /* language.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE221166603300407530 /* language.cc */; };
+ B88FB115116CF1F000407530 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+ B88FB123116CF28500407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB129116CF2DD00407530 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+ B88FB12A116CF2DD00407530 /* dwarf_cfi_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE331166673E00407530 /* dwarf_cfi_to_module.cc */; };
+ B88FB12B116CF2DD00407530 /* dwarf_cfi_to_module_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D5116CEC0600407530 /* dwarf_cfi_to_module_unittest.cc */; };
+ B88FB139116CF31600407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB13D116CF38300407530 /* cfi_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAF34116A595400407530 /* cfi_assembler.cc */; };
+ B88FB13E116CF38300407530 /* bytereader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F95B422C0E0E22D100DBDE83 /* bytereader.cc */; };
+ B88FB13F116CF38300407530 /* bytereader_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0DA116CEC5800407530 /* bytereader_unittest.cc */; };
+ B88FB14F116CF4AE00407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB152116CF4D300407530 /* byte_cursor_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D4116CEC0600407530 /* byte_cursor_unittest.cc */; };
+ B89E0E781166576C00DD08C9 /* macho_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E6E1166571D00DD08C9 /* macho_reader.cc */; };
+ B89E0E7A1166576C00DD08C9 /* macho_dump.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E701166573700DD08C9 /* macho_dump.cc */; };
+ B89E0E9911665A7200DD08C9 /* macho_reader_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E6D1166571D00DD08C9 /* macho_reader_unittest.cc */; };
+ B89E0E9A11665A7200DD08C9 /* macho_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E6E1166571D00DD08C9 /* macho_reader.cc */; };
+ B8C5B5171166534700D34F4E /* dwarf2reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F95B422F0E0E22D100DBDE83 /* dwarf2reader.cc */; };
+ B8C5B5181166534700D34F4E /* bytereader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F95B422C0E0E22D100DBDE83 /* bytereader.cc */; };
+ B8C5B5191166534700D34F4E /* macho_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 557800890BE1F3AB00EC23E0 /* macho_utilities.cc */; };
+ B8C5B51A1166534700D34F4E /* file_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650410B52F6D800611104 /* file_id.cc */; };
+ B8C5B51B1166534700D34F4E /* macho_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650430B52F6D800611104 /* macho_id.cc */; };
+ B8C5B51C1166534700D34F4E /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650450B52F6D800611104 /* macho_walker.cc */; };
+ B8C5B51D1166534700D34F4E /* dump_syms.cc in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* dump_syms.cc */; };
+ B8C5B51E1166534700D34F4E /* dump_syms_tool.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF186E0B1BB43700F8391B /* dump_syms_tool.cc */; };
+ B8C5B523116653BA00D34F4E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; };
+ D21F97D711CBA12300239E38 /* test_assembler_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D9116CEC0600407530 /* test_assembler_unittest.cc */; };
+ D21F97D811CBA13D00239E38 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ D21F97E911CBA1FF00239E38 /* test_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE0911665B5700407530 /* test_assembler.cc */; };
+ EB06C7531FEBC516000214D9 /* path_helper.cc in Sources */ = {isa = PBXBuildFile; fileRef = EB06C7511FEBC515000214D9 /* path_helper.cc */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 8B31051411F100CF00FCF3E4 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = D21F97D111CBA0F200239E38;
+ remoteInfo = test_assembler_unittest;
+ };
+ B84A91F9116CF796006C210E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B84A9200116CF7D2006C210E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B84A91F3116CF784006C210E;
+ remoteInfo = stabs_to_module_unittest;
+ };
+ B88FAFCE116BDD7000407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B89E0E9411665A6400DD08C9;
+ remoteInfo = macho_reader_unittest;
+ };
+ B88FAFD0116BDD7000407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FAF2E116A591D00407530;
+ remoteInfo = dwarf2reader_cfi_unittest;
+ };
+ B88FB01C116BDF9800407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB006116BDE8300407530;
+ remoteInfo = stabs_reader_unittest;
+ };
+ B88FB039116BE17E00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB087116CE6D800407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB08F116CE71000407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB0BF116CEAFE00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB0C7116CEB4A00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB0B8116CEABF00407530;
+ remoteInfo = module_unittest;
+ };
+ B88FB0E7116CEEDA00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB0F7116CEF2E00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB10F116CF08A00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB124116CF29E00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB13B116CF35C00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB150116CF4C100407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB15A116CF53E00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB14A116CF4A700407530;
+ remoteInfo = byte_cursor_unittest;
+ };
+ B88FB15C116CF54B00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB11E116CF27F00407530;
+ remoteInfo = dwarf_cfi_to_module_unittest;
+ };
+ B88FB15E116CF54B00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB0F1116CEF1900407530;
+ remoteInfo = dwarf_line_to_module_unittest;
+ };
+ B88FB160116CF54B00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB109116CF07900407530;
+ remoteInfo = dwarf_cu_to_module_unittest;
+ };
+ B88FB164116CF54B00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB0DE116CEEA800407530;
+ remoteInfo = dwarf2diehandler_unittest;
+ };
+ B88FB166116CF54B00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB134116CF30F00407530;
+ remoteInfo = bytereader_unittest;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 08FB7796FE84155DC02AAC07 /* dump_syms.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = dump_syms.cc; path = ../../../common/mac/dump_syms.cc; sourceTree = "<group>"; };
+ 08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 162F64F8161C591500CD68D5 /* arch_utilities.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = arch_utilities.cc; path = ../../../common/mac/arch_utilities.cc; sourceTree = "<group>"; };
+ 162F64F9161C591500CD68D5 /* arch_utilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = arch_utilities.h; path = ../../../common/mac/arch_utilities.h; sourceTree = "<group>"; };
+ 4262382521AC496F00E5A3A6 /* dwarf_range_list_handler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_range_list_handler.cc; path = ../../../common/dwarf_range_list_handler.cc; sourceTree = "<group>"; };
+ 4262382621AC496F00E5A3A6 /* dwarf_range_list_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_range_list_handler.h; path = ../../../common/dwarf_range_list_handler.h; sourceTree = "<group>"; };
+ 4D72CAF413DFBAC2006CABE3 /* md5.cc */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = md5.cc; path = ../../../common/md5.cc; sourceTree = SOURCE_ROOT; };
+ 557800890BE1F3AB00EC23E0 /* macho_utilities.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macho_utilities.cc; path = ../../../common/mac/macho_utilities.cc; sourceTree = SOURCE_ROOT; };
+ 5578008A0BE1F3AB00EC23E0 /* macho_utilities.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macho_utilities.h; path = ../../../common/mac/macho_utilities.h; sourceTree = SOURCE_ROOT; };
+ 8B31023E11F0CF1C00FCF3E4 /* Breakpad.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Breakpad.xcconfig; path = ../../../common/mac/Breakpad.xcconfig; sourceTree = SOURCE_ROOT; };
+ 8B3102D411F0D60300FCF3E4 /* BreakpadDebug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadDebug.xcconfig; path = ../../../common/mac/BreakpadDebug.xcconfig; sourceTree = SOURCE_ROOT; };
+ 8B3102D511F0D60300FCF3E4 /* BreakpadRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadRelease.xcconfig; path = ../../../common/mac/BreakpadRelease.xcconfig; sourceTree = SOURCE_ROOT; };
+ 8BCAAA4A1CE3A7980046090B /* elf_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = elf_reader.cc; path = ../../../common/dwarf/elf_reader.cc; sourceTree = "<group>"; };
+ 8BCAAA4B1CE3A7980046090B /* elf_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = elf_reader.h; path = ../../../common/dwarf/elf_reader.h; sourceTree = "<group>"; };
+ 9BDF186D0B1BB43700F8391B /* dump_syms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dump_syms.h; path = ../../../common/mac/dump_syms.h; sourceTree = "<group>"; };
+ 9BDF186E0B1BB43700F8391B /* dump_syms_tool.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = dump_syms_tool.cc; sourceTree = "<group>"; };
+ 9BE650410B52F6D800611104 /* file_id.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = file_id.cc; path = ../../../common/mac/file_id.cc; sourceTree = SOURCE_ROOT; };
+ 9BE650420B52F6D800611104 /* file_id.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = file_id.h; path = ../../../common/mac/file_id.h; sourceTree = SOURCE_ROOT; };
+ 9BE650430B52F6D800611104 /* macho_id.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macho_id.cc; path = ../../../common/mac/macho_id.cc; sourceTree = SOURCE_ROOT; };
+ 9BE650440B52F6D800611104 /* macho_id.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macho_id.h; path = ../../../common/mac/macho_id.h; sourceTree = SOURCE_ROOT; };
+ 9BE650450B52F6D800611104 /* macho_walker.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macho_walker.cc; path = ../../../common/mac/macho_walker.cc; sourceTree = SOURCE_ROOT; };
+ 9BE650460B52F6D800611104 /* macho_walker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macho_walker.h; path = ../../../common/mac/macho_walker.h; sourceTree = SOURCE_ROOT; };
+ B84A91F4116CF784006C210E /* stabs_to_module_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = stabs_to_module_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FAE0911665B5700407530 /* test_assembler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = test_assembler.cc; path = ../../../common/test_assembler.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE0A11665B5700407530 /* test_assembler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_assembler.h; path = ../../../common/test_assembler.h; sourceTree = SOURCE_ROOT; };
+ B88FAE1711665FE400407530 /* dwarf2diehandler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2diehandler.cc; path = ../../../common/dwarf/dwarf2diehandler.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE1811665FE400407530 /* dwarf2diehandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf2diehandler.h; path = ../../../common/dwarf/dwarf2diehandler.h; sourceTree = SOURCE_ROOT; };
+ B88FAE1D1166603300407530 /* byte_cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = byte_cursor.h; path = ../../../common/byte_cursor.h; sourceTree = SOURCE_ROOT; };
+ B88FAE1E1166603300407530 /* dwarf_cu_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_cu_to_module.cc; path = ../../../common/dwarf_cu_to_module.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE1F1166603300407530 /* dwarf_cu_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_cu_to_module.h; path = ../../../common/dwarf_cu_to_module.h; sourceTree = SOURCE_ROOT; };
+ B88FAE201166603300407530 /* dwarf_line_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_line_to_module.cc; path = ../../../common/dwarf_line_to_module.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE211166603300407530 /* dwarf_line_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_line_to_module.h; path = ../../../common/dwarf_line_to_module.h; sourceTree = SOURCE_ROOT; };
+ B88FAE221166603300407530 /* language.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = language.cc; path = ../../../common/language.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE231166603300407530 /* language.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = language.h; path = ../../../common/language.h; sourceTree = SOURCE_ROOT; };
+ B88FAE241166603300407530 /* module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = module.cc; path = ../../../common/module.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE251166603300407530 /* module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = module.h; path = ../../../common/module.h; sourceTree = SOURCE_ROOT; };
+ B88FAE331166673E00407530 /* dwarf_cfi_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_cfi_to_module.cc; path = ../../../common/dwarf_cfi_to_module.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE341166673E00407530 /* dwarf_cfi_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_cfi_to_module.h; path = ../../../common/dwarf_cfi_to_module.h; sourceTree = SOURCE_ROOT; };
+ B88FAE3911666C6F00407530 /* stabs_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_reader.cc; path = ../../../common/stabs_reader.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE3A11666C6F00407530 /* stabs_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stabs_reader.h; path = ../../../common/stabs_reader.h; sourceTree = SOURCE_ROOT; };
+ B88FAE3C11666C8900407530 /* stabs_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_to_module.cc; path = ../../../common/stabs_to_module.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE3D11666C8900407530 /* stabs_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stabs_to_module.h; path = ../../../common/stabs_to_module.h; sourceTree = SOURCE_ROOT; };
+ B88FAF2F116A591E00407530 /* dwarf2reader_cfi_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dwarf2reader_cfi_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FAF34116A595400407530 /* cfi_assembler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cfi_assembler.cc; path = ../../../common/dwarf/cfi_assembler.cc; sourceTree = SOURCE_ROOT; };
+ B88FAF35116A595400407530 /* cfi_assembler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cfi_assembler.h; path = ../../../common/dwarf/cfi_assembler.h; sourceTree = SOURCE_ROOT; };
+ B88FAF36116A595400407530 /* dwarf2reader_cfi_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2reader_cfi_unittest.cc; path = ../../../common/dwarf/dwarf2reader_cfi_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB003116BDE7200407530 /* stabs_reader_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_reader_unittest.cc; path = ../../../common/stabs_reader_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB007116BDE8300407530 /* stabs_reader_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = stabs_reader_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FB024116BDFFF00407530 /* libgtestmockall.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgtestmockall.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FB0B5116CEA8A00407530 /* module_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = module_unittest.cc; path = ../../../common/module_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0B9116CEABF00407530 /* module_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = module_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FB0D4116CEC0600407530 /* byte_cursor_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = byte_cursor_unittest.cc; path = ../../../common/byte_cursor_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0D5116CEC0600407530 /* dwarf_cfi_to_module_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_cfi_to_module_unittest.cc; path = ../../../common/dwarf_cfi_to_module_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0D6116CEC0600407530 /* dwarf_cu_to_module_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_cu_to_module_unittest.cc; path = ../../../common/dwarf_cu_to_module_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0D7116CEC0600407530 /* dwarf_line_to_module_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_line_to_module_unittest.cc; path = ../../../common/dwarf_line_to_module_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0D8116CEC0600407530 /* stabs_to_module_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_to_module_unittest.cc; path = ../../../common/stabs_to_module_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0D9116CEC0600407530 /* test_assembler_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = test_assembler_unittest.cc; path = ../../../common/test_assembler_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0DA116CEC5800407530 /* bytereader_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bytereader_unittest.cc; path = ../../../common/dwarf/bytereader_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0DB116CEC5800407530 /* dwarf2diehandler_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2diehandler_unittest.cc; path = ../../../common/dwarf/dwarf2diehandler_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0DF116CEEA800407530 /* dwarf2diehandler_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dwarf2diehandler_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FB0F2116CEF1900407530 /* dwarf_line_to_module_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dwarf_line_to_module_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FB10A116CF07900407530 /* dwarf_cu_to_module_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dwarf_cu_to_module_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FB11F116CF27F00407530 /* dwarf_cfi_to_module_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dwarf_cfi_to_module_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FB135116CF30F00407530 /* bytereader_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = bytereader_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FB14B116CF4A700407530 /* byte_cursor_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = byte_cursor_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B89E0E6D1166571D00DD08C9 /* macho_reader_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macho_reader_unittest.cc; path = ../../../common/mac/macho_reader_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B89E0E6E1166571D00DD08C9 /* macho_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macho_reader.cc; path = ../../../common/mac/macho_reader.cc; sourceTree = SOURCE_ROOT; };
+ B89E0E6F1166571D00DD08C9 /* macho_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macho_reader.h; path = ../../../common/mac/macho_reader.h; sourceTree = SOURCE_ROOT; };
+ B89E0E701166573700DD08C9 /* macho_dump.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = macho_dump.cc; sourceTree = "<group>"; };
+ B89E0E741166575200DD08C9 /* macho_dump */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = macho_dump; sourceTree = BUILT_PRODUCTS_DIR; };
+ B89E0E9511665A6400DD08C9 /* macho_reader_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = macho_reader_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B89E0E9F11665AC300DD08C9 /* gtest_main.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gtest_main.cc; path = ../../../testing/googletest/src/gtest_main.cc; sourceTree = SOURCE_ROOT; };
+ B89E0EA011665AC300DD08C9 /* gtest-all.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gtest-all.cc"; path = "../../../testing/googletest/src/gtest-all.cc"; sourceTree = SOURCE_ROOT; };
+ B89E0EA311665AEA00DD08C9 /* gmock-all.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gmock-all.cc"; path = "../../../testing/googlemock/src/gmock-all.cc"; sourceTree = SOURCE_ROOT; };
+ B8C5B5111166531A00D34F4E /* dump_syms */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dump_syms; sourceTree = BUILT_PRODUCTS_DIR; };
+ B8E8CA0C1156C854009E61B2 /* byteswap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = byteswap.h; path = ../../../common/mac/byteswap.h; sourceTree = SOURCE_ROOT; };
+ D21F97D211CBA0F200239E38 /* test_assembler_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = test_assembler_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ EB06C7511FEBC515000214D9 /* path_helper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = path_helper.cc; path = ../../../common/path_helper.cc; sourceTree = "<group>"; };
+ EB06C7521FEBC516000214D9 /* path_helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = path_helper.h; path = ../../../common/path_helper.h; sourceTree = "<group>"; };
+ F95B422B0E0E22D100DBDE83 /* bytereader-inl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "bytereader-inl.h"; path = "../../../common/dwarf/bytereader-inl.h"; sourceTree = SOURCE_ROOT; };
+ F95B422C0E0E22D100DBDE83 /* bytereader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bytereader.cc; path = ../../../common/dwarf/bytereader.cc; sourceTree = SOURCE_ROOT; };
+ F95B422D0E0E22D100DBDE83 /* bytereader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bytereader.h; path = ../../../common/dwarf/bytereader.h; sourceTree = SOURCE_ROOT; };
+ F95B422E0E0E22D100DBDE83 /* dwarf2enums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf2enums.h; path = ../../../common/dwarf/dwarf2enums.h; sourceTree = SOURCE_ROOT; };
+ F95B422F0E0E22D100DBDE83 /* dwarf2reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2reader.cc; path = ../../../common/dwarf/dwarf2reader.cc; sourceTree = SOURCE_ROOT; };
+ F95B42300E0E22D100DBDE83 /* dwarf2reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf2reader.h; path = ../../../common/dwarf/dwarf2reader.h; sourceTree = SOURCE_ROOT; };
+ F95B42310E0E22D100DBDE83 /* line_state_machine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = line_state_machine.h; path = ../../../common/dwarf/line_state_machine.h; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ B84A91F2116CF784006C210E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B84A91F8116CF78F006C210E /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FAF2D116A591D00407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB042116BE3C400407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB005116BDE8300407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB03F116BE24200407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB022116BDFFF00407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB0B7116CEABF00407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB0C1116CEB0600407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB0DD116CEEA800407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB0E3116CEEB000407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB0F0116CEF1900407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB0F6116CEF2000407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB108116CF07900407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB10E116CF08100407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB11D116CF27F00407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB123116CF28500407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB133116CF30F00407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB139116CF31600407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB149116CF4A700407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB14F116CF4AE00407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B89E0E721166575200DD08C9 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B89E0E9311665A6400DD08C9 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB057116C0CDE00407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B8C5B50F1166531A00D34F4E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B8C5B523116653BA00D34F4E /* Foundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ D21F97D011CBA0F200239E38 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D21F97D811CBA13D00239E38 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 08FB7794FE84155DC02AAC07 /* dump_syms */ = {
+ isa = PBXGroup;
+ children = (
+ 8B31023E11F0CF1C00FCF3E4 /* Breakpad.xcconfig */,
+ 8B3102D411F0D60300FCF3E4 /* BreakpadDebug.xcconfig */,
+ 8B3102D511F0D60300FCF3E4 /* BreakpadRelease.xcconfig */,
+ B89E0E9D11665A9500DD08C9 /* TESTING */,
+ F9F5344B0E7C8FFC0012363F /* DWARF */,
+ B89E0E6C1166569700DD08C9 /* MACHO */,
+ B88FAE3811666A1700407530 /* STABS */,
+ B88FAE1C11665FFD00407530 /* MODULE */,
+ 162F64F8161C591500CD68D5 /* arch_utilities.cc */,
+ 162F64F9161C591500CD68D5 /* arch_utilities.h */,
+ B88FAE1D1166603300407530 /* byte_cursor.h */,
+ B88FB0D4116CEC0600407530 /* byte_cursor_unittest.cc */,
+ B8E8CA0C1156C854009E61B2 /* byteswap.h */,
+ 9BE650410B52F6D800611104 /* file_id.cc */,
+ 9BE650420B52F6D800611104 /* file_id.h */,
+ 9BDF186D0B1BB43700F8391B /* dump_syms.h */,
+ 08FB7796FE84155DC02AAC07 /* dump_syms.cc */,
+ 9BDF186E0B1BB43700F8391B /* dump_syms_tool.cc */,
+ B89E0E701166573700DD08C9 /* macho_dump.cc */,
+ 4D72CAF413DFBAC2006CABE3 /* md5.cc */,
+ EB06C7511FEBC515000214D9 /* path_helper.cc */,
+ EB06C7521FEBC516000214D9 /* path_helper.h */,
+ 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */,
+ 1AB674ADFE9D54B511CA2CBB /* Products */,
+ );
+ name = dump_syms;
+ sourceTree = "<group>";
+ };
+ 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB779EFE84155DC02AAC07 /* Foundation.framework */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+ 1AB674ADFE9D54B511CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ B8C5B5111166531A00D34F4E /* dump_syms */,
+ B89E0E741166575200DD08C9 /* macho_dump */,
+ B89E0E9511665A6400DD08C9 /* macho_reader_unittest */,
+ B88FAF2F116A591E00407530 /* dwarf2reader_cfi_unittest */,
+ B88FB007116BDE8300407530 /* stabs_reader_unittest */,
+ B88FB024116BDFFF00407530 /* libgtestmockall.a */,
+ B88FB0B9116CEABF00407530 /* module_unittest */,
+ B88FB0DF116CEEA800407530 /* dwarf2diehandler_unittest */,
+ B88FB0F2116CEF1900407530 /* dwarf_line_to_module_unittest */,
+ B88FB10A116CF07900407530 /* dwarf_cu_to_module_unittest */,
+ B88FB11F116CF27F00407530 /* dwarf_cfi_to_module_unittest */,
+ B88FB135116CF30F00407530 /* bytereader_unittest */,
+ B88FB14B116CF4A700407530 /* byte_cursor_unittest */,
+ B84A91F4116CF784006C210E /* stabs_to_module_unittest */,
+ D21F97D211CBA0F200239E38 /* test_assembler_unittest */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ B88FAE1C11665FFD00407530 /* MODULE */ = {
+ isa = PBXGroup;
+ children = (
+ B88FAE1E1166603300407530 /* dwarf_cu_to_module.cc */,
+ B88FAE1F1166603300407530 /* dwarf_cu_to_module.h */,
+ B88FB0D6116CEC0600407530 /* dwarf_cu_to_module_unittest.cc */,
+ B88FAE201166603300407530 /* dwarf_line_to_module.cc */,
+ B88FAE211166603300407530 /* dwarf_line_to_module.h */,
+ B88FB0D7116CEC0600407530 /* dwarf_line_to_module_unittest.cc */,
+ B88FAE221166603300407530 /* language.cc */,
+ B88FAE231166603300407530 /* language.h */,
+ B88FAE241166603300407530 /* module.cc */,
+ B88FAE251166603300407530 /* module.h */,
+ B88FB0B5116CEA8A00407530 /* module_unittest.cc */,
+ B88FAE331166673E00407530 /* dwarf_cfi_to_module.cc */,
+ B88FAE341166673E00407530 /* dwarf_cfi_to_module.h */,
+ B88FB0D5116CEC0600407530 /* dwarf_cfi_to_module_unittest.cc */,
+ B88FAE3C11666C8900407530 /* stabs_to_module.cc */,
+ B88FAE3D11666C8900407530 /* stabs_to_module.h */,
+ B88FB0D8116CEC0600407530 /* stabs_to_module_unittest.cc */,
+ );
+ name = MODULE;
+ sourceTree = "<group>";
+ };
+ B88FAE3811666A1700407530 /* STABS */ = {
+ isa = PBXGroup;
+ children = (
+ B88FB003116BDE7200407530 /* stabs_reader_unittest.cc */,
+ B88FAE3911666C6F00407530 /* stabs_reader.cc */,
+ B88FAE3A11666C6F00407530 /* stabs_reader.h */,
+ );
+ name = STABS;
+ sourceTree = "<group>";
+ };
+ B89E0E6C1166569700DD08C9 /* MACHO */ = {
+ isa = PBXGroup;
+ children = (
+ B89E0E6D1166571D00DD08C9 /* macho_reader_unittest.cc */,
+ B89E0E6E1166571D00DD08C9 /* macho_reader.cc */,
+ B89E0E6F1166571D00DD08C9 /* macho_reader.h */,
+ 557800890BE1F3AB00EC23E0 /* macho_utilities.cc */,
+ 5578008A0BE1F3AB00EC23E0 /* macho_utilities.h */,
+ 9BE650430B52F6D800611104 /* macho_id.cc */,
+ 9BE650440B52F6D800611104 /* macho_id.h */,
+ 9BE650450B52F6D800611104 /* macho_walker.cc */,
+ 9BE650460B52F6D800611104 /* macho_walker.h */,
+ );
+ name = MACHO;
+ sourceTree = "<group>";
+ };
+ B89E0E9D11665A9500DD08C9 /* TESTING */ = {
+ isa = PBXGroup;
+ children = (
+ B88FAE0911665B5700407530 /* test_assembler.cc */,
+ B88FAE0A11665B5700407530 /* test_assembler.h */,
+ B88FB0D9116CEC0600407530 /* test_assembler_unittest.cc */,
+ B89E0EA311665AEA00DD08C9 /* gmock-all.cc */,
+ B89E0E9F11665AC300DD08C9 /* gtest_main.cc */,
+ B89E0EA011665AC300DD08C9 /* gtest-all.cc */,
+ );
+ name = TESTING;
+ sourceTree = "<group>";
+ };
+ F9F5344B0E7C8FFC0012363F /* DWARF */ = {
+ isa = PBXGroup;
+ children = (
+ B88FAF34116A595400407530 /* cfi_assembler.cc */,
+ B88FAF35116A595400407530 /* cfi_assembler.h */,
+ F95B422E0E0E22D100DBDE83 /* dwarf2enums.h */,
+ F95B422F0E0E22D100DBDE83 /* dwarf2reader.cc */,
+ 4262382521AC496F00E5A3A6 /* dwarf_range_list_handler.cc */,
+ 4262382621AC496F00E5A3A6 /* dwarf_range_list_handler.h */,
+ F95B42300E0E22D100DBDE83 /* dwarf2reader.h */,
+ B88FAF36116A595400407530 /* dwarf2reader_cfi_unittest.cc */,
+ F95B422D0E0E22D100DBDE83 /* bytereader.h */,
+ F95B422B0E0E22D100DBDE83 /* bytereader-inl.h */,
+ F95B422C0E0E22D100DBDE83 /* bytereader.cc */,
+ B88FB0DA116CEC5800407530 /* bytereader_unittest.cc */,
+ F95B42310E0E22D100DBDE83 /* line_state_machine.h */,
+ B88FAE1711665FE400407530 /* dwarf2diehandler.cc */,
+ B88FAE1811665FE400407530 /* dwarf2diehandler.h */,
+ B88FB0DB116CEC5800407530 /* dwarf2diehandler_unittest.cc */,
+ 8BCAAA4A1CE3A7980046090B /* elf_reader.cc */,
+ 8BCAAA4B1CE3A7980046090B /* elf_reader.h */,
+ );
+ name = DWARF;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ B88FB020116BDFFF00407530 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ B84A91F3116CF784006C210E /* stabs_to_module_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B84A9202116CF7F0006C210E /* Build configuration list for PBXNativeTarget "stabs_to_module_unittest" */;
+ buildPhases = (
+ B84A91F1116CF784006C210E /* Sources */,
+ B84A91F2116CF784006C210E /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B84A91FA116CF796006C210E /* PBXTargetDependency */,
+ );
+ name = stabs_to_module_unittest;
+ productName = stabs_to_module_unittest;
+ productReference = B84A91F4116CF784006C210E /* stabs_to_module_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FAF2E116A591D00407530 /* dwarf2reader_cfi_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FAF33116A594800407530 /* Build configuration list for PBXNativeTarget "dwarf2reader_cfi_unittest" */;
+ buildPhases = (
+ B88FAF2C116A591D00407530 /* Sources */,
+ B88FAF2D116A591D00407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB03A116BE17E00407530 /* PBXTargetDependency */,
+ );
+ name = dwarf2reader_cfi_unittest;
+ productName = dwarf2reader_cfi_unittest;
+ productReference = B88FAF2F116A591E00407530 /* dwarf2reader_cfi_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FB006116BDE8300407530 /* stabs_reader_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB013116BDEC800407530 /* Build configuration list for PBXNativeTarget "stabs_reader_unittest" */;
+ buildPhases = (
+ B88FB004116BDE8300407530 /* Sources */,
+ B88FB005116BDE8300407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB088116CE6D800407530 /* PBXTargetDependency */,
+ );
+ name = stabs_reader_unittest;
+ productName = stabs_reader_unittest;
+ productReference = B88FB007116BDE8300407530 /* stabs_reader_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FB023116BDFFF00407530 /* gtestmockall */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB027116BE02900407530 /* Build configuration list for PBXNativeTarget "gtestmockall" */;
+ buildPhases = (
+ B88FB020116BDFFF00407530 /* Headers */,
+ B88FB021116BDFFF00407530 /* Sources */,
+ B88FB022116BDFFF00407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = gtestmockall;
+ productName = gtestmockall;
+ productReference = B88FB024116BDFFF00407530 /* libgtestmockall.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+ B88FB0B8116CEABF00407530 /* module_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB0BE116CEAFE00407530 /* Build configuration list for PBXNativeTarget "module_unittest" */;
+ buildPhases = (
+ B88FB0B6116CEABF00407530 /* Sources */,
+ B88FB0B7116CEABF00407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB0C0116CEAFE00407530 /* PBXTargetDependency */,
+ );
+ name = module_unittest;
+ productName = module_unittest;
+ productReference = B88FB0B9116CEABF00407530 /* module_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FB0DE116CEEA800407530 /* dwarf2diehandler_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB0E4116CEECE00407530 /* Build configuration list for PBXNativeTarget "dwarf2diehandler_unittest" */;
+ buildPhases = (
+ B88FB0DC116CEEA800407530 /* Sources */,
+ B88FB0DD116CEEA800407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB0E8116CEEDA00407530 /* PBXTargetDependency */,
+ );
+ name = dwarf2diehandler_unittest;
+ productName = dwarf2diehandler_unittest;
+ productReference = B88FB0DF116CEEA800407530 /* dwarf2diehandler_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FB0F1116CEF1900407530 /* dwarf_line_to_module_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB0F9116CEF9800407530 /* Build configuration list for PBXNativeTarget "dwarf_line_to_module_unittest" */;
+ buildPhases = (
+ B88FB0EF116CEF1900407530 /* Sources */,
+ B88FB0F0116CEF1900407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB0F8116CEF2E00407530 /* PBXTargetDependency */,
+ );
+ name = dwarf_line_to_module_unittest;
+ productName = dwarf_line_to_module_unittest;
+ productReference = B88FB0F2116CEF1900407530 /* dwarf_line_to_module_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FB109116CF07900407530 /* dwarf_cu_to_module_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB111116CF0A800407530 /* Build configuration list for PBXNativeTarget "dwarf_cu_to_module_unittest" */;
+ buildPhases = (
+ B88FB107116CF07900407530 /* Sources */,
+ B88FB108116CF07900407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB110116CF08A00407530 /* PBXTargetDependency */,
+ );
+ name = dwarf_cu_to_module_unittest;
+ productName = dwarf_cu_to_module_unittest;
+ productReference = B88FB10A116CF07900407530 /* dwarf_cu_to_module_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FB11E116CF27F00407530 /* dwarf_cfi_to_module_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB128116CF2C800407530 /* Build configuration list for PBXNativeTarget "dwarf_cfi_to_module_unittest" */;
+ buildPhases = (
+ B88FB11C116CF27F00407530 /* Sources */,
+ B88FB11D116CF27F00407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB125116CF29E00407530 /* PBXTargetDependency */,
+ );
+ name = dwarf_cfi_to_module_unittest;
+ productName = dwarf_cfi_to_module_unittest;
+ productReference = B88FB11F116CF27F00407530 /* dwarf_cfi_to_module_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FB134116CF30F00407530 /* bytereader_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB13A116CF33400407530 /* Build configuration list for PBXNativeTarget "bytereader_unittest" */;
+ buildPhases = (
+ B88FB132116CF30F00407530 /* Sources */,
+ B88FB133116CF30F00407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB13C116CF35C00407530 /* PBXTargetDependency */,
+ );
+ name = bytereader_unittest;
+ productName = bytereader_unittest;
+ productReference = B88FB135116CF30F00407530 /* bytereader_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FB14A116CF4A700407530 /* byte_cursor_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB159116CF4F900407530 /* Build configuration list for PBXNativeTarget "byte_cursor_unittest" */;
+ buildPhases = (
+ B88FB148116CF4A700407530 /* Sources */,
+ B88FB149116CF4A700407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB151116CF4C100407530 /* PBXTargetDependency */,
+ );
+ name = byte_cursor_unittest;
+ productName = byte_cursor_unittest;
+ productReference = B88FB14B116CF4A700407530 /* byte_cursor_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B89E0E731166575200DD08C9 /* macho_dump */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B89E0E7F116657A100DD08C9 /* Build configuration list for PBXNativeTarget "macho_dump" */;
+ buildPhases = (
+ B89E0E711166575200DD08C9 /* Sources */,
+ B89E0E721166575200DD08C9 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = macho_dump;
+ productName = macho_dump;
+ productReference = B89E0E741166575200DD08C9 /* macho_dump */;
+ productType = "com.apple.product-type.tool";
+ };
+ B89E0E9411665A6400DD08C9 /* macho_reader_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B89E0E9E11665A9600DD08C9 /* Build configuration list for PBXNativeTarget "macho_reader_unittest" */;
+ buildPhases = (
+ B89E0E9211665A6400DD08C9 /* Sources */,
+ B89E0E9311665A6400DD08C9 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB090116CE71000407530 /* PBXTargetDependency */,
+ );
+ name = macho_reader_unittest;
+ productName = macho_reader_unittest;
+ productReference = B89E0E9511665A6400DD08C9 /* macho_reader_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B8C5B5101166531A00D34F4E /* dump_syms */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B8C5B5151166533900D34F4E /* Build configuration list for PBXNativeTarget "dump_syms" */;
+ buildPhases = (
+ B8C5B50E1166531A00D34F4E /* Sources */,
+ B8C5B50F1166531A00D34F4E /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = dump_syms;
+ productName = dump_syms;
+ productReference = B8C5B5111166531A00D34F4E /* dump_syms */;
+ productType = "com.apple.product-type.tool";
+ };
+ D21F97D111CBA0F200239E38 /* test_assembler_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = D21F97D611CBA11000239E38 /* Build configuration list for PBXNativeTarget "test_assembler_unittest" */;
+ buildPhases = (
+ D21F97CF11CBA0F200239E38 /* Sources */,
+ D21F97D011CBA0F200239E38 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = test_assembler_unittest;
+ productName = test_assembler_unittest;
+ productReference = D21F97D211CBA0F200239E38 /* test_assembler_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 08FB7793FE84155DC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ };
+ buildConfigurationList = 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "dump_syms" */;
+ compatibilityVersion = "Xcode 3.1";
+ developmentRegion = English;
+ hasScannedForEncodings = 1;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ );
+ mainGroup = 08FB7794FE84155DC02AAC07 /* dump_syms */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ B8C5B5101166531A00D34F4E /* dump_syms */,
+ B89E0E731166575200DD08C9 /* macho_dump */,
+ B88FB023116BDFFF00407530 /* gtestmockall */,
+ B88FB14A116CF4A700407530 /* byte_cursor_unittest */,
+ B89E0E9411665A6400DD08C9 /* macho_reader_unittest */,
+ B88FB006116BDE8300407530 /* stabs_reader_unittest */,
+ B88FB134116CF30F00407530 /* bytereader_unittest */,
+ B88FAF2E116A591D00407530 /* dwarf2reader_cfi_unittest */,
+ B88FB0DE116CEEA800407530 /* dwarf2diehandler_unittest */,
+ B88FB109116CF07900407530 /* dwarf_cu_to_module_unittest */,
+ B88FB0F1116CEF1900407530 /* dwarf_line_to_module_unittest */,
+ B88FB11E116CF27F00407530 /* dwarf_cfi_to_module_unittest */,
+ B84A91F3116CF784006C210E /* stabs_to_module_unittest */,
+ B88FB0B8116CEABF00407530 /* module_unittest */,
+ B88FAFC9116BDCAD00407530 /* all_unittests */,
+ D21F97D111CBA0F200239E38 /* test_assembler_unittest */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ B88FB094116CE73E00407530 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "set -eu\n\ncd $BUILT_PRODUCTS_DIR\npwd\n\n./byte_cursor_unittest\n./macho_reader_unittest\n./stabs_reader_unittest\n./bytereader_unittest\n./dwarf2reader_cfi_unittest\n./dwarf2diehandler_unittest\n./dwarf_cu_to_module_unittest\n./dwarf_line_to_module_unittest\n./dwarf_cfi_to_module_unittest\n./stabs_to_module_unittest\n./module_unittest\n./test_assembler_unittest\n\necho \"Expect two warnings from the following tests:\"\necho \" Errors.BadFileNumber\"\necho \" Errors.BadDirectoryNumber\"\necho \"The proper behavior of these tests is to print text that XCode confuses with compiler warnings.\"\n";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ B84A91F1116CF784006C210E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B84A91FB116CF7AF006C210E /* module.cc in Sources */,
+ B84A91FC116CF7AF006C210E /* stabs_to_module.cc in Sources */,
+ B84A91FD116CF7AF006C210E /* stabs_to_module_unittest.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FAF2C116A591D00407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FAF38116A595400407530 /* dwarf2reader_cfi_unittest.cc in Sources */,
+ B88FAF3F116A5A2E00407530 /* dwarf2reader.cc in Sources */,
+ 8BCAAA4D1CE3B1260046090B /* elf_reader.cc in Sources */,
+ B88FAF40116A5A2E00407530 /* bytereader.cc in Sources */,
+ B88FAF37116A595400407530 /* cfi_assembler.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB004116BDE8300407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB00F116BDEA700407530 /* stabs_reader_unittest.cc in Sources */,
+ B88FB010116BDEA700407530 /* stabs_reader.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB021116BDFFF00407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB028116BE03100407530 /* test_assembler.cc in Sources */,
+ B88FB029116BE03100407530 /* gmock-all.cc in Sources */,
+ B88FB02A116BE03100407530 /* gtest_main.cc in Sources */,
+ B88FB02B116BE03100407530 /* gtest-all.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB0B6116CEABF00407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB0BD116CEAE000407530 /* module_unittest.cc in Sources */,
+ B88FB0C4116CEB4100407530 /* module.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB0DC116CEEA800407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB0E5116CEED300407530 /* dwarf2diehandler.cc in Sources */,
+ B88FB0E6116CEED300407530 /* dwarf2diehandler_unittest.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB0EF116CEF1900407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB0FA116CF00E00407530 /* dwarf_line_to_module.cc in Sources */,
+ B88FB0FE116CF02400407530 /* module.cc in Sources */,
+ B88FB0FB116CF00E00407530 /* dwarf_line_to_module_unittest.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB107116CF07900407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB112116CF1F000407530 /* dwarf_cu_to_module.cc in Sources */,
+ B88FB113116CF1F000407530 /* dwarf_cu_to_module_unittest.cc in Sources */,
+ B88FB114116CF1F000407530 /* language.cc in Sources */,
+ B88FB115116CF1F000407530 /* module.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB11C116CF27F00407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB129116CF2DD00407530 /* module.cc in Sources */,
+ B88FB12A116CF2DD00407530 /* dwarf_cfi_to_module.cc in Sources */,
+ B88FB12B116CF2DD00407530 /* dwarf_cfi_to_module_unittest.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB132116CF30F00407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB13D116CF38300407530 /* cfi_assembler.cc in Sources */,
+ B88FB13E116CF38300407530 /* bytereader.cc in Sources */,
+ B88FB13F116CF38300407530 /* bytereader_unittest.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB148116CF4A700407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB152116CF4D300407530 /* byte_cursor_unittest.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B89E0E711166575200DD08C9 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 4247E63D2110D4B200482558 /* path_helper.cc in Sources */,
+ 162F6500161C5F2200CD68D5 /* arch_utilities.cc in Sources */,
+ B89E0E781166576C00DD08C9 /* macho_reader.cc in Sources */,
+ B89E0E7A1166576C00DD08C9 /* macho_dump.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B89E0E9211665A6400DD08C9 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B89E0E9911665A7200DD08C9 /* macho_reader_unittest.cc in Sources */,
+ B89E0E9A11665A7200DD08C9 /* macho_reader.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B8C5B50E1166531A00D34F4E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 4262382821AC49A000E5A3A6 /* dwarf_range_list_handler.h in Sources */,
+ 162F64FA161C591500CD68D5 /* arch_utilities.cc in Sources */,
+ B88FAE2C1166606200407530 /* macho_reader.cc in Sources */,
+ 8BCAAA4C1CE3A7980046090B /* elf_reader.cc in Sources */,
+ B8C5B5171166534700D34F4E /* dwarf2reader.cc in Sources */,
+ EB06C7531FEBC516000214D9 /* path_helper.cc in Sources */,
+ B8C5B5181166534700D34F4E /* bytereader.cc in Sources */,
+ B8C5B5191166534700D34F4E /* macho_utilities.cc in Sources */,
+ B8C5B51A1166534700D34F4E /* file_id.cc in Sources */,
+ B8C5B51B1166534700D34F4E /* macho_id.cc in Sources */,
+ B8C5B51C1166534700D34F4E /* macho_walker.cc in Sources */,
+ B8C5B51D1166534700D34F4E /* dump_syms.cc in Sources */,
+ B8C5B51E1166534700D34F4E /* dump_syms_tool.cc in Sources */,
+ B88FAE1911665FE400407530 /* dwarf2diehandler.cc in Sources */,
+ B88FAE261166603300407530 /* dwarf_cu_to_module.cc in Sources */,
+ B88FAE271166603300407530 /* dwarf_line_to_module.cc in Sources */,
+ 4262382721AC496F00E5A3A6 /* dwarf_range_list_handler.cc in Sources */,
+ B88FAE281166603300407530 /* language.cc in Sources */,
+ B88FAE291166603300407530 /* module.cc in Sources */,
+ B88FAE351166673E00407530 /* dwarf_cfi_to_module.cc in Sources */,
+ B88FAE3B11666C6F00407530 /* stabs_reader.cc in Sources */,
+ B88FAE3E11666C8900407530 /* stabs_to_module.cc in Sources */,
+ 4D72CAF513DFBAC2006CABE3 /* md5.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ D21F97CF11CBA0F200239E38 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D21F97E911CBA1FF00239E38 /* test_assembler.cc in Sources */,
+ D21F97D711CBA12300239E38 /* test_assembler_unittest.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 8B31051511F100CF00FCF3E4 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = D21F97D111CBA0F200239E38 /* test_assembler_unittest */;
+ targetProxy = 8B31051411F100CF00FCF3E4 /* PBXContainerItemProxy */;
+ };
+ B84A91FA116CF796006C210E /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B84A91F9116CF796006C210E /* PBXContainerItemProxy */;
+ };
+ B84A9201116CF7D2006C210E /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B84A91F3116CF784006C210E /* stabs_to_module_unittest */;
+ targetProxy = B84A9200116CF7D2006C210E /* PBXContainerItemProxy */;
+ };
+ B88FAFCF116BDD7000407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B89E0E9411665A6400DD08C9 /* macho_reader_unittest */;
+ targetProxy = B88FAFCE116BDD7000407530 /* PBXContainerItemProxy */;
+ };
+ B88FAFD1116BDD7000407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FAF2E116A591D00407530 /* dwarf2reader_cfi_unittest */;
+ targetProxy = B88FAFD0116BDD7000407530 /* PBXContainerItemProxy */;
+ };
+ B88FB01D116BDF9800407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB006116BDE8300407530 /* stabs_reader_unittest */;
+ targetProxy = B88FB01C116BDF9800407530 /* PBXContainerItemProxy */;
+ };
+ B88FB03A116BE17E00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB039116BE17E00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB088116CE6D800407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB087116CE6D800407530 /* PBXContainerItemProxy */;
+ };
+ B88FB090116CE71000407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB08F116CE71000407530 /* PBXContainerItemProxy */;
+ };
+ B88FB0C0116CEAFE00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB0BF116CEAFE00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB0C8116CEB4A00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB0B8116CEABF00407530 /* module_unittest */;
+ targetProxy = B88FB0C7116CEB4A00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB0E8116CEEDA00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB0E7116CEEDA00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB0F8116CEF2E00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB0F7116CEF2E00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB110116CF08A00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB10F116CF08A00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB125116CF29E00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB124116CF29E00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB13C116CF35C00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB13B116CF35C00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB151116CF4C100407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB150116CF4C100407530 /* PBXContainerItemProxy */;
+ };
+ B88FB15B116CF53E00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB14A116CF4A700407530 /* byte_cursor_unittest */;
+ targetProxy = B88FB15A116CF53E00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB15D116CF54B00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB11E116CF27F00407530 /* dwarf_cfi_to_module_unittest */;
+ targetProxy = B88FB15C116CF54B00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB15F116CF54B00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB0F1116CEF1900407530 /* dwarf_line_to_module_unittest */;
+ targetProxy = B88FB15E116CF54B00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB161116CF54B00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB109116CF07900407530 /* dwarf_cu_to_module_unittest */;
+ targetProxy = B88FB160116CF54B00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB165116CF54B00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB0DE116CEEA800407530 /* dwarf2diehandler_unittest */;
+ targetProxy = B88FB164116CF54B00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB167116CF54B00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB134116CF30F00407530 /* bytereader_unittest */;
+ targetProxy = B88FB166116CF54B00407530 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB927908733DD40010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 8B3102D411F0D60300FCF3E4 /* BreakpadDebug.xcconfig */;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
+ HEADER_SEARCH_PATHS = (
+ ../../..,
+ ../../../common/mac/include/,
+ ../../../third_party/musl/include/,
+ );
+ };
+ name = Debug;
+ };
+ 1DEB927A08733DD40010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 8B3102D511F0D60300FCF3E4 /* BreakpadRelease.xcconfig */;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
+ HEADER_SEARCH_PATHS = (
+ ../../..,
+ ../../../common/mac/include/,
+ ../../../third_party/musl/include/,
+ );
+ };
+ name = Release;
+ };
+ B84A91F6116CF784006C210E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = stabs_to_module_unittest;
+ };
+ name = Debug;
+ };
+ B84A91F7116CF784006C210E /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = stabs_to_module_unittest;
+ };
+ name = Release;
+ };
+ B88FAF31116A591F00407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
+ PRODUCT_NAME = dwarf2reader_cfi_unittest;
+ };
+ name = Debug;
+ };
+ B88FAF32116A591F00407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
+ PRODUCT_NAME = dwarf2reader_cfi_unittest;
+ };
+ name = Release;
+ };
+ B88FAFCA116BDCAD00407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = all_unittests;
+ };
+ name = Debug;
+ };
+ B88FAFCB116BDCAD00407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = all_unittests;
+ };
+ name = Release;
+ };
+ B88FB009116BDE8400407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = stabs_reader_unittest;
+ };
+ name = Debug;
+ };
+ B88FB00A116BDE8400407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = stabs_reader_unittest;
+ };
+ name = Release;
+ };
+ B88FB025116BE00100407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = gtestmockall;
+ };
+ name = Debug;
+ };
+ B88FB026116BE00100407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = gtestmockall;
+ };
+ name = Release;
+ };
+ B88FB0BB116CEAC000407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = module_unittest;
+ };
+ name = Debug;
+ };
+ B88FB0BC116CEAC000407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = module_unittest;
+ };
+ name = Release;
+ };
+ B88FB0E1116CEEA800407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = dwarf2diehandler_unittest;
+ };
+ name = Debug;
+ };
+ B88FB0E2116CEEA800407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = dwarf2diehandler_unittest;
+ };
+ name = Release;
+ };
+ B88FB0F4116CEF1900407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = dwarf_line_to_module_unittest;
+ };
+ name = Debug;
+ };
+ B88FB0F5116CEF1900407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = dwarf_line_to_module_unittest;
+ };
+ name = Release;
+ };
+ B88FB10C116CF07A00407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = dwarf_cu_to_module_unittest;
+ };
+ name = Debug;
+ };
+ B88FB10D116CF07A00407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = dwarf_cu_to_module_unittest;
+ };
+ name = Release;
+ };
+ B88FB121116CF28000407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = dwarf_cfi_to_module_unittest;
+ };
+ name = Debug;
+ };
+ B88FB122116CF28000407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = dwarf_cfi_to_module_unittest;
+ };
+ name = Release;
+ };
+ B88FB137116CF30F00407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = bytereader_unittest;
+ };
+ name = Debug;
+ };
+ B88FB138116CF30F00407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = bytereader_unittest;
+ };
+ name = Release;
+ };
+ B88FB14D116CF4A800407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ );
+ PRODUCT_NAME = byte_cursor_unittest;
+ };
+ name = Debug;
+ };
+ B88FB14E116CF4A800407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ );
+ PRODUCT_NAME = byte_cursor_unittest;
+ };
+ name = Release;
+ };
+ B89E0E761166575300DD08C9 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = macho_dump;
+ };
+ name = Debug;
+ };
+ B89E0E771166575300DD08C9 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = macho_dump;
+ };
+ name = Release;
+ };
+ B89E0E9711665A6400DD08C9 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ );
+ PRODUCT_NAME = macho_reader_unittest;
+ };
+ name = Debug;
+ };
+ B89E0E9811665A6400DD08C9 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ );
+ PRODUCT_NAME = macho_reader_unittest;
+ };
+ name = Release;
+ };
+ B8C5B5131166531B00D34F4E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
+ GCC_VERSION = "";
+ PRODUCT_NAME = dump_syms;
+ };
+ name = Debug;
+ };
+ B8C5B5141166531B00D34F4E /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
+ GCC_VERSION = "";
+ PRODUCT_NAME = dump_syms;
+ };
+ name = Release;
+ };
+ D21F97D411CBA0F200239E38 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ );
+ PRODUCT_NAME = test_assembler_unittest;
+ };
+ name = Debug;
+ };
+ D21F97D511CBA0F200239E38 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ );
+ PRODUCT_NAME = test_assembler_unittest;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "dump_syms" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB927908733DD40010E9CD /* Debug */,
+ 1DEB927A08733DD40010E9CD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B84A9202116CF7F0006C210E /* Build configuration list for PBXNativeTarget "stabs_to_module_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B84A91F6116CF784006C210E /* Debug */,
+ B84A91F7116CF784006C210E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FAF33116A594800407530 /* Build configuration list for PBXNativeTarget "dwarf2reader_cfi_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FAF31116A591F00407530 /* Debug */,
+ B88FAF32116A591F00407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FAFCC116BDCCC00407530 /* Build configuration list for PBXAggregateTarget "all_unittests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FAFCA116BDCAD00407530 /* Debug */,
+ B88FAFCB116BDCAD00407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB013116BDEC800407530 /* Build configuration list for PBXNativeTarget "stabs_reader_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB009116BDE8400407530 /* Debug */,
+ B88FB00A116BDE8400407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB027116BE02900407530 /* Build configuration list for PBXNativeTarget "gtestmockall" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB025116BE00100407530 /* Debug */,
+ B88FB026116BE00100407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB0BE116CEAFE00407530 /* Build configuration list for PBXNativeTarget "module_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB0BB116CEAC000407530 /* Debug */,
+ B88FB0BC116CEAC000407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB0E4116CEECE00407530 /* Build configuration list for PBXNativeTarget "dwarf2diehandler_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB0E1116CEEA800407530 /* Debug */,
+ B88FB0E2116CEEA800407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB0F9116CEF9800407530 /* Build configuration list for PBXNativeTarget "dwarf_line_to_module_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB0F4116CEF1900407530 /* Debug */,
+ B88FB0F5116CEF1900407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB111116CF0A800407530 /* Build configuration list for PBXNativeTarget "dwarf_cu_to_module_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB10C116CF07A00407530 /* Debug */,
+ B88FB10D116CF07A00407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB128116CF2C800407530 /* Build configuration list for PBXNativeTarget "dwarf_cfi_to_module_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB121116CF28000407530 /* Debug */,
+ B88FB122116CF28000407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB13A116CF33400407530 /* Build configuration list for PBXNativeTarget "bytereader_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB137116CF30F00407530 /* Debug */,
+ B88FB138116CF30F00407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB159116CF4F900407530 /* Build configuration list for PBXNativeTarget "byte_cursor_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB14D116CF4A800407530 /* Debug */,
+ B88FB14E116CF4A800407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B89E0E7F116657A100DD08C9 /* Build configuration list for PBXNativeTarget "macho_dump" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B89E0E761166575300DD08C9 /* Debug */,
+ B89E0E771166575300DD08C9 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B89E0E9E11665A9600DD08C9 /* Build configuration list for PBXNativeTarget "macho_reader_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B89E0E9711665A6400DD08C9 /* Debug */,
+ B89E0E9811665A6400DD08C9 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B8C5B5151166533900D34F4E /* Build configuration list for PBXNativeTarget "dump_syms" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B8C5B5131166531B00D34F4E /* Debug */,
+ B8C5B5141166531B00D34F4E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ D21F97D611CBA11000239E38 /* Build configuration list for PBXNativeTarget "test_assembler_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ D21F97D411CBA0F200239E38 /* Debug */,
+ D21F97D511CBA0F200239E38 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc b/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc
new file mode 100644
index 0000000000..6f68457b4c
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc
@@ -0,0 +1,264 @@
+// -*- mode: c++ -*-
+
+// Copyright (c) 2011, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// dump_syms_tool.cc: Command line tool that uses the DumpSymbols class.
+// TODO(waylonis): accept stdin
+
+#include <mach-o/arch.h>
+#include <unistd.h>
+
+#include <algorithm>
+#include <iostream>
+#include <vector>
+
+#include "common/mac/dump_syms.h"
+#include "common/mac/arch_utilities.h"
+#include "common/mac/macho_utilities.h"
+#include "common/scoped_ptr.h"
+
+using google_breakpad::DumpSymbols;
+using google_breakpad::Module;
+using google_breakpad::scoped_ptr;
+using std::vector;
+
+struct Options {
+ Options()
+ : srcPath(), dsymPath(), arch(), header_only(false),
+ cfi(true), handle_inter_cu_refs(true) {}
+
+ string srcPath;
+ string dsymPath;
+ const NXArchInfo *arch;
+ bool header_only;
+ bool cfi;
+ bool handle_inter_cu_refs;
+};
+
+static bool StackFrameEntryComparator(const Module::StackFrameEntry* a,
+ const Module::StackFrameEntry* b) {
+ return a->address < b->address;
+}
+
+// Copy the CFI data from |from_module| into |to_module|, for any non-
+// overlapping ranges.
+static void CopyCFIDataBetweenModules(Module* to_module,
+ const Module* from_module) {
+ typedef vector<Module::StackFrameEntry*>::const_iterator Iterator;
+
+ // Get the CFI data from both the source and destination modules and ensure
+ // it is sorted by start address.
+ vector<Module::StackFrameEntry*> from_data;
+ from_module->GetStackFrameEntries(&from_data);
+ std::sort(from_data.begin(), from_data.end(), &StackFrameEntryComparator);
+
+ vector<Module::StackFrameEntry*> to_data;
+ to_module->GetStackFrameEntries(&to_data);
+ std::sort(to_data.begin(), to_data.end(), &StackFrameEntryComparator);
+
+ Iterator to_it = to_data.begin();
+
+ for (Iterator it = from_data.begin(); it != from_data.end(); ++it) {
+ Module::StackFrameEntry* from_entry = *it;
+ Module::Address from_entry_end = from_entry->address + from_entry->size;
+
+ // Find the first CFI record in the |to_module| that does not have an
+ // address less than the entry to be copied.
+ while (to_it != to_data.end()) {
+ if (from_entry->address > (*to_it)->address)
+ ++to_it;
+ else
+ break;
+ }
+
+ // If the entry does not overlap, then it is safe to copy to |to_module|.
+ if (to_it == to_data.end() || (from_entry->address < (*to_it)->address &&
+ from_entry_end < (*to_it)->address)) {
+ to_module->AddStackFrameEntry(new Module::StackFrameEntry(*from_entry));
+ }
+ }
+}
+
+static bool Start(const Options &options) {
+ SymbolData symbol_data = options.cfi ? ALL_SYMBOL_DATA : NO_CFI;
+ DumpSymbols dump_symbols(symbol_data, options.handle_inter_cu_refs);
+
+ // For x86_64 binaries, the CFI data is in the __TEXT,__eh_frame of the
+ // Mach-O file, which is not copied into the dSYM. Whereas in i386, the CFI
+ // data is in the __DWARF,__debug_frame section, which is moved into the
+ // dSYM. Therefore, to get x86_64 CFI data, dump_syms needs to look at both
+ // the dSYM and the Mach-O file. If both paths are present and CFI was
+ // requested, then consider the Module as "split" and dump all the debug data
+ // from the primary debug info file, the dSYM, and then dump additional CFI
+ // data from the source Mach-O file.
+ bool split_module =
+ !options.dsymPath.empty() && !options.srcPath.empty() && options.cfi;
+ const string& primary_file =
+ split_module ? options.dsymPath : options.srcPath;
+
+ if (!dump_symbols.Read(primary_file))
+ return false;
+
+ if (options.arch) {
+ if (!dump_symbols.SetArchitecture(options.arch->cputype,
+ options.arch->cpusubtype)) {
+ fprintf(stderr, "%s: no architecture '%s' is present in file.\n",
+ primary_file.c_str(), options.arch->name);
+ size_t available_size;
+ const SuperFatArch *available =
+ dump_symbols.AvailableArchitectures(&available_size);
+ if (available_size == 1)
+ fprintf(stderr, "the file's architecture is: ");
+ else
+ fprintf(stderr, "architectures present in the file are:\n");
+ for (size_t i = 0; i < available_size; i++) {
+ const SuperFatArch *arch = &available[i];
+ const NXArchInfo *arch_info =
+ google_breakpad::BreakpadGetArchInfoFromCpuType(
+ arch->cputype, arch->cpusubtype);
+ if (arch_info)
+ fprintf(stderr, "%s (%s)\n", arch_info->name, arch_info->description);
+ else
+ fprintf(stderr, "unrecognized cpu type 0x%x, subtype 0x%x\n",
+ arch->cputype, arch->cpusubtype);
+ }
+ return false;
+ }
+ }
+
+ if (options.header_only)
+ return dump_symbols.WriteSymbolFileHeader(std::cout);
+
+ // Read the primary file into a Breakpad Module.
+ Module* module = NULL;
+ if (!dump_symbols.ReadSymbolData(&module))
+ return false;
+ scoped_ptr<Module> scoped_module(module);
+
+ // If this is a split module, read the secondary Mach-O file, from which the
+ // CFI data will be extracted.
+ if (split_module && primary_file == options.dsymPath) {
+ if (!dump_symbols.Read(options.srcPath))
+ return false;
+
+ Module* cfi_module = NULL;
+ if (!dump_symbols.ReadSymbolData(&cfi_module))
+ return false;
+ scoped_ptr<Module> scoped_cfi_module(cfi_module);
+
+ // Ensure that the modules are for the same debug code file.
+ if (cfi_module->name() != module->name() ||
+ cfi_module->os() != module->os() ||
+ cfi_module->architecture() != module->architecture() ||
+ cfi_module->identifier() != module->identifier()) {
+ fprintf(stderr, "Cannot generate a symbol file from split sources that do"
+ " not match.\n");
+ return false;
+ }
+
+ CopyCFIDataBetweenModules(module, cfi_module);
+ }
+
+ return module->Write(std::cout, symbol_data);
+}
+
+//=============================================================================
+static void Usage(int argc, const char *argv[]) {
+ fprintf(stderr, "Output a Breakpad symbol file from a Mach-o file.\n");
+ fprintf(stderr, "Usage: %s [-a ARCHITECTURE] [-c] [-g dSYM path] "
+ "<Mach-o file>\n", argv[0]);
+ fprintf(stderr, "\t-i: Output module header information only.\n");
+ fprintf(stderr, "\t-a: Architecture type [default: native, or whatever is\n");
+ fprintf(stderr, "\t in the file, if it contains only one architecture]\n");
+ fprintf(stderr, "\t-g: Debug symbol file (dSYM) to dump in addition to the "
+ "Mach-o file\n");
+ fprintf(stderr, "\t-c: Do not generate CFI section\n");
+ fprintf(stderr, "\t-r: Do not handle inter-compilation unit references\n");
+ fprintf(stderr, "\t-h: Usage\n");
+ fprintf(stderr, "\t-?: Usage\n");
+}
+
+//=============================================================================
+static void SetupOptions(int argc, const char *argv[], Options *options) {
+ extern int optind;
+ signed char ch;
+
+ while ((ch = getopt(argc, (char * const *)argv, "ia:g:chr?")) != -1) {
+ switch (ch) {
+ case 'i':
+ options->header_only = true;
+ break;
+ case 'a': {
+ const NXArchInfo *arch_info =
+ google_breakpad::BreakpadGetArchInfoFromName(optarg);
+ if (!arch_info) {
+ fprintf(stderr, "%s: Invalid architecture: %s\n", argv[0], optarg);
+ Usage(argc, argv);
+ exit(1);
+ }
+ options->arch = arch_info;
+ break;
+ }
+ case 'g':
+ options->dsymPath = optarg;
+ break;
+ case 'c':
+ options->cfi = false;
+ break;
+ case 'r':
+ options->handle_inter_cu_refs = false;
+ break;
+ case '?':
+ case 'h':
+ Usage(argc, argv);
+ exit(0);
+ break;
+ }
+ }
+
+ if ((argc - optind) != 1) {
+ fprintf(stderr, "Must specify Mach-o file\n");
+ Usage(argc, argv);
+ exit(1);
+ }
+
+ options->srcPath = argv[optind];
+}
+
+//=============================================================================
+int main (int argc, const char * argv[]) {
+ Options options;
+ bool result;
+
+ SetupOptions(argc, argv, &options);
+ result = Start(options);
+
+ return !result;
+}
diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/macho_dump.cc b/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/macho_dump.cc
new file mode 100644
index 0000000000..6e784ca709
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/macho_dump.cc
@@ -0,0 +1,203 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Original author: Jim Blandy <jimb@mozilla.com> <jimb@red-bean.com>
+
+// macho_dump.cc: Dump the contents of a Mach-O file. This is mostly
+// a test program for the Mach_O::FatReader and Mach_O::Reader classes.
+
+#include <errno.h>
+#include <fcntl.h>
+#include <mach-o/arch.h>
+#include <sys/mman.h>
+#include <stdint.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include "common/byte_cursor.h"
+#include "common/mac/arch_utilities.h"
+#include "common/mac/macho_reader.h"
+#include "common/path_helper.h"
+
+using google_breakpad::ByteBuffer;
+using std::ostringstream;
+using std::string;
+using std::vector;
+
+namespace {
+namespace mach_o = google_breakpad::mach_o;
+
+string program_name;
+
+int check_syscall(int result, const char *operation, const char *filename) {
+ if (result < 0) {
+ fprintf(stderr, "%s: %s '%s': %s\n",
+ program_name.c_str(), operation,
+ filename, strerror(errno));
+ exit(1);
+ }
+ return result;
+}
+
+class DumpSection: public mach_o::Reader::SectionHandler {
+ public:
+ DumpSection() : index_(0) { }
+ bool HandleSection(const mach_o::Section &section) {
+ printf(" section %d '%s' in segment '%s'\n"
+ " address: 0x%llx\n"
+ " alignment: 1 << %d B\n"
+ " flags: %d\n"
+ " size: %ld\n",
+ index_++, section.section_name.c_str(), section.segment_name.c_str(),
+ section.address, section.align,
+ mach_o::SectionFlags(section.flags),
+ section.contents.Size());
+ return true;
+ }
+
+ private:
+ int index_;
+};
+
+class DumpCommand: public mach_o::Reader::LoadCommandHandler {
+ public:
+ DumpCommand(mach_o::Reader *reader) : reader_(reader), index_(0) { }
+ bool UnknownCommand(mach_o::LoadCommandType type,
+ const ByteBuffer &contents) {
+ printf(" load command %d: %d", index_++, type);
+ return true;
+ }
+ bool SegmentCommand(const mach_o::Segment &segment) {
+ printf(" load command %d: %s-bit segment '%s'\n"
+ " address: 0x%llx\n"
+ " memory size: 0x%llx\n"
+ " maximum protection: 0x%x\n"
+ " initial protection: 0x%x\n"
+ " flags: %d\n"
+ " section_list size: %ld B\n",
+ index_++, (segment.bits_64 ? "64" : "32"), segment.name.c_str(),
+ segment.vmaddr, segment.vmsize, segment.maxprot,
+ segment.initprot, mach_o::SegmentFlags(segment.flags),
+ segment.section_list.Size());
+
+ DumpSection dump_section;
+ return reader_->WalkSegmentSections(segment, &dump_section);
+ }
+ private:
+ mach_o::Reader *reader_;
+ int index_;
+};
+
+void DumpFile(const char *filename) {
+ int fd = check_syscall(open(filename, O_RDONLY), "opening", filename);
+ struct stat attributes;
+ check_syscall(fstat(fd, &attributes),
+ "getting file attributes for", filename);
+ void *mapping = mmap(NULL, attributes.st_size, PROT_READ,
+ MAP_PRIVATE, fd, 0);
+ close(fd);
+ check_syscall(mapping == (void *)-1 ? -1 : 0,
+ "mapping contents of", filename);
+
+ mach_o::FatReader::Reporter fat_reporter(filename);
+ mach_o::FatReader fat_reader(&fat_reporter);
+ if (!fat_reader.Read(reinterpret_cast<uint8_t *>(mapping),
+ attributes.st_size)) {
+ exit(1);
+ }
+ printf("filename: %s\n", filename);
+ size_t object_files_size;
+ const SuperFatArch* super_fat_object_files =
+ fat_reader.object_files(&object_files_size);
+ struct fat_arch *object_files;
+ if (!super_fat_object_files->ConvertToFatArch(object_files)) {
+ exit(1);
+ }
+ printf(" object file count: %ld\n", object_files_size);
+ for (size_t i = 0; i < object_files_size; i++) {
+ const struct fat_arch &file = object_files[i];
+ const NXArchInfo *fat_arch_info =
+ google_breakpad::BreakpadGetArchInfoFromCpuType(
+ file.cputype, file.cpusubtype);
+ printf("\n object file %ld:\n"
+ " fat header:\n:"
+ " CPU type: %s (%s)\n"
+ " size: %d B\n"
+ " alignment: 1<<%d B\n",
+ i, fat_arch_info->name, fat_arch_info->description,
+ file.size, file.align);
+
+ ostringstream name;
+ name << filename;
+ if (object_files_size > 1)
+ name << ", object file #" << i;
+ ByteBuffer file_contents(reinterpret_cast<uint8_t *>(mapping)
+ + file.offset, file.size);
+ mach_o::Reader::Reporter reporter(name.str());
+ mach_o::Reader reader(&reporter);
+ if (!reader.Read(file_contents, file.cputype, file.cpusubtype)) {
+ exit(1);
+ }
+
+ const NXArchInfo *macho_arch_info =
+ NXGetArchInfoFromCpuType(reader.cpu_type(),
+ reader.cpu_subtype());
+ printf(" Mach-O header:\n"
+ " word size: %s\n"
+ " CPU type: %s (%s)\n"
+ " File type: %d\n"
+ " flags: %x\n",
+ (reader.bits_64() ? "64 bits" : "32 bits"),
+ macho_arch_info->name, macho_arch_info->description,
+ reader.file_type(), reader.flags());
+
+ DumpCommand dump_command(&reader);
+ reader.WalkLoadCommands(&dump_command);
+ }
+ munmap(mapping, attributes.st_size);
+}
+
+} // namespace
+
+int main(int argc, char **argv) {
+ program_name = google_breakpad::BaseName(argv[0]);
+ if (argc == 1) {
+ fprintf(stderr, "Usage: %s FILE ...\n"
+ "Dump the contents of the Mach-O or fat binary files "
+ "'FILE ...'.\n", program_name.c_str());
+ }
+ for (int i = 1; i < argc; i++) {
+ DumpFile(argv[i]);
+ }
+}
diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/symupload/minidump_upload.m b/toolkit/crashreporter/google-breakpad/src/tools/mac/symupload/minidump_upload.m
new file mode 100644
index 0000000000..741ad765e5
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/symupload/minidump_upload.m
@@ -0,0 +1,135 @@
+// Copyright (c) 2006, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// minidump_upload.m: Upload a minidump to a HTTP server. The upload is sent as
+// a multipart/form-data POST request with the following parameters:
+// prod: the product name
+// ver: the product version
+// symbol_file: the breakpad format symbol file
+
+#import <unistd.h>
+
+#import <Foundation/Foundation.h>
+
+#import "common/mac/HTTPMultipartUpload.h"
+
+typedef struct {
+ NSString *minidumpPath;
+ NSString *uploadURLStr;
+ NSString *product;
+ NSString *version;
+ BOOL success;
+} Options;
+
+//=============================================================================
+static void Start(Options *options) {
+ NSURL *url = [NSURL URLWithString:options->uploadURLStr];
+ HTTPMultipartUpload *ul = [[HTTPMultipartUpload alloc] initWithURL:url];
+ NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
+
+ // Add parameters
+ [parameters setObject:options->product forKey:@"prod"];
+ [parameters setObject:options->version forKey:@"ver"];
+ [ul setParameters:parameters];
+
+ // Add file
+ [ul addFileAtPath:options->minidumpPath name:@"upload_file_minidump"];
+
+ // Send it
+ NSError *error = nil;
+ NSData *data = [ul send:&error];
+ NSString *result = [[NSString alloc] initWithData:data
+ encoding:NSUTF8StringEncoding];
+
+ NSLog(@"Send: %@", error ? [error description] : @"No Error");
+ NSLog(@"Response: %ld", (long)[[ul response] statusCode]);
+ NSLog(@"Result: %lu bytes\n%@", (unsigned long)[data length], result);
+
+ [result release];
+ [ul release];
+ options->success = !error;
+}
+
+//=============================================================================
+static void
+Usage(int argc, const char *argv[]) {
+ fprintf(stderr, "Submit minidump information.\n");
+ fprintf(stderr, "Usage: %s -p <product> -v <version> <minidump> "
+ "<upload-URL>\n", argv[0]);
+ fprintf(stderr, "<minidump> should be a minidump.\n");
+ fprintf(stderr, "<upload-URL> is the destination for the upload\n");
+
+ fprintf(stderr, "\t-h: Usage\n");
+ fprintf(stderr, "\t-?: Usage\n");
+}
+
+//=============================================================================
+static void
+SetupOptions(int argc, const char *argv[], Options *options) {
+ extern int optind;
+ char ch;
+
+ while ((ch = getopt(argc, (char * const *)argv, "p:v:h?")) != -1) {
+ switch (ch) {
+ case 'p':
+ options->product = [NSString stringWithUTF8String:optarg];
+ break;
+ case 'v':
+ options->version = [NSString stringWithUTF8String:optarg];
+ break;
+
+ default:
+ Usage(argc, argv);
+ exit(0);
+ break;
+ }
+ }
+
+ if ((argc - optind) != 2) {
+ fprintf(stderr, "%s: Missing symbols file and/or upload-URL\n", argv[0]);
+ Usage(argc, argv);
+ exit(1);
+ }
+
+ options->minidumpPath = [NSString stringWithUTF8String:argv[optind]];
+ options->uploadURLStr = [NSString stringWithUTF8String:argv[optind + 1]];
+}
+
+//=============================================================================
+int main (int argc, const char * argv[]) {
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ Options options;
+
+ bzero(&options, sizeof(Options));
+ SetupOptions(argc, argv, &options);
+ Start(&options);
+
+ [pool release];
+ return options.success ? 0 : 1;
+}
diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/symupload/symupload.m b/toolkit/crashreporter/google-breakpad/src/tools/mac/symupload/symupload.m
new file mode 100644
index 0000000000..a7cce7b00c
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/symupload/symupload.m
@@ -0,0 +1,204 @@
+// Copyright (c) 2006, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// symupload.m: Upload a symbol file to a HTTP server. The upload is sent as
+// a multipart/form-data POST request with the following parameters:
+// code_file: the basename of the module, e.g. "app"
+// debug_file: the basename of the debugging file, e.g. "app"
+// debug_identifier: the debug file's identifier, usually consisting of
+// the guid and age embedded in the pdb, e.g.
+// "11111111BBBB3333DDDD555555555555F"
+// os: the operating system that the module was built for
+// cpu: the CPU that the module was built for (x86 or ppc)
+// symbol_file: the contents of the breakpad-format symbol file
+
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <Foundation/Foundation.h>
+#include "HTTPMultipartUpload.h"
+
+typedef struct {
+ NSString *symbolsPath;
+ NSString *uploadURLStr;
+ BOOL success;
+} Options;
+
+//=============================================================================
+static NSArray *ModuleDataForSymbolFile(NSString *file) {
+ NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:file];
+ NSData *data = [fh readDataOfLength:1024];
+ NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
+ NSScanner *scanner = [NSScanner scannerWithString:str];
+ NSString *line;
+ NSMutableArray *parts = nil;
+ const int MODULE_ID_INDEX = 3;
+
+ if ([scanner scanUpToString:@"\n" intoString:&line]) {
+ parts = [[NSMutableArray alloc] init];
+ NSScanner *moduleInfoScanner = [NSScanner scannerWithString:line];
+ NSString *moduleInfo;
+ // Get everything BEFORE the module name. None of these properties
+ // can have spaces.
+ for (int i = 0; i <= MODULE_ID_INDEX; i++) {
+ [moduleInfoScanner scanUpToString:@" " intoString:&moduleInfo];
+ [parts addObject:moduleInfo];
+ }
+
+ // Now get the module name. This can have a space so we scan to
+ // the end of the line.
+ [moduleInfoScanner scanUpToString:@"\n" intoString:&moduleInfo];
+ [parts addObject:moduleInfo];
+ }
+
+ [str release];
+
+ return parts;
+}
+
+//=============================================================================
+static void Start(Options *options) {
+ NSURL *url = [NSURL URLWithString:options->uploadURLStr];
+ HTTPMultipartUpload *ul = [[HTTPMultipartUpload alloc] initWithURL:url];
+ NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
+ NSArray *moduleParts = ModuleDataForSymbolFile(options->symbolsPath);
+ NSMutableString *compactedID =
+ [NSMutableString stringWithString:[moduleParts objectAtIndex:3]];
+ [compactedID replaceOccurrencesOfString:@"-" withString:@"" options:0
+ range:NSMakeRange(0, [compactedID length])];
+
+ // Add parameters
+ [parameters setObject:compactedID forKey:@"debug_identifier"];
+
+ // MODULE <os> <cpu> <uuid> <module-name>
+ // 0 1 2 3 4
+ [parameters setObject:[moduleParts objectAtIndex:1] forKey:@"os"];
+ [parameters setObject:[moduleParts objectAtIndex:2] forKey:@"cpu"];
+ [parameters setObject:[moduleParts objectAtIndex:4] forKey:@"debug_file"];
+ [parameters setObject:[moduleParts objectAtIndex:4] forKey:@"code_file"];
+ [ul setParameters:parameters];
+
+ NSArray *keys = [parameters allKeys];
+ int count = [keys count];
+ for (int i = 0; i < count; ++i) {
+ NSString *key = [keys objectAtIndex:i];
+ NSString *value = [parameters objectForKey:key];
+ fprintf(stdout, "'%s' = '%s'\n", [key UTF8String],
+ [value UTF8String]);
+ }
+
+ // Add file
+ [ul addFileAtPath:options->symbolsPath name:@"symbol_file"];
+
+ // Send it
+ NSError *error = nil;
+ NSData *data = [ul send:&error];
+ NSString *result = [[NSString alloc] initWithData:data
+ encoding:NSUTF8StringEncoding];
+ int status = [[ul response] statusCode];
+
+ fprintf(stdout, "Send: %s\n", error ? [[error description] UTF8String] :
+ "No Error");
+ fprintf(stdout, "Response: %d\n", status);
+ fprintf(stdout, "Result: %lu bytes\n%s\n",
+ (unsigned long)[data length], [result UTF8String]);
+
+ [result release];
+ [ul release];
+ options->success = !error && status==200;
+}
+
+//=============================================================================
+static void
+Usage(int argc, const char *argv[]) {
+ fprintf(stderr, "Submit symbol information.\n");
+ fprintf(stderr, "Usage: %s <symbols> <upload-URL>\n", argv[0]);
+ fprintf(stderr, "<symbols> should be created by using the dump_syms tool.\n");
+ fprintf(stderr, "<upload-URL> is the destination for the upload\n");
+ fprintf(stderr, "\t-h: Usage\n");
+ fprintf(stderr, "\t-?: Usage\n");
+}
+
+//=============================================================================
+static void
+SetupOptions(int argc, const char *argv[], Options *options) {
+ extern int optind;
+ char ch;
+
+ while ((ch = getopt(argc, (char * const *)argv, "h?")) != -1) {
+ switch (ch) {
+ default:
+ Usage(argc, argv);
+ exit(0);
+ break;
+ }
+ }
+
+ if ((argc - optind) != 2) {
+ fprintf(stderr, "%s: Missing symbols file and/or upload-URL\n", argv[0]);
+ Usage(argc, argv);
+ exit(1);
+ }
+
+ int fd = open(argv[optind], O_RDONLY);
+ if (fd < 0) {
+ fprintf(stderr, "%s: %s: %s\n", argv[0], argv[optind], strerror(errno));
+ exit(1);
+ }
+
+ struct stat statbuf;
+ if (fstat(fd, &statbuf) < 0) {
+ fprintf(stderr, "%s: %s: %s\n", argv[0], argv[optind], strerror(errno));
+ close(fd);
+ exit(1);
+ }
+ close(fd);
+
+ if (!S_ISREG(statbuf.st_mode)) {
+ fprintf(stderr, "%s: %s: not a regular file\n", argv[0], argv[optind]);
+ exit(1);
+ }
+
+ options->symbolsPath = [NSString stringWithUTF8String:argv[optind]];
+ options->uploadURLStr = [NSString stringWithUTF8String:argv[optind + 1]];
+}
+
+//=============================================================================
+int main (int argc, const char * argv[]) {
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ Options options;
+
+ bzero(&options, sizeof(Options));
+ SetupOptions(argc, argv, &options);
+ Start(&options);
+
+ [pool release];
+ return options.success ? 0 : 1;
+}
diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj b/toolkit/crashreporter/google-breakpad/src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..a6a78dc5f3
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj
@@ -0,0 +1,254 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 8B31022C11F0CEBD00FCF3E4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; };
+ 8DD76F9A0486AA7600D96B5E /* symupload.m in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* symupload.m */; settings = {ATTRIBUTES = (); }; };
+ 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; };
+ 9BC1D49E0B37427A00F2A2B4 /* minidump_upload.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BD836000B0544BA0055103E /* minidump_upload.m */; };
+ 9BD8336A0B03E4080055103E /* HTTPMultipartUpload.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9BD833680B03E4080055103E /* HTTPMultipartUpload.h */; };
+ 9BD8336B0B03E4080055103E /* HTTPMultipartUpload.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BD833690B03E4080055103E /* HTTPMultipartUpload.m */; };
+ 9BD836180B0549F70055103E /* HTTPMultipartUpload.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BD833690B03E4080055103E /* HTTPMultipartUpload.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 8DD76F9E0486AA7600D96B5E /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ 9BD8336A0B03E4080055103E /* HTTPMultipartUpload.h in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 08FB7796FE84155DC02AAC07 /* symupload.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = symupload.m; sourceTree = "<group>"; };
+ 08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 8B31022B11F0CE6900FCF3E4 /* Breakpad.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Breakpad.xcconfig; path = ../../../common/mac/Breakpad.xcconfig; sourceTree = SOURCE_ROOT; };
+ 8B3102B611F0D5CE00FCF3E4 /* BreakpadDebug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadDebug.xcconfig; path = ../../../common/mac/BreakpadDebug.xcconfig; sourceTree = SOURCE_ROOT; };
+ 8B3102B711F0D5CE00FCF3E4 /* BreakpadRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadRelease.xcconfig; path = ../../../common/mac/BreakpadRelease.xcconfig; sourceTree = SOURCE_ROOT; };
+ 8DD76FA10486AA7600D96B5E /* symupload */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = symupload; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9BD833680B03E4080055103E /* HTTPMultipartUpload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTTPMultipartUpload.h; path = ../../../common/mac/HTTPMultipartUpload.h; sourceTree = "<group>"; };
+ 9BD833690B03E4080055103E /* HTTPMultipartUpload.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HTTPMultipartUpload.m; path = ../../../common/mac/HTTPMultipartUpload.m; sourceTree = "<group>"; };
+ 9BD835FB0B0544950055103E /* minidump_upload */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = minidump_upload; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9BD836000B0544BA0055103E /* minidump_upload.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = minidump_upload.m; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8DD76F9B0486AA7600D96B5E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9BD835F90B0544950055103E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8B31022C11F0CEBD00FCF3E4 /* Foundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 08FB7794FE84155DC02AAC07 /* symupload */ = {
+ isa = PBXGroup;
+ children = (
+ 8B31022B11F0CE6900FCF3E4 /* Breakpad.xcconfig */,
+ 8B3102B611F0D5CE00FCF3E4 /* BreakpadDebug.xcconfig */,
+ 8B3102B711F0D5CE00FCF3E4 /* BreakpadRelease.xcconfig */,
+ 08FB7796FE84155DC02AAC07 /* symupload.m */,
+ 9BD836000B0544BA0055103E /* minidump_upload.m */,
+ 9BD833680B03E4080055103E /* HTTPMultipartUpload.h */,
+ 9BD833690B03E4080055103E /* HTTPMultipartUpload.m */,
+ 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */,
+ 1AB674ADFE9D54B511CA2CBB /* Products */,
+ );
+ name = symupload;
+ sourceTree = "<group>";
+ };
+ 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB779EFE84155DC02AAC07 /* Foundation.framework */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+ 1AB674ADFE9D54B511CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8DD76FA10486AA7600D96B5E /* symupload */,
+ 9BD835FB0B0544950055103E /* minidump_upload */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8DD76F960486AA7600D96B5E /* symupload */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "symupload" */;
+ buildPhases = (
+ 8DD76F990486AA7600D96B5E /* Sources */,
+ 8DD76F9B0486AA7600D96B5E /* Frameworks */,
+ 8DD76F9E0486AA7600D96B5E /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = symupload;
+ productInstallPath = "$(HOME)/bin";
+ productName = symupload;
+ productReference = 8DD76FA10486AA7600D96B5E /* symupload */;
+ productType = "com.apple.product-type.tool";
+ };
+ 9BD835FA0B0544950055103E /* minidump_upload */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 9BD836020B0544BB0055103E /* Build configuration list for PBXNativeTarget "minidump_upload" */;
+ buildPhases = (
+ 9BD835F80B0544950055103E /* Sources */,
+ 9BD835F90B0544950055103E /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = minidump_upload;
+ productName = minidump_upload;
+ productReference = 9BD835FB0B0544950055103E /* minidump_upload */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 08FB7793FE84155DC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "symupload" */;
+ compatibilityVersion = "Xcode 3.1";
+ hasScannedForEncodings = 1;
+ mainGroup = 08FB7794FE84155DC02AAC07 /* symupload */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8DD76F960486AA7600D96B5E /* symupload */,
+ 9BD835FA0B0544950055103E /* minidump_upload */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8DD76F990486AA7600D96B5E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8DD76F9A0486AA7600D96B5E /* symupload.m in Sources */,
+ 9BD8336B0B03E4080055103E /* HTTPMultipartUpload.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9BD835F80B0544950055103E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9BD836180B0549F70055103E /* HTTPMultipartUpload.m in Sources */,
+ 9BC1D49E0B37427A00F2A2B4 /* minidump_upload.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB927508733DD40010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = ../../..;
+ PRODUCT_NAME = symupload;
+ };
+ name = Debug;
+ };
+ 1DEB927608733DD40010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = ../../..;
+ PRODUCT_NAME = symupload;
+ };
+ name = Release;
+ };
+ 1DEB927908733DD40010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 8B3102B611F0D5CE00FCF3E4 /* BreakpadDebug.xcconfig */;
+ buildSettings = {
+ };
+ name = Debug;
+ };
+ 1DEB927A08733DD40010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 8B3102B711F0D5CE00FCF3E4 /* BreakpadRelease.xcconfig */;
+ buildSettings = {
+ };
+ name = Release;
+ };
+ 9BD836030B0544BB0055103E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = ../../..;
+ PRODUCT_NAME = minidump_upload;
+ };
+ name = Debug;
+ };
+ 9BD836040B0544BB0055103E /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = ../../..;
+ PRODUCT_NAME = minidump_upload;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "symupload" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB927508733DD40010E9CD /* Debug */,
+ 1DEB927608733DD40010E9CD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "symupload" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB927908733DD40010E9CD /* Debug */,
+ 1DEB927A08733DD40010E9CD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 9BD836020B0544BB0055103E /* Build configuration list for PBXNativeTarget "minidump_upload" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 9BD836030B0544BB0055103E /* Debug */,
+ 9BD836040B0544BB0055103E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/tools_mac.gypi b/toolkit/crashreporter/google-breakpad/src/tools/mac/tools_mac.gypi
new file mode 100644
index 0000000000..7457573b4b
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/tools_mac.gypi
@@ -0,0 +1,116 @@
+# Copyright 2014 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+{
+ 'target_defaults': {
+ 'include_dirs': [
+ '../..',
+ ],
+ },
+ 'targets': [
+ {
+ 'target_name': 'crash_report',
+ 'type': 'executable',
+ 'sources': [
+ 'crash_report/crash_report.mm',
+ 'crash_report/on_demand_symbol_supplier.h',
+ 'crash_report/on_demand_symbol_supplier.mm',
+ ],
+ 'link_settings': {
+ 'libraries': [
+ '$(SDKROOT)/System/Library/Frameworks/Foundation.framework',
+ ],
+ },
+ 'dependencies': [
+ '../common/common.gyp:common',
+ '../processor/processor.gyp:processor',
+ ],
+ },
+ {
+ 'target_name': 'dump_syms',
+ 'type': 'executable',
+ 'sources': [
+ 'dump_syms/dump_syms_tool.cc',
+ ],
+ 'link_settings': {
+ 'libraries': [
+ '$(SDKROOT)/System/Library/Frameworks/Foundation.framework',
+ ],
+ },
+ 'dependencies': [
+ '../common/common.gyp:common',
+ ],
+ },
+ {
+ 'target_name': 'macho_dump',
+ 'type': 'executable',
+ 'sources': [
+ 'dump_syms/macho_dump.cc',
+ ],
+ 'dependencies': [
+ '../common/common.gyp:common',
+ ],
+ },
+ {
+ 'target_name': 'minidump_upload',
+ 'type': 'executable',
+ 'sources': [
+ 'symupload/minidump_upload.m',
+ ],
+ 'include_dirs': [
+ '../../common/mac',
+ ],
+ 'link_settings': {
+ 'libraries': [
+ '$(SDKROOT)/System/Library/Frameworks/Foundation.framework',
+ ],
+ },
+ 'dependencies': [
+ '../common/common.gyp:common',
+ ],
+ },
+ {
+ 'target_name': 'symupload',
+ 'type': 'executable',
+ 'sources': [
+ 'symupload/symupload.m',
+ ],
+ 'include_dirs': [
+ '../../common/mac',
+ ],
+ 'link_settings': {
+ 'libraries': [
+ '$(SDKROOT)/System/Library/Frameworks/Foundation.framework',
+ ],
+ },
+ 'dependencies': [
+ '../common/common.gyp:common',
+ ],
+ },
+ ],
+}
diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_constants.h b/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_constants.h
new file mode 100644
index 0000000000..e12e53e229
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_constants.h
@@ -0,0 +1,67 @@
+/* Copyright 2014, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <mach-o/arch.h>
+#include <mach-o/loader.h>
+#include <mach/machine.h>
+
+// Go/Cgo does not support #define constants, so turn them into symbols
+// that are reachable from Go.
+
+#ifndef CPU_TYPE_ARM64
+#define CPU_TYPE_ARM64 (CPU_TYPE_ARM | CPU_ARCH_ABI64)
+#endif
+
+#ifndef CPU_SUBTYPE_ARM64_ALL
+#define CPU_SUBTYPE_ARM64_ALL 0
+#endif
+
+#ifndef CPU_SUBTYPE_ARM64_E
+#define CPU_SUBTYPE_ARM64_E 2
+#endif
+
+const cpu_type_t kCPU_TYPE_ARM = CPU_TYPE_ARM;
+const cpu_type_t kCPU_TYPE_ARM64 = CPU_TYPE_ARM64;
+
+const cpu_subtype_t kCPU_SUBTYPE_ARM64_ALL = CPU_SUBTYPE_ARM64_ALL;
+const cpu_subtype_t kCPU_SUBTYPE_ARM64_E = CPU_SUBTYPE_ARM64_E;
+const cpu_subtype_t kCPU_SUBTYPE_ARM_V7S = CPU_SUBTYPE_ARM_V7S;
+
+const char* GetNXArchInfoName(cpu_type_t cpu_type, cpu_subtype_t cpu_subtype) {
+ const NXArchInfo* arch_info = NXGetArchInfoFromCpuType(cpu_type, cpu_subtype);
+ if (!arch_info)
+ return 0;
+ return arch_info->name;
+}
+
+const uint32_t kMachHeaderFtypeDylib = MH_DYLIB;
+const uint32_t kMachHeaderFtypeBundle = MH_BUNDLE;
+const uint32_t kMachHeaderFtypeExe = MH_EXECUTE;
+const uint32_t kMachHeaderFtypeDylinker = MH_DYLINKER;
diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_reader.go b/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_reader.go
new file mode 100644
index 0000000000..ed98fa60f4
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_reader.go
@@ -0,0 +1,69 @@
+/* Copyright 2014, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+package main
+
+import (
+ "debug/macho"
+)
+
+/*
+#include "arch_constants.h"
+*/
+import "C"
+
+// getArchStringFromHeader takes a MachO FileHeader and returns a string that
+// represents the CPU type and subtype.
+// This function is a Go version of src/common/mac/arch_utilities.cc:BreakpadGetArchInfoFromCpuType().
+func getArchStringFromHeader(header macho.FileHeader) string {
+ // TODO(rsesek): As of 10.9.4, OS X doesn't list these in /usr/include/mach/machine.h.
+ if header.Cpu == C.kCPU_TYPE_ARM64 && header.SubCpu == C.kCPU_SUBTYPE_ARM64_ALL {
+ return "arm64"
+ }
+ if header.Cpu == C.kCPU_TYPE_ARM64 && header.SubCpu == C.kCPU_SUBTYPE_ARM64_E {
+ return "arm64e"
+ }
+ if header.Cpu == C.kCPU_TYPE_ARM && header.SubCpu == C.kCPU_SUBTYPE_ARM_V7S {
+ return "armv7s"
+ }
+
+ cstr := C.GetNXArchInfoName(C.cpu_type_t(header.Cpu), C.cpu_subtype_t(header.SubCpu))
+ if cstr == nil {
+ return ""
+ }
+ return C.GoString(cstr)
+}
+
+const (
+ MachODylib macho.Type = C.kMachHeaderFtypeDylib
+ MachOBundle = C.kMachHeaderFtypeBundle
+ MachOExe = C.kMachHeaderFtypeExe
+ MachODylinker = C.kMachHeaderFtypeDylinker
+)
diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.go b/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.go
new file mode 100644
index 0000000000..05a7764abf
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.go
@@ -0,0 +1,432 @@
+/* Copyright 2014, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*
+Tool upload_system_symbols generates and uploads Breakpad symbol files for OS X system libraries.
+
+This tool shells out to the dump_syms and symupload Breakpad tools. In its default mode, this
+will find all dynamic libraries on the system, run dump_syms to create the Breakpad symbol files,
+and then upload them to Google's crash infrastructure.
+
+The tool can also be used to only dump libraries or upload from a directory. See -help for more
+information.
+
+Both i386 and x86_64 architectures will be dumped and uploaded.
+*/
+package main
+
+import (
+ "debug/macho"
+ "flag"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "log"
+ "os"
+ "os/exec"
+ "path"
+ "regexp"
+ "strings"
+ "sync"
+ "time"
+)
+
+var (
+ breakpadTools = flag.String("breakpad-tools", "out/Release/", "Path to the Breakpad tools directory, containing dump_syms and symupload.")
+ uploadOnlyPath = flag.String("upload-from", "", "Upload a directory of symbol files that has been dumped independently.")
+ dumpOnlyPath = flag.String("dump-to", "", "Dump the symbols to the specified directory, but do not upload them.")
+ systemRoot = flag.String("system-root", "", "Path to the root of the Mac OS X system whose symbols will be dumped.")
+ dumpArchitecture = flag.String("arch", "", "The CPU architecture for which symbols should be dumped. If not specified, dumps all architectures.")
+)
+
+var (
+ // pathsToScan are the subpaths in the systemRoot that should be scanned for shared libraries.
+ pathsToScan = []string{
+ "/System/Library/Components",
+ "/System/Library/Frameworks",
+ "/System/Library/PrivateFrameworks",
+ "/usr/lib",
+ }
+
+ // optionalPathsToScan is just like pathsToScan, but the paths are permitted to be absent.
+ optionalPathsToScan = []string{
+ // Gone in 10.15.
+ "/Library/QuickTime",
+ }
+
+ // uploadServers are the list of servers to which symbols should be uploaded.
+ uploadServers = []string{
+ "https://clients2.google.com/cr/symbol",
+ "https://clients2.google.com/cr/staging_symbol",
+ }
+
+ // blacklistRegexps match paths that should be excluded from dumping.
+ blacklistRegexps = []*regexp.Regexp{
+ regexp.MustCompile(`/System/Library/Frameworks/Python\.framework/`),
+ regexp.MustCompile(`/System/Library/Frameworks/Ruby\.framework/`),
+ regexp.MustCompile(`_profile\.dylib$`),
+ regexp.MustCompile(`_debug\.dylib$`),
+ regexp.MustCompile(`\.a$`),
+ regexp.MustCompile(`\.dat$`),
+ }
+)
+
+func main() {
+ flag.Parse()
+ log.SetFlags(0)
+
+ var uq *UploadQueue
+
+ if *uploadOnlyPath != "" {
+ // -upload-from specified, so handle that case early.
+ uq = StartUploadQueue()
+ uploadFromDirectory(*uploadOnlyPath, uq)
+ uq.Wait()
+ return
+ }
+
+ if *systemRoot == "" {
+ log.Fatal("Need a -system-root to dump symbols for")
+ }
+
+ if *dumpOnlyPath != "" {
+ // -dump-to specified, so make sure that the path is a directory.
+ if fi, err := os.Stat(*dumpOnlyPath); err != nil {
+ log.Fatalf("-dump-to location: %v", err)
+ } else if !fi.IsDir() {
+ log.Fatal("-dump-to location is not a directory")
+ }
+ }
+
+ dumpPath := *dumpOnlyPath
+ if *dumpOnlyPath == "" {
+ // If -dump-to was not specified, then run the upload pipeline and create
+ // a temporary dump output directory.
+ uq = StartUploadQueue()
+
+ if p, err := ioutil.TempDir("", "upload_system_symbols"); err != nil {
+ log.Fatalf("Failed to create temporary directory: %v", err)
+ } else {
+ dumpPath = p
+ defer os.RemoveAll(p)
+ }
+ }
+
+ dq := StartDumpQueue(*systemRoot, dumpPath, uq)
+ dq.Wait()
+ if uq != nil {
+ uq.Wait()
+ }
+}
+
+type WorkerPool struct {
+ wg sync.WaitGroup
+}
+
+// StartWorkerPool will launch numWorkers goroutines all running workerFunc.
+// When workerFunc exits, the goroutine will terminate.
+func StartWorkerPool(numWorkers int, workerFunc func()) *WorkerPool {
+ p := new(WorkerPool)
+ for i := 0; i < numWorkers; i++ {
+ p.wg.Add(1)
+ go func() {
+ workerFunc()
+ p.wg.Done()
+ }()
+ }
+ return p
+}
+
+// Wait for all the workers in the pool to complete the workerFunc.
+func (p *WorkerPool) Wait() {
+ p.wg.Wait()
+}
+
+type UploadQueue struct {
+ *WorkerPool
+ queue chan string
+}
+
+// StartUploadQueue creates a new worker pool and queue, to which paths to
+// Breakpad symbol files may be sent for uploading.
+func StartUploadQueue() *UploadQueue {
+ uq := &UploadQueue{
+ queue: make(chan string, 10),
+ }
+ uq.WorkerPool = StartWorkerPool(5, uq.worker)
+ return uq
+}
+
+// Upload enqueues the contents of filepath to be uploaded.
+func (uq *UploadQueue) Upload(filepath string) {
+ uq.queue <- filepath
+}
+
+// Done tells the queue that no more files need to be uploaded. This must be
+// called before WorkerPool.Wait.
+func (uq *UploadQueue) Done() {
+ close(uq.queue)
+}
+
+func (uq *UploadQueue) worker() {
+ symUpload := path.Join(*breakpadTools, "symupload")
+
+ for symfile := range uq.queue {
+ for _, server := range uploadServers {
+ for i := 0; i < 3; i++ { // Give each upload 3 attempts to succeed.
+ cmd := exec.Command(symUpload, symfile, server)
+ if output, err := cmd.Output(); err == nil {
+ // Success. No retry needed.
+ fmt.Printf("Uploaded %s to %s\n", symfile, server)
+ break
+ } else {
+ log.Printf("Error running symupload(%s, %s), attempt %d: %v: %s\n", symfile, server, i, err, output)
+ time.Sleep(1 * time.Second)
+ }
+ }
+ }
+ }
+}
+
+type DumpQueue struct {
+ *WorkerPool
+ dumpPath string
+ queue chan dumpRequest
+ uq *UploadQueue
+}
+
+type dumpRequest struct {
+ path string
+ arch string
+}
+
+// StartDumpQueue creates a new worker pool to find all the Mach-O libraries in
+// root and dump their symbols to dumpPath. If an UploadQueue is passed, the
+// path to the symbol file will be enqueued there, too.
+func StartDumpQueue(root, dumpPath string, uq *UploadQueue) *DumpQueue {
+ dq := &DumpQueue{
+ dumpPath: dumpPath,
+ queue: make(chan dumpRequest),
+ uq: uq,
+ }
+ dq.WorkerPool = StartWorkerPool(12, dq.worker)
+
+ findLibsInRoot(root, dq)
+
+ return dq
+}
+
+// DumpSymbols enqueues the filepath to have its symbols dumped in the specified
+// architecture.
+func (dq *DumpQueue) DumpSymbols(filepath string, arch string) {
+ dq.queue <- dumpRequest{
+ path: filepath,
+ arch: arch,
+ }
+}
+
+func (dq *DumpQueue) Wait() {
+ dq.WorkerPool.Wait()
+ if dq.uq != nil {
+ dq.uq.Done()
+ }
+}
+
+func (dq *DumpQueue) done() {
+ close(dq.queue)
+}
+
+func (dq *DumpQueue) worker() {
+ dumpSyms := path.Join(*breakpadTools, "dump_syms")
+
+ for req := range dq.queue {
+ filebase := path.Join(dq.dumpPath, strings.Replace(req.path, "/", "_", -1))
+ symfile := fmt.Sprintf("%s_%s.sym", filebase, req.arch)
+ f, err := os.Create(symfile)
+ if err != nil {
+ log.Fatalf("Error creating symbol file: %v", err)
+ }
+
+ cmd := exec.Command(dumpSyms, "-a", req.arch, req.path)
+ cmd.Stdout = f
+ err = cmd.Run()
+ f.Close()
+
+ if err != nil {
+ os.Remove(symfile)
+ log.Printf("Error running dump_syms(%s, %s): %v\n", req.arch, req.path, err)
+ } else if dq.uq != nil {
+ dq.uq.Upload(symfile)
+ }
+ }
+}
+
+// uploadFromDirectory handles the upload-only case and merely uploads all files in
+// a directory.
+func uploadFromDirectory(directory string, uq *UploadQueue) {
+ d, err := os.Open(directory)
+ if err != nil {
+ log.Fatalf("Could not open directory to upload: %v", err)
+ }
+ defer d.Close()
+
+ entries, err := d.Readdirnames(0)
+ if err != nil {
+ log.Fatalf("Could not read directory: %v", err)
+ }
+
+ for _, entry := range entries {
+ uq.Upload(path.Join(directory, entry))
+ }
+
+ uq.Done()
+}
+
+// findQueue is an implementation detail of the DumpQueue that finds all the
+// Mach-O files and their architectures.
+type findQueue struct {
+ *WorkerPool
+ queue chan string
+ dq *DumpQueue
+}
+
+// findLibsInRoot looks in all the pathsToScan in the root and manages the
+// interaction between findQueue and DumpQueue.
+func findLibsInRoot(root string, dq *DumpQueue) {
+ fq := &findQueue{
+ queue: make(chan string, 10),
+ dq: dq,
+ }
+ fq.WorkerPool = StartWorkerPool(12, fq.worker)
+
+ for _, p := range pathsToScan {
+ fq.findLibsInPath(path.Join(root, p), true)
+ }
+
+ for _, p := range optionalPathsToScan {
+ fq.findLibsInPath(path.Join(root, p), false)
+ }
+
+ close(fq.queue)
+ fq.Wait()
+ dq.done()
+}
+
+// findLibsInPath recursively walks the directory tree, sending file paths to
+// test for being Mach-O to the findQueue.
+func (fq *findQueue) findLibsInPath(loc string, mustExist bool) {
+ d, err := os.Open(loc)
+ if err != nil {
+ if !mustExist && os.IsNotExist(err) {
+ return
+ }
+ log.Fatalf("Could not open %s: %v", loc, err)
+ }
+ defer d.Close()
+
+ for {
+ fis, err := d.Readdir(100)
+ if err != nil && err != io.EOF {
+ log.Fatalf("Error reading directory %s: %v", loc, err)
+ }
+
+ for _, fi := range fis {
+ fp := path.Join(loc, fi.Name())
+ if fi.IsDir() {
+ fq.findLibsInPath(fp, true)
+ continue
+ } else if fi.Mode()&os.ModeSymlink != 0 {
+ continue
+ }
+
+ // Test the blacklist in the worker to not slow down this main loop.
+
+ fq.queue <- fp
+ }
+
+ if err == io.EOF {
+ break
+ }
+ }
+}
+
+func (fq *findQueue) worker() {
+ for fp := range fq.queue {
+ blacklisted := false
+ for _, re := range blacklistRegexps {
+ blacklisted = blacklisted || re.MatchString(fp)
+ }
+ if blacklisted {
+ continue
+ }
+
+ f, err := os.Open(fp)
+ if err != nil {
+ log.Printf("%s: %v", fp, err)
+ continue
+ }
+
+ fatFile, err := macho.NewFatFile(f)
+ if err == nil {
+ // The file is fat, so dump its architectures.
+ for _, fatArch := range fatFile.Arches {
+ fq.dumpMachOFile(fp, fatArch.File)
+ }
+ fatFile.Close()
+ } else if err == macho.ErrNotFat {
+ // The file isn't fat but may still be MachO.
+ thinFile, err := macho.NewFile(f)
+ if err != nil {
+ log.Printf("%s: %v", fp, err)
+ continue
+ }
+ fq.dumpMachOFile(fp, thinFile)
+ thinFile.Close()
+ } else {
+ f.Close()
+ }
+ }
+}
+
+func (fq *findQueue) dumpMachOFile(fp string, image *macho.File) {
+ if image.Type != MachODylib && image.Type != MachOBundle && image.Type != MachODylinker {
+ return
+ }
+
+ arch := getArchStringFromHeader(image.FileHeader)
+ if arch == "" {
+ // Don't know about this architecture type.
+ return
+ }
+
+ if (*dumpArchitecture != "" && *dumpArchitecture == arch) || *dumpArchitecture == "" {
+ fq.dq.DumpSymbols(fp, arch)
+ }
+}