mirror of
https://github.com/yuzu-emu/breakpad.git
synced 2024-11-27 20:04:15 +01:00
Remove tools/mac/crash_report
This is pretty rotted and unmaintained, and nobody seems to be using it. Bug: None Change-Id: I965393dd75d995d5c7d55bea6d9b256e89a7421b Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/4107469 Reviewed-by: Mark Mentovai <mark@chromium.org>
This commit is contained in:
parent
9acaa082c8
commit
33b8438986
@ -1,417 +0,0 @@
|
||||
// Copyright 2010 Google LLC
|
||||
//
|
||||
// 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 LLC 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), ×truct);
|
||||
char timestr[20];
|
||||
strftime(timestr, 20, "%Y-%m-%d %H:%M:%S", ×truct);
|
||||
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)",
|
||||
requesting_thread,
|
||||
process_state.crashed() ? "crashed" :
|
||||
"requested dump, did not crash");
|
||||
string requesting_thread_name = process_state.thread_names()->at(requesting_thread);
|
||||
if (!requesting_thread_name.empty()) {
|
||||
printf(" (name: %s)", requesting_thread_name.c_str());
|
||||
}
|
||||
printf("\n");
|
||||
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", thread_index);
|
||||
string thread_name = process_state.thread_names()->at(thread_index);
|
||||
if (!thread_name.empty()) {
|
||||
printf(" (name: %s)", thread_name.c_str());
|
||||
}
|
||||
printf("\n");
|
||||
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;
|
||||
}
|
@ -1,618 +0,0 @@
|
||||
// !$*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 */;
|
||||
}
|
@ -1,110 +0,0 @@
|
||||
// Copyright 2006 Google LLC
|
||||
//
|
||||
// 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 LLC 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__
|
@ -1,313 +0,0 @@
|
||||
// Copyright 2006 Google LLC
|
||||
//
|
||||
// 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 LLC 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user