aboutsummaryrefslogtreecommitdiff
path: root/externals/breakpad/src/tools/mac/symupload
diff options
context:
space:
mode:
Diffstat (limited to 'externals/breakpad/src/tools/mac/symupload')
-rw-r--r--externals/breakpad/src/tools/mac/symupload/symupload.mm474
-rw-r--r--externals/breakpad/src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj466
2 files changed, 940 insertions, 0 deletions
diff --git a/externals/breakpad/src/tools/mac/symupload/symupload.mm b/externals/breakpad/src/tools/mac/symupload/symupload.mm
new file mode 100644
index 0000000000..521b811f09
--- /dev/null
+++ b/externals/breakpad/src/tools/mac/symupload/symupload.mm
@@ -0,0 +1,474 @@
+// 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.
+
+// symupload.mm: Upload a symbol file to a HTTP server. The upload is sent as
+// a multipart/form-data POST request with the following parameters:
+// code_file: the basename of the module, e.g. "app"
+// debug_file: the basename of the debugging file, e.g. "app"
+// debug_identifier: the debug file's identifier, usually consisting of
+// the guid and age embedded in the pdb, e.g.
+// "11111111BBBB3333DDDD555555555555F"
+// os: the operating system that the module was built for
+// cpu: the CPU that the module was built for (x86 or ppc)
+// symbol_file: the contents of the breakpad-format symbol file
+
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <Foundation/Foundation.h>
+
+#include "HTTPMultipartUpload.h"
+#include "HTTPPutRequest.h"
+#include "SymbolCollectorClient.h"
+#include "common/mac/dump_syms.h"
+
+using google_breakpad::DumpSymbols;
+
+NSString* const kBreakpadSymbolType = @"BREAKPAD";
+NSString* const kMachOSymbolType = @"MACHO";
+NSString* const kDSYMSymbolType = @"DSYM";
+
+typedef enum { kSymUploadProtocolV1, kSymUploadProtocolV2 } SymUploadProtocol;
+
+typedef enum {
+ kResultSuccess = 0,
+ kResultFailure = 1,
+ kResultAlreadyExists = 2
+} Result;
+
+typedef struct {
+ NSString* symbolsPath;
+ NSString* uploadURLStr;
+ SymUploadProtocol symUploadProtocol;
+ NSString* apiKey;
+ BOOL force;
+ Result result;
+ NSString* type;
+ NSString* codeFile;
+ NSString* debugID;
+ NSString* productName;
+} Options;
+
+//=============================================================================
+static NSArray* ModuleDataForSymbolFile(NSString* file) {
+ NSFileHandle* fh = [NSFileHandle fileHandleForReadingAtPath:file];
+ NSData* data = [fh readDataOfLength:1024];
+ NSString* str = [[NSString alloc] initWithData:data
+ encoding:NSUTF8StringEncoding];
+ NSScanner* scanner = [NSScanner scannerWithString:str];
+ NSString* line;
+ NSMutableArray* parts = nil;
+ const int MODULE_ID_INDEX = 3;
+
+ if ([scanner scanUpToString:@"\n" intoString:&line]) {
+ parts = [[NSMutableArray alloc] init];
+ NSScanner* moduleInfoScanner = [NSScanner scannerWithString:line];
+ NSString* moduleInfo;
+ // Get everything BEFORE the module name. None of these properties
+ // can have spaces.
+ for (int i = 0; i <= MODULE_ID_INDEX; i++) {
+ [moduleInfoScanner scanUpToString:@" " intoString:&moduleInfo];
+ [parts addObject:moduleInfo];
+ }
+
+ // Now get the module name. This can have a space so we scan to
+ // the end of the line.
+ [moduleInfoScanner scanUpToString:@"\n" intoString:&moduleInfo];
+ [parts addObject:moduleInfo];
+ }
+
+ [str release];
+
+ return parts;
+}
+
+//=============================================================================
+static void StartSymUploadProtocolV1(Options* options,
+ NSString* OS,
+ NSString* CPU,
+ NSString* debugID,
+ NSString* debugFile) {
+ NSURL* url = [NSURL URLWithString:options->uploadURLStr];
+ HTTPMultipartUpload* ul = [[HTTPMultipartUpload alloc] initWithURL:url];
+ NSMutableDictionary* parameters = [NSMutableDictionary dictionary];
+
+ // Add parameters
+ [parameters setObject:debugID forKey:@"debug_identifier"];
+ [parameters setObject:OS forKey:@"os"];
+ [parameters setObject:CPU forKey:@"cpu"];
+ [parameters setObject:debugFile forKey:@"debug_file"];
+ [parameters setObject:debugFile forKey:@"code_file"];
+ [ul setParameters:parameters];
+
+ NSArray* keys = [parameters allKeys];
+ int count = [keys count];
+ for (int i = 0; i < count; ++i) {
+ NSString* key = [keys objectAtIndex:i];
+ NSString* value = [parameters objectForKey:key];
+ fprintf(stdout, "'%s' = '%s'\n", [key UTF8String], [value UTF8String]);
+ }
+
+ // Add file
+ [ul addFileAtPath:options->symbolsPath name:@"symbol_file"];
+
+ // Send it
+ NSError* error = nil;
+ NSData* data = [ul send:&error];
+ NSString* result = [[NSString alloc] initWithData:data
+ encoding:NSUTF8StringEncoding];
+ int status = [[ul response] statusCode];
+
+ fprintf(stdout, "Send: %s\n",
+ error ? [[error description] UTF8String] : "No Error");
+ fprintf(stdout, "Response: %d\n", status);
+ fprintf(stdout, "Result: %lu bytes\n%s\n", (unsigned long)[data length],
+ [result UTF8String]);
+
+ [result release];
+ [ul release];
+ options->result = (!error && status == 200) ? kResultSuccess : kResultFailure;
+}
+
+//=============================================================================
+static void StartSymUploadProtocolV2(Options* options,
+ NSString* debugID,
+ NSString* debugFile) {
+ options->result = kResultFailure;
+
+ // Only check status of BREAKPAD symbols, because the v2 protocol doesn't
+ // (yet) have a way to check status of other symbol types.
+ if (!options->force && [options->type isEqualToString:kBreakpadSymbolType]) {
+ SymbolStatus symbolStatus =
+ [SymbolCollectorClient checkSymbolStatusOnServer:options->uploadURLStr
+ withAPIKey:options->apiKey
+ withDebugFile:debugFile
+ withDebugID:debugID];
+ if (symbolStatus == SymbolStatusFound) {
+ fprintf(stdout, "Symbol file already exists, upload aborted."
+ " Use \"-f\" to overwrite.\n");
+ options->result = kResultAlreadyExists;
+ return;
+ } else if (symbolStatus == SymbolStatusUnknown) {
+ fprintf(stdout, "Failed to get check for existing symbol.\n");
+ return;
+ }
+ }
+
+ UploadURLResponse* URLResponse =
+ [SymbolCollectorClient createUploadURLOnServer:options->uploadURLStr
+ withAPIKey:options->apiKey];
+ if (URLResponse == nil) {
+ return;
+ }
+
+ NSURL* uploadURL = [NSURL URLWithString:[URLResponse uploadURL]];
+ HTTPPutRequest* putRequest = [[HTTPPutRequest alloc] initWithURL:uploadURL];
+ [putRequest setFile:options->symbolsPath];
+
+ NSError* error = nil;
+ NSData* data = [putRequest send:&error];
+ NSString* result = [[NSString alloc] initWithData:data
+ encoding:NSUTF8StringEncoding];
+ int responseCode = [[putRequest response] statusCode];
+ [putRequest release];
+
+ if (error || responseCode != 200) {
+ fprintf(stdout, "Failed to upload symbol file.\n");
+ fprintf(stdout, "Response code: %d\n", responseCode);
+ fprintf(stdout, "Response:\n");
+ fprintf(stdout, "%s\n", [result UTF8String]);
+ return;
+ }
+
+ CompleteUploadResult completeUploadResult =
+ [SymbolCollectorClient completeUploadOnServer:options->uploadURLStr
+ withAPIKey:options->apiKey
+ withUploadKey:[URLResponse uploadKey]
+ withDebugFile:debugFile
+ withDebugID:debugID
+ withType:options->type
+ withProductName:options->productName];
+ [URLResponse release];
+ if (completeUploadResult == CompleteUploadResultError) {
+ fprintf(stdout, "Failed to complete upload.\n");
+ return;
+ } else if (completeUploadResult == CompleteUploadResultDuplicateData) {
+ fprintf(stdout, "Uploaded file checksum matched existing file checksum,"
+ " no change necessary.\n");
+ } else {
+ fprintf(stdout, "Successfully sent the symbol file.\n");
+ }
+ options->result = kResultSuccess;
+}
+
+//=============================================================================
+static void Start(Options* options) {
+ // If non-BREAKPAD upload special-case.
+ if (![options->type isEqualToString:kBreakpadSymbolType]) {
+ StartSymUploadProtocolV2(options, options->debugID, options->codeFile);
+ return;
+ }
+
+ NSArray* moduleParts = ModuleDataForSymbolFile(options->symbolsPath);
+ // MODULE <os> <cpu> <uuid> <module-name>
+ // 0 1 2 3 4
+ NSString* OS = [moduleParts objectAtIndex:1];
+ NSString* CPU = [moduleParts objectAtIndex:2];
+ NSMutableString* debugID =
+ [NSMutableString stringWithString:[moduleParts objectAtIndex:3]];
+ [debugID replaceOccurrencesOfString:@"-"
+ withString:@""
+ options:0
+ range:NSMakeRange(0, [debugID length])];
+ NSString* debugFile = [moduleParts objectAtIndex:4];
+
+ if (options->symUploadProtocol == kSymUploadProtocolV1) {
+ StartSymUploadProtocolV1(options, OS, CPU, debugID, debugFile);
+ } else if (options->symUploadProtocol == kSymUploadProtocolV2) {
+ StartSymUploadProtocolV2(options, debugID, debugFile);
+ }
+}
+
+//=============================================================================
+static void Usage(int argc, const char* argv[]) {
+ fprintf(stderr, "Submit symbol information.\n");
+ fprintf(stderr, "Usage: %s [options] <symbol-file> <upload-URL>\n", argv[0]);
+ fprintf(stderr, "<symbol-file> should be created by using the dump_syms "
+ "tool.\n");
+ fprintf(stderr, "<upload-URL> is the destination for the upload.\n");
+ fprintf(stderr, "Options:\n");
+ fprintf(stderr, "\t-p <protocol>: protocol to use for upload, accepts "
+ "[\"sym-upload-v1\", \"sym-upload-v2\"]. Default is "
+ "\"sym-upload-v1\".\n");
+ fprintf(stderr, "\t-k <api-key>: secret for authentication with upload "
+ "server. [Only in sym-upload-v2 protocol mode]\n");
+ fprintf(stderr, "\t-f: Overwrite symbol file on server if already present. "
+ "[Only in sym-upload-v2 protocol mode]\n");
+ fprintf(
+ stderr,
+ "\t-t: <symbol-type> Explicitly set symbol upload type ("
+ "default is 'breakpad').\n"
+ "\t One of ['breakpad', 'elf', 'pe', 'macho', 'debug_only', 'dwp', "
+ "'dsym', 'pdb'].\n"
+ "\t Note: When this flag is set to anything other than 'breakpad', then "
+ "the '-c' and '-i' flags must also be set.\n");
+ fprintf(stderr, "\t-c: <code-file> Explicitly set 'code_file' for symbol "
+ "upload (basename of executable).\n");
+ fprintf(stderr, "\t-i: <debug-id> Explicitly set 'debug_id' for symbol "
+ "upload (typically build ID of executable). The debug-id for "
+ "symbol-types 'dsym' and 'macho' will be determined "
+ "automatically. \n");
+ fprintf(stderr, "\t-n: <product-name> Optionally set 'product_name' for "
+ "symbol upload\n");
+ fprintf(stderr, "\t-h: Usage\n");
+ fprintf(stderr, "\t-?: Usage\n");
+ fprintf(stderr, "\n");
+ fprintf(stderr, "Exit codes:\n");
+ fprintf(stderr, "\t%d: Success\n", kResultSuccess);
+ fprintf(stderr, "\t%d: Failure\n", kResultFailure);
+ fprintf(stderr,
+ "\t%d: Symbol file already exists on server (and -f was not "
+ "specified).\n",
+ kResultAlreadyExists);
+ fprintf(stderr,
+ "\t [This exit code will only be returned by the sym-upload-v2 "
+ "protocol.\n");
+ fprintf(stderr,
+ "\t The sym-upload-v1 protocol can return either Success or "
+ "Failure\n");
+ fprintf(stderr, "\t in this case, and the action taken by the server is "
+ "unspecified.]\n");
+ fprintf(stderr, "\n");
+ fprintf(stderr, "Examples:\n");
+ fprintf(stderr, " With 'sym-upload-v1':\n");
+ fprintf(stderr, " %s path/to/symbol_file http://myuploadserver\n",
+ argv[0]);
+ fprintf(stderr, " With 'sym-upload-v2':\n");
+ fprintf(stderr, " [Defaulting to symbol type 'BREAKPAD']\n");
+ fprintf(stderr,
+ " %s -p sym-upload-v2 -k mysecret123! "
+ "path/to/symbol_file http://myuploadserver\n",
+ argv[0]);
+ fprintf(stderr, " [Explicitly set symbol type to 'macho']\n");
+ fprintf(stderr,
+ " %s -p sym-upload-v2 -k mysecret123! -t macho "
+ "-c app -i 11111111BBBB3333DDDD555555555555F "
+ "path/to/symbol_file http://myuploadserver\n",
+ argv[0]);
+}
+
+//=============================================================================
+static void SetupOptions(int argc, const char* argv[], Options* options) {
+ // Set default options values.
+ options->symUploadProtocol = kSymUploadProtocolV1;
+ options->apiKey = nil;
+ options->type = kBreakpadSymbolType;
+ options->codeFile = nil;
+ options->debugID = nil;
+ options->force = NO;
+ options->productName = nil;
+
+ extern int optind;
+ int ch;
+
+ while ((ch = getopt(argc, (char* const*)argv, "p:k:t:c:i:n:hf?")) != -1) {
+ switch (ch) {
+ case 'p':
+ if (strcmp(optarg, "sym-upload-v2") == 0) {
+ options->symUploadProtocol = kSymUploadProtocolV2;
+ break;
+ } else if (strcmp(optarg, "sym-upload-v1") == 0) {
+ // This is already the default but leave in case that changes.
+ options->symUploadProtocol = kSymUploadProtocolV1;
+ break;
+ }
+ Usage(argc, argv);
+ exit(0);
+ break;
+ case 'k':
+ options->apiKey = [NSString stringWithCString:optarg
+ encoding:NSASCIIStringEncoding];
+ break;
+ case 't': {
+ // This is really an enum, so treat as upper-case for consistency with
+ // enum naming convention on server-side.
+ options->type = [[NSString stringWithCString:optarg
+ encoding:NSASCIIStringEncoding]
+ uppercaseString];
+ break;
+ }
+ case 'c':
+ options->codeFile = [NSString stringWithCString:optarg
+ encoding:NSASCIIStringEncoding];
+ break;
+ case 'i':
+ options->debugID = [NSString stringWithCString:optarg
+ encoding:NSASCIIStringEncoding];
+ break;
+ case 'n':
+ options->productName =
+ [NSString stringWithCString:optarg
+ encoding:NSASCIIStringEncoding];
+ break;
+ case 'f':
+ options->force = YES;
+ break;
+ default:
+ Usage(argc, argv);
+ exit(0);
+ break;
+ }
+ }
+
+ if ((argc - optind) != 2) {
+ fprintf(stderr, "%s: Missing symbols file and/or upload-URL\n", argv[0]);
+ Usage(argc, argv);
+ exit(1);
+ }
+
+ int fd = open(argv[optind], O_RDONLY);
+ if (fd < 0) {
+ fprintf(stderr, "%s: %s: %s\n", argv[0], argv[optind], strerror(errno));
+ exit(1);
+ }
+
+ struct stat statbuf;
+ if (fstat(fd, &statbuf) < 0) {
+ fprintf(stderr, "%s: %s: %s\n", argv[0], argv[optind], strerror(errno));
+ close(fd);
+ exit(1);
+ }
+ close(fd);
+
+ if (!S_ISREG(statbuf.st_mode)) {
+ fprintf(stderr, "%s: %s: not a regular file\n", argv[0], argv[optind]);
+ exit(1);
+ }
+
+ bool isBreakpadUpload = [options->type isEqualToString:kBreakpadSymbolType];
+ bool hasCodeFile = options->codeFile != nil;
+ bool hasDebugID = options->debugID != nil;
+ if (isBreakpadUpload && (hasCodeFile || hasDebugID)) {
+ fprintf(stderr, "\n");
+ fprintf(stderr,
+ "%s: -c and -i should only be specified for non-breakpad "
+ "symbol upload types.\n",
+ argv[0]);
+ fprintf(stderr, "\n");
+ Usage(argc, argv);
+ exit(1);
+ }
+
+ if (!isBreakpadUpload && hasCodeFile && !hasDebugID &&
+ ([options->type isEqualToString:kMachOSymbolType] ||
+ [options->type isEqualToString:kDSYMSymbolType])) {
+ DumpSymbols dump_symbols(SYMBOLS_AND_FILES | INLINES, false);
+ if (dump_symbols.Read(argv[optind])) {
+ std::string identifier = dump_symbols.Identifier();
+ if (identifier.empty()) {
+ fprintf(stderr, "\n");
+ fprintf(stderr,
+ "%s: Unable to determine debug-id. Please specify with '-i'.\n",
+ argv[0]);
+ fprintf(stderr, "\n");
+ Usage(argc, argv);
+ exit(1);
+ }
+ options->debugID = [NSString stringWithUTF8String:identifier.c_str()];
+ hasDebugID = true;
+ }
+ }
+
+ if (!isBreakpadUpload && (!hasCodeFile || !hasDebugID)) {
+ fprintf(stderr, "\n");
+ fprintf(stderr,
+ "%s: -c and -i must be specified for non-breakpad "
+ "symbol upload types.\n",
+ argv[0]);
+ fprintf(stderr, "\n");
+ Usage(argc, argv);
+ exit(1);
+ }
+
+ options->symbolsPath = [NSString stringWithUTF8String:argv[optind]];
+ options->uploadURLStr = [NSString stringWithUTF8String:argv[optind + 1]];
+}
+
+//=============================================================================
+int main(int argc, const char* argv[]) {
+ NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
+ Options options;
+
+ bzero(&options, sizeof(Options));
+ SetupOptions(argc, argv, &options);
+ Start(&options);
+
+ [pool release];
+ return options.result;
+}
diff --git a/externals/breakpad/src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj b/externals/breakpad/src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..b1dd6a112f
--- /dev/null
+++ b/externals/breakpad/src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj
@@ -0,0 +1,466 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 5B6060BD222716FC0015F0A0 /* HTTPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B6060BC222716FC0015F0A0 /* HTTPRequest.m */; };
+ 5B6060C02227201B0015F0A0 /* HTTPPutRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B6060BF2227201B0015F0A0 /* HTTPPutRequest.m */; };
+ 5B6060C7222735E50015F0A0 /* HTTPGetRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B6060C6222735E50015F0A0 /* HTTPGetRequest.m */; };
+ 5B6060CA2227374E0015F0A0 /* HTTPSimplePostRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B6060C92227374E0015F0A0 /* HTTPSimplePostRequest.m */; };
+ 5B6060D022273BDA0015F0A0 /* SymbolCollectorClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B6060CF22273BDA0015F0A0 /* SymbolCollectorClient.m */; };
+ 5B97447524D0AA5F000C71F5 /* encoding_util.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B97447424D0AA5F000C71F5 /* encoding_util.m */; };
+ 8B31022C11F0CEBD00FCF3E4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; };
+ 8DD76F9A0486AA7600D96B5E /* symupload.mm in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* symupload.mm */; settings = {ATTRIBUTES = (); }; };
+ 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; };
+ 930DA19225ED543A008558E3 /* dump_syms.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA19025ED543A008558E3 /* dump_syms.cc */; };
+ 930DA22C25ED55A9008558E3 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA21F25ED55A8008558E3 /* module.cc */; };
+ 930DA22D25ED55A9008558E3 /* dwarf_cfi_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA22325ED55A8008558E3 /* dwarf_cfi_to_module.cc */; };
+ 930DA22E25ED55A9008558E3 /* stabs_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA22525ED55A8008558E3 /* stabs_to_module.cc */; };
+ 930DA22F25ED55A9008558E3 /* language.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA22625ED55A9008558E3 /* language.cc */; };
+ 930DA23125ED55A9008558E3 /* dwarf_line_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA22A25ED55A9008558E3 /* dwarf_line_to_module.cc */; };
+ 930DA23225ED55A9008558E3 /* dwarf_cu_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA22B25ED55A9008558E3 /* dwarf_cu_to_module.cc */; };
+ 930DA23725ED55B6008558E3 /* stabs_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA23625ED55B6008558E3 /* stabs_reader.cc */; };
+ 930DA24225ED55BF008558E3 /* macho_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA23A25ED55BF008558E3 /* macho_id.cc */; };
+ 930DA24325ED55BF008558E3 /* macho_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA23C25ED55BF008558E3 /* macho_utilities.cc */; };
+ 930DA24425ED55BF008558E3 /* macho_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA23F25ED55BF008558E3 /* macho_reader.cc */; };
+ 930DA24525ED55BF008558E3 /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA24125ED55BF008558E3 /* macho_walker.cc */; };
+ 930DA25C25ED56DB008558E3 /* dwarf_range_list_handler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA24D25ED56DB008558E3 /* dwarf_range_list_handler.cc */; };
+ 930DA25D25ED56DB008558E3 /* cfi_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA24E25ED56DB008558E3 /* cfi_assembler.cc */; };
+ 930DA25E25ED56DB008558E3 /* elf_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA25225ED56DB008558E3 /* elf_reader.cc */; };
+ 930DA25F25ED56DB008558E3 /* dwarf2diehandler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA25325ED56DB008558E3 /* dwarf2diehandler.cc */; };
+ 930DA26025ED56DB008558E3 /* dwarf2reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA25625ED56DB008558E3 /* dwarf2reader.cc */; };
+ 930DA26125ED56DB008558E3 /* bytereader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA25925ED56DB008558E3 /* bytereader.cc */; };
+ 930DA26925ED56FF008558E3 /* test_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA26825ED56FF008558E3 /* test_assembler.cc */; };
+ 930DA26E25ED571F008558E3 /* arch_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA26D25ED571F008558E3 /* arch_utilities.cc */; };
+ 930DA27825ED572D008558E3 /* path_helper.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA27125ED572C008558E3 /* path_helper.cc */; };
+ 930DA27925ED572D008558E3 /* file_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA27525ED572C008558E3 /* file_id.cc */; };
+ 930DA27A25ED572D008558E3 /* md5.cc in Sources */ = {isa = PBXBuildFile; fileRef = 930DA27725ED572D008558E3 /* md5.cc */; };
+ 9BC1D49E0B37427A00F2A2B4 /* minidump_upload.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BD836000B0544BA0055103E /* minidump_upload.m */; };
+ 9BD8336A0B03E4080055103E /* HTTPMultipartUpload.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9BD833680B03E4080055103E /* HTTPMultipartUpload.h */; };
+ 9BD8336B0B03E4080055103E /* HTTPMultipartUpload.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BD833690B03E4080055103E /* HTTPMultipartUpload.m */; };
+ 9BD836180B0549F70055103E /* HTTPMultipartUpload.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BD833690B03E4080055103E /* HTTPMultipartUpload.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 8DD76F9E0486AA7600D96B5E /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ 9BD8336A0B03E4080055103E /* HTTPMultipartUpload.h in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 08FB7796FE84155DC02AAC07 /* symupload.mm */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.cpp.objcpp; path = symupload.mm; sourceTree = "<group>"; tabWidth = 2; };
+ 08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 5B6060BB222716FC0015F0A0 /* HTTPRequest.h */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.c.h; name = HTTPRequest.h; path = ../../../common/mac/HTTPRequest.h; sourceTree = "<group>"; tabWidth = 2; };
+ 5B6060BC222716FC0015F0A0 /* HTTPRequest.m */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; name = HTTPRequest.m; path = ../../../common/mac/HTTPRequest.m; sourceTree = "<group>"; tabWidth = 2; };
+ 5B6060BE2227201B0015F0A0 /* HTTPPutRequest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = HTTPPutRequest.h; path = ../../../common/mac/HTTPPutRequest.h; sourceTree = "<group>"; };
+ 5B6060BF2227201B0015F0A0 /* HTTPPutRequest.m */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; name = HTTPPutRequest.m; path = ../../../common/mac/HTTPPutRequest.m; sourceTree = "<group>"; tabWidth = 2; };
+ 5B6060C22227303A0015F0A0 /* encoding_util.h */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.c.h; name = encoding_util.h; path = ../../../common/mac/encoding_util.h; sourceTree = "<group>"; tabWidth = 2; };
+ 5B6060C5222735E50015F0A0 /* HTTPGetRequest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = HTTPGetRequest.h; path = ../../../common/mac/HTTPGetRequest.h; sourceTree = "<group>"; };
+ 5B6060C6222735E50015F0A0 /* HTTPGetRequest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = HTTPGetRequest.m; path = ../../../common/mac/HTTPGetRequest.m; sourceTree = "<group>"; };
+ 5B6060C82227374E0015F0A0 /* HTTPSimplePostRequest.h */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.c.h; name = HTTPSimplePostRequest.h; path = ../../../common/mac/HTTPSimplePostRequest.h; sourceTree = "<group>"; tabWidth = 2; };
+ 5B6060C92227374E0015F0A0 /* HTTPSimplePostRequest.m */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; name = HTTPSimplePostRequest.m; path = ../../../common/mac/HTTPSimplePostRequest.m; sourceTree = "<group>"; tabWidth = 2; };
+ 5B6060CE22273BDA0015F0A0 /* SymbolCollectorClient.h */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.c.h; name = SymbolCollectorClient.h; path = ../../../common/mac/SymbolCollectorClient.h; sourceTree = "<group>"; tabWidth = 2; };
+ 5B6060CF22273BDA0015F0A0 /* SymbolCollectorClient.m */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; name = SymbolCollectorClient.m; path = ../../../common/mac/SymbolCollectorClient.m; sourceTree = "<group>"; tabWidth = 2; };
+ 5B97447424D0AA5F000C71F5 /* encoding_util.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = encoding_util.m; path = ../../../common/mac/encoding_util.m; sourceTree = "<group>"; };
+ 8B31022B11F0CE6900FCF3E4 /* Breakpad.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Breakpad.xcconfig; path = ../../../common/mac/Breakpad.xcconfig; sourceTree = SOURCE_ROOT; };
+ 8B3102B611F0D5CE00FCF3E4 /* BreakpadDebug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadDebug.xcconfig; path = ../../../common/mac/BreakpadDebug.xcconfig; sourceTree = SOURCE_ROOT; };
+ 8B3102B711F0D5CE00FCF3E4 /* BreakpadRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadRelease.xcconfig; path = ../../../common/mac/BreakpadRelease.xcconfig; sourceTree = SOURCE_ROOT; };
+ 8DD76FA10486AA7600D96B5E /* symupload */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = symupload; sourceTree = BUILT_PRODUCTS_DIR; };
+ 930DA19025ED543A008558E3 /* dump_syms.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dump_syms.cc; path = ../../../common/mac/dump_syms.cc; sourceTree = "<group>"; };
+ 930DA19125ED543A008558E3 /* dump_syms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dump_syms.h; path = ../../../common/mac/dump_syms.h; sourceTree = "<group>"; };
+ 930DA21F25ED55A8008558E3 /* module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = module.cc; path = ../../../common/module.cc; sourceTree = "<group>"; };
+ 930DA22025ED55A8008558E3 /* module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = module.h; path = ../../../common/module.h; sourceTree = "<group>"; };
+ 930DA22125ED55A8008558E3 /* 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 = "<group>"; };
+ 930DA22225ED55A8008558E3 /* 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 = "<group>"; };
+ 930DA22325ED55A8008558E3 /* 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 = "<group>"; };
+ 930DA22425ED55A8008558E3 /* language.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = language.h; path = ../../../common/language.h; sourceTree = "<group>"; };
+ 930DA22525ED55A8008558E3 /* stabs_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_to_module.cc; path = ../../../common/stabs_to_module.cc; sourceTree = "<group>"; };
+ 930DA22625ED55A9008558E3 /* language.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = language.cc; path = ../../../common/language.cc; sourceTree = "<group>"; };
+ 930DA22725ED55A9008558E3 /* 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 = "<group>"; };
+ 930DA22825ED55A9008558E3 /* stabs_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stabs_to_module.h; path = ../../../common/stabs_to_module.h; sourceTree = "<group>"; };
+ 930DA22A25ED55A9008558E3 /* 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 = "<group>"; };
+ 930DA22B25ED55A9008558E3 /* 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 = "<group>"; };
+ 930DA23525ED55B6008558E3 /* stabs_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stabs_reader.h; path = ../../../common/stabs_reader.h; sourceTree = "<group>"; };
+ 930DA23625ED55B6008558E3 /* stabs_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_reader.cc; path = ../../../common/stabs_reader.cc; sourceTree = "<group>"; };
+ 930DA23A25ED55BF008558E3 /* macho_id.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macho_id.cc; path = ../../../common/mac/macho_id.cc; sourceTree = "<group>"; };
+ 930DA23B25ED55BF008558E3 /* macho_id.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macho_id.h; path = ../../../common/mac/macho_id.h; sourceTree = "<group>"; };
+ 930DA23C25ED55BF008558E3 /* macho_utilities.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macho_utilities.cc; path = ../../../common/mac/macho_utilities.cc; sourceTree = "<group>"; };
+ 930DA23D25ED55BF008558E3 /* macho_walker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macho_walker.h; path = ../../../common/mac/macho_walker.h; sourceTree = "<group>"; };
+ 930DA23E25ED55BF008558E3 /* macho_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macho_reader.h; path = ../../../common/mac/macho_reader.h; sourceTree = "<group>"; };
+ 930DA23F25ED55BF008558E3 /* macho_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macho_reader.cc; path = ../../../common/mac/macho_reader.cc; sourceTree = "<group>"; };
+ 930DA24025ED55BF008558E3 /* macho_utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macho_utilities.h; path = ../../../common/mac/macho_utilities.h; sourceTree = "<group>"; };
+ 930DA24125ED55BF008558E3 /* macho_walker.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macho_walker.cc; path = ../../../common/mac/macho_walker.cc; sourceTree = "<group>"; };
+ 930DA24C25ED56DB008558E3 /* line_state_machine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = line_state_machine.h; path = ../../../common/dwarf/line_state_machine.h; sourceTree = "<group>"; };
+ 930DA24D25ED56DB008558E3 /* dwarf_range_list_handler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_range_list_handler.cc; path = ../../../common/dwarf_range_list_handler.cc; sourceTree = "<group>"; };
+ 930DA24E25ED56DB008558E3 /* cfi_assembler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cfi_assembler.cc; path = ../../../common/dwarf/cfi_assembler.cc; sourceTree = "<group>"; };
+ 930DA24F25ED56DB008558E3 /* dwarf2enums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf2enums.h; path = ../../../common/dwarf/dwarf2enums.h; sourceTree = "<group>"; };
+ 930DA25025ED56DB008558E3 /* bytereader-inl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "bytereader-inl.h"; path = "../../../common/dwarf/bytereader-inl.h"; sourceTree = "<group>"; };
+ 930DA25125ED56DB008558E3 /* dwarf_range_list_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_range_list_handler.h; path = ../../../common/dwarf_range_list_handler.h; sourceTree = "<group>"; };
+ 930DA25225ED56DB008558E3 /* elf_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = elf_reader.cc; path = ../../../common/dwarf/elf_reader.cc; sourceTree = "<group>"; };
+ 930DA25325ED56DB008558E3 /* dwarf2diehandler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2diehandler.cc; path = ../../../common/dwarf/dwarf2diehandler.cc; sourceTree = "<group>"; };
+ 930DA25425ED56DB008558E3 /* elf_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = elf_reader.h; path = ../../../common/dwarf/elf_reader.h; sourceTree = "<group>"; };
+ 930DA25525ED56DB008558E3 /* bytereader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bytereader.h; path = ../../../common/dwarf/bytereader.h; sourceTree = "<group>"; };
+ 930DA25625ED56DB008558E3 /* dwarf2reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2reader.cc; path = ../../../common/dwarf/dwarf2reader.cc; sourceTree = "<group>"; };
+ 930DA25725ED56DB008558E3 /* dwarf2reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf2reader.h; path = ../../../common/dwarf/dwarf2reader.h; sourceTree = "<group>"; };
+ 930DA25825ED56DB008558E3 /* dwarf2diehandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf2diehandler.h; path = ../../../common/dwarf/dwarf2diehandler.h; sourceTree = "<group>"; };
+ 930DA25925ED56DB008558E3 /* bytereader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bytereader.cc; path = ../../../common/dwarf/bytereader.cc; sourceTree = "<group>"; };
+ 930DA25A25ED56DB008558E3 /* cfi_assembler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cfi_assembler.h; path = ../../../common/dwarf/cfi_assembler.h; sourceTree = "<group>"; };
+ 930DA26725ED56FF008558E3 /* test_assembler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_assembler.h; path = ../../../common/test_assembler.h; sourceTree = "<group>"; };
+ 930DA26825ED56FF008558E3 /* test_assembler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = test_assembler.cc; path = ../../../common/test_assembler.cc; sourceTree = "<group>"; };
+ 930DA26C25ED571F008558E3 /* arch_utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = arch_utilities.h; path = ../../../common/mac/arch_utilities.h; sourceTree = "<group>"; };
+ 930DA26D25ED571F008558E3 /* arch_utilities.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = arch_utilities.cc; path = ../../../common/mac/arch_utilities.cc; sourceTree = "<group>"; };
+ 930DA27125ED572C008558E3 /* path_helper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = path_helper.cc; path = ../../../common/path_helper.cc; sourceTree = "<group>"; };
+ 930DA27225ED572C008558E3 /* byteswap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = byteswap.h; path = ../../../common/mac/byteswap.h; sourceTree = "<group>"; };
+ 930DA27325ED572C008558E3 /* path_helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = path_helper.h; path = ../../../common/path_helper.h; sourceTree = "<group>"; };
+ 930DA27425ED572C008558E3 /* byte_cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = byte_cursor.h; path = ../../../common/byte_cursor.h; sourceTree = "<group>"; };
+ 930DA27525ED572C008558E3 /* file_id.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = file_id.cc; path = ../../../common/mac/file_id.cc; sourceTree = "<group>"; };
+ 930DA27625ED572C008558E3 /* file_id.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = file_id.h; path = ../../../common/mac/file_id.h; sourceTree = "<group>"; };
+ 930DA27725ED572D008558E3 /* md5.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = md5.cc; path = ../../../common/md5.cc; sourceTree = "<group>"; };
+ 9BD833680B03E4080055103E /* HTTPMultipartUpload.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.h; name = HTTPMultipartUpload.h; path = ../../../common/mac/HTTPMultipartUpload.h; sourceTree = "<group>"; tabWidth = 2; };
+ 9BD833690B03E4080055103E /* HTTPMultipartUpload.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; name = HTTPMultipartUpload.m; path = ../../../common/mac/HTTPMultipartUpload.m; sourceTree = "<group>"; tabWidth = 2; };
+ 9BD835FB0B0544950055103E /* minidump_upload */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = minidump_upload; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9BD836000B0544BA0055103E /* minidump_upload.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = minidump_upload.m; path = ../../../common/mac/minidump_upload.m; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8DD76F9B0486AA7600D96B5E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9BD835F90B0544950055103E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8B31022C11F0CEBD00FCF3E4 /* Foundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 08FB7794FE84155DC02AAC07 /* symupload */ = {
+ isa = PBXGroup;
+ children = (
+ 930DA21E25ED5586008558E3 /* dump_syms */,
+ 5B6060CE22273BDA0015F0A0 /* SymbolCollectorClient.h */,
+ 5B6060CF22273BDA0015F0A0 /* SymbolCollectorClient.m */,
+ 5B6060C82227374E0015F0A0 /* HTTPSimplePostRequest.h */,
+ 5B6060C92227374E0015F0A0 /* HTTPSimplePostRequest.m */,
+ 5B6060C5222735E50015F0A0 /* HTTPGetRequest.h */,
+ 5B6060C6222735E50015F0A0 /* HTTPGetRequest.m */,
+ 5B6060C22227303A0015F0A0 /* encoding_util.h */,
+ 5B97447424D0AA5F000C71F5 /* encoding_util.m */,
+ 5B6060BE2227201B0015F0A0 /* HTTPPutRequest.h */,
+ 5B6060BF2227201B0015F0A0 /* HTTPPutRequest.m */,
+ 5B6060BB222716FC0015F0A0 /* HTTPRequest.h */,
+ 5B6060BC222716FC0015F0A0 /* HTTPRequest.m */,
+ 8B31022B11F0CE6900FCF3E4 /* Breakpad.xcconfig */,
+ 8B3102B611F0D5CE00FCF3E4 /* BreakpadDebug.xcconfig */,
+ 8B3102B711F0D5CE00FCF3E4 /* BreakpadRelease.xcconfig */,
+ 08FB7796FE84155DC02AAC07 /* symupload.mm */,
+ 9BD836000B0544BA0055103E /* minidump_upload.m */,
+ 9BD833680B03E4080055103E /* HTTPMultipartUpload.h */,
+ 9BD833690B03E4080055103E /* HTTPMultipartUpload.m */,
+ 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */,
+ 1AB674ADFE9D54B511CA2CBB /* Products */,
+ );
+ name = symupload;
+ sourceTree = "<group>";
+ };
+ 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB779EFE84155DC02AAC07 /* Foundation.framework */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+ 1AB674ADFE9D54B511CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8DD76FA10486AA7600D96B5E /* symupload */,
+ 9BD835FB0B0544950055103E /* minidump_upload */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 930DA21E25ED5586008558E3 /* dump_syms */ = {
+ isa = PBXGroup;
+ children = (
+ 930DA23A25ED55BF008558E3 /* macho_id.cc */,
+ 930DA23B25ED55BF008558E3 /* macho_id.h */,
+ 930DA23F25ED55BF008558E3 /* macho_reader.cc */,
+ 930DA23E25ED55BF008558E3 /* macho_reader.h */,
+ 930DA23C25ED55BF008558E3 /* macho_utilities.cc */,
+ 930DA24025ED55BF008558E3 /* macho_utilities.h */,
+ 930DA24125ED55BF008558E3 /* macho_walker.cc */,
+ 930DA23D25ED55BF008558E3 /* macho_walker.h */,
+ 930DA19025ED543A008558E3 /* dump_syms.cc */,
+ 930DA19125ED543A008558E3 /* dump_syms.h */,
+ 930DA23625ED55B6008558E3 /* stabs_reader.cc */,
+ 930DA23525ED55B6008558E3 /* stabs_reader.h */,
+ 930DA22325ED55A8008558E3 /* dwarf_cfi_to_module.cc */,
+ 930DA22125ED55A8008558E3 /* dwarf_cfi_to_module.h */,
+ 930DA22B25ED55A9008558E3 /* dwarf_cu_to_module.cc */,
+ 930DA22225ED55A8008558E3 /* dwarf_cu_to_module.h */,
+ 930DA22A25ED55A9008558E3 /* dwarf_line_to_module.cc */,
+ 930DA22725ED55A9008558E3 /* dwarf_line_to_module.h */,
+ 930DA22625ED55A9008558E3 /* language.cc */,
+ 930DA22425ED55A8008558E3 /* language.h */,
+ 930DA21F25ED55A8008558E3 /* module.cc */,
+ 930DA22025ED55A8008558E3 /* module.h */,
+ 930DA22525ED55A8008558E3 /* stabs_to_module.cc */,
+ 930DA22825ED55A9008558E3 /* stabs_to_module.h */,
+ 930DA25025ED56DB008558E3 /* bytereader-inl.h */,
+ 930DA25925ED56DB008558E3 /* bytereader.cc */,
+ 930DA25525ED56DB008558E3 /* bytereader.h */,
+ 930DA24E25ED56DB008558E3 /* cfi_assembler.cc */,
+ 930DA25A25ED56DB008558E3 /* cfi_assembler.h */,
+ 930DA24D25ED56DB008558E3 /* dwarf_range_list_handler.cc */,
+ 930DA25125ED56DB008558E3 /* dwarf_range_list_handler.h */,
+ 930DA25325ED56DB008558E3 /* dwarf2diehandler.cc */,
+ 930DA25825ED56DB008558E3 /* dwarf2diehandler.h */,
+ 930DA24F25ED56DB008558E3 /* dwarf2enums.h */,
+ 930DA25625ED56DB008558E3 /* dwarf2reader.cc */,
+ 930DA25725ED56DB008558E3 /* dwarf2reader.h */,
+ 930DA25225ED56DB008558E3 /* elf_reader.cc */,
+ 930DA25425ED56DB008558E3 /* elf_reader.h */,
+ 930DA24C25ED56DB008558E3 /* line_state_machine.h */,
+ 930DA26825ED56FF008558E3 /* test_assembler.cc */,
+ 930DA26725ED56FF008558E3 /* test_assembler.h */,
+ 930DA26D25ED571F008558E3 /* arch_utilities.cc */,
+ 930DA26C25ED571F008558E3 /* arch_utilities.h */,
+ 930DA27425ED572C008558E3 /* byte_cursor.h */,
+ 930DA27225ED572C008558E3 /* byteswap.h */,
+ 930DA27525ED572C008558E3 /* file_id.cc */,
+ 930DA27625ED572C008558E3 /* file_id.h */,
+ 930DA27725ED572D008558E3 /* md5.cc */,
+ 930DA27125ED572C008558E3 /* path_helper.cc */,
+ 930DA27325ED572C008558E3 /* path_helper.h */,
+ );
+ name = dump_syms;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8DD76F960486AA7600D96B5E /* symupload */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "symupload" */;
+ buildPhases = (
+ 8DD76F990486AA7600D96B5E /* Sources */,
+ 8DD76F9B0486AA7600D96B5E /* Frameworks */,
+ 8DD76F9E0486AA7600D96B5E /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = symupload;
+ productInstallPath = "$(HOME)/bin";
+ productName = symupload;
+ productReference = 8DD76FA10486AA7600D96B5E /* symupload */;
+ productType = "com.apple.product-type.tool";
+ };
+ 9BD835FA0B0544950055103E /* minidump_upload */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 9BD836020B0544BB0055103E /* Build configuration list for PBXNativeTarget "minidump_upload" */;
+ buildPhases = (
+ 9BD835F80B0544950055103E /* Sources */,
+ 9BD835F90B0544950055103E /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = minidump_upload;
+ productName = minidump_upload;
+ productReference = 9BD835FB0B0544950055103E /* minidump_upload */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 08FB7793FE84155DC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ };
+ buildConfigurationList = 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "symupload" */;
+ compatibilityVersion = "Xcode 3.1";
+ developmentRegion = en;
+ hasScannedForEncodings = 1;
+ knownRegions = (
+ en,
+ );
+ mainGroup = 08FB7794FE84155DC02AAC07 /* symupload */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8DD76F960486AA7600D96B5E /* symupload */,
+ 9BD835FA0B0544950055103E /* minidump_upload */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8DD76F990486AA7600D96B5E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8DD76F9A0486AA7600D96B5E /* symupload.mm in Sources */,
+ 930DA19225ED543A008558E3 /* dump_syms.cc in Sources */,
+ 930DA24525ED55BF008558E3 /* macho_walker.cc in Sources */,
+ 930DA22E25ED55A9008558E3 /* stabs_to_module.cc in Sources */,
+ 5B6060CA2227374E0015F0A0 /* HTTPSimplePostRequest.m in Sources */,
+ 930DA25F25ED56DB008558E3 /* dwarf2diehandler.cc in Sources */,
+ 930DA27825ED572D008558E3 /* path_helper.cc in Sources */,
+ 930DA27A25ED572D008558E3 /* md5.cc in Sources */,
+ 930DA22D25ED55A9008558E3 /* dwarf_cfi_to_module.cc in Sources */,
+ 930DA24425ED55BF008558E3 /* macho_reader.cc in Sources */,
+ 930DA24325ED55BF008558E3 /* macho_utilities.cc in Sources */,
+ 5B6060D022273BDA0015F0A0 /* SymbolCollectorClient.m in Sources */,
+ 5B6060C7222735E50015F0A0 /* HTTPGetRequest.m in Sources */,
+ 930DA27925ED572D008558E3 /* file_id.cc in Sources */,
+ 930DA26925ED56FF008558E3 /* test_assembler.cc in Sources */,
+ 930DA22F25ED55A9008558E3 /* language.cc in Sources */,
+ 930DA25E25ED56DB008558E3 /* elf_reader.cc in Sources */,
+ 930DA26E25ED571F008558E3 /* arch_utilities.cc in Sources */,
+ 930DA24225ED55BF008558E3 /* macho_id.cc in Sources */,
+ 5B6060C02227201B0015F0A0 /* HTTPPutRequest.m in Sources */,
+ 930DA25C25ED56DB008558E3 /* dwarf_range_list_handler.cc in Sources */,
+ 5B6060BD222716FC0015F0A0 /* HTTPRequest.m in Sources */,
+ 930DA25D25ED56DB008558E3 /* cfi_assembler.cc in Sources */,
+ 930DA23225ED55A9008558E3 /* dwarf_cu_to_module.cc in Sources */,
+ 930DA23125ED55A9008558E3 /* dwarf_line_to_module.cc in Sources */,
+ 930DA26125ED56DB008558E3 /* bytereader.cc in Sources */,
+ 930DA22C25ED55A9008558E3 /* module.cc in Sources */,
+ 5B97447524D0AA5F000C71F5 /* encoding_util.m in Sources */,
+ 930DA23725ED55B6008558E3 /* stabs_reader.cc in Sources */,
+ 9BD8336B0B03E4080055103E /* HTTPMultipartUpload.m in Sources */,
+ 930DA26025ED56DB008558E3 /* dwarf2reader.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9BD835F80B0544950055103E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9BD836180B0549F70055103E /* HTTPMultipartUpload.m in Sources */,
+ 9BC1D49E0B37427A00F2A2B4 /* minidump_upload.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB927508733DD40010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
+ GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
+ HEADER_SEARCH_PATHS = (
+ ../../..,
+ ../../../common/mac/include,
+ ../../../third_party/musl/include/,
+ );
+ PRODUCT_NAME = symupload;
+ };
+ name = Debug;
+ };
+ 1DEB927608733DD40010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(inherited)",
+ NDEBUG,
+ HAVE_MACH_O_NLIST_H,
+ );
+ HEADER_SEARCH_PATHS = (
+ ../../..,
+ ../../../common/mac/include,
+ ../../../third_party/musl/include/,
+ );
+ PRODUCT_NAME = symupload;
+ };
+ name = Release;
+ };
+ 1DEB927908733DD40010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 8B3102B611F0D5CE00FCF3E4 /* BreakpadDebug.xcconfig */;
+ buildSettings = {
+ };
+ name = Debug;
+ };
+ 1DEB927A08733DD40010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 8B3102B711F0D5CE00FCF3E4 /* BreakpadRelease.xcconfig */;
+ buildSettings = {
+ };
+ name = Release;
+ };
+ 9BD836030B0544BB0055103E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = ../../..;
+ PRODUCT_NAME = minidump_upload;
+ };
+ name = Debug;
+ };
+ 9BD836040B0544BB0055103E /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = ../../..;
+ PRODUCT_NAME = minidump_upload;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "symupload" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB927508733DD40010E9CD /* Debug */,
+ 1DEB927608733DD40010E9CD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "symupload" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB927908733DD40010E9CD /* Debug */,
+ 1DEB927A08733DD40010E9CD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 9BD836020B0544BB0055103E /* Build configuration list for PBXNativeTarget "minidump_upload" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 9BD836030B0544BB0055103E /* Debug */,
+ 9BD836040B0544BB0055103E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}