aboutsummaryrefslogtreecommitdiff
path: root/externals/breakpad/src/tools/mac
diff options
context:
space:
mode:
authorDawid Potocki <dawid@dawidpotocki.com>2024-03-05 14:09:27 +1300
committerDawid Potocki <dawid@dawidpotocki.com>2024-03-05 20:34:15 +1300
commit063e15900bda8453fb0fc6751e78d064501ccbae (patch)
treea4cd5f01dbca33a262333aff10e1e035217a30c8 /externals/breakpad/src/tools/mac
parent537296095ab24eddcb196b5ef98004f91de9c8c2 (diff)
Replace broken submodules with vendored source codeHEADpatched
Diffstat (limited to 'externals/breakpad/src/tools/mac')
-rw-r--r--externals/breakpad/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj1857
-rw-r--r--externals/breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc340
-rw-r--r--externals/breakpad/src/tools/mac/symupload/symupload.mm474
-rw-r--r--externals/breakpad/src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj466
-rw-r--r--externals/breakpad/src/tools/mac/upload_system_symbols/arch_constants.h66
-rw-r--r--externals/breakpad/src/tools/mac/upload_system_symbols/arch_reader.go68
-rw-r--r--externals/breakpad/src/tools/mac/upload_system_symbols/go.mod3
-rw-r--r--externals/breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.go484
-rwxr-xr-xexternals/breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.sh114
9 files changed, 3872 insertions, 0 deletions
diff --git a/externals/breakpad/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj b/externals/breakpad/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..c98b6ac546
--- /dev/null
+++ b/externals/breakpad/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj
@@ -0,0 +1,1857 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXAggregateTarget section */
+ B88FAFC9116BDCAD00407530 /* all_unittests */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = B88FAFCC116BDCCC00407530 /* Build configuration list for PBXAggregateTarget "all_unittests" */;
+ buildPhases = (
+ B88FB094116CE73E00407530 /* ShellScript */,
+ );
+ dependencies = (
+ B88FB15B116CF53E00407530 /* PBXTargetDependency */,
+ B88FAFCF116BDD7000407530 /* PBXTargetDependency */,
+ B88FB01D116BDF9800407530 /* PBXTargetDependency */,
+ B88FB167116CF54B00407530 /* PBXTargetDependency */,
+ B88FAFD1116BDD7000407530 /* PBXTargetDependency */,
+ B88FB165116CF54B00407530 /* PBXTargetDependency */,
+ B88FB161116CF54B00407530 /* PBXTargetDependency */,
+ B88FB15F116CF54B00407530 /* PBXTargetDependency */,
+ B88FB15D116CF54B00407530 /* PBXTargetDependency */,
+ B84A9201116CF7D2006C210E /* PBXTargetDependency */,
+ B88FB0C8116CEB4A00407530 /* PBXTargetDependency */,
+ 8B31051511F100CF00FCF3E4 /* PBXTargetDependency */,
+ );
+ name = all_unittests;
+ productName = all_unittests;
+ };
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+ 162F64FA161C591500CD68D5 /* arch_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 162F64F8161C591500CD68D5 /* arch_utilities.cc */; };
+ 162F6500161C5F2200CD68D5 /* arch_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 162F64F8161C591500CD68D5 /* arch_utilities.cc */; };
+ 4247E63D2110D4B200482558 /* path_helper.cc in Sources */ = {isa = PBXBuildFile; fileRef = EB06C7511FEBC515000214D9 /* path_helper.cc */; };
+ 4262382721AC496F00E5A3A6 /* dwarf_range_list_handler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4262382521AC496F00E5A3A6 /* dwarf_range_list_handler.cc */; };
+ 4262382821AC49A000E5A3A6 /* dwarf_range_list_handler.h in Sources */ = {isa = PBXBuildFile; fileRef = 4262382621AC496F00E5A3A6 /* dwarf_range_list_handler.h */; };
+ 4D72CAF513DFBAC2006CABE3 /* md5.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D72CAF413DFBAC2006CABE3 /* md5.cc */; };
+ 8BCAAA4C1CE3A7980046090B /* elf_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8BCAAA4A1CE3A7980046090B /* elf_reader.cc */; };
+ 8BCAAA4D1CE3B1260046090B /* elf_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8BCAAA4A1CE3A7980046090B /* elf_reader.cc */; };
+ B84A91F8116CF78F006C210E /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B84A91FB116CF7AF006C210E /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+ B84A91FC116CF7AF006C210E /* stabs_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE3C11666C8900407530 /* stabs_to_module.cc */; };
+ B84A91FD116CF7AF006C210E /* stabs_to_module_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D8116CEC0600407530 /* stabs_to_module_unittest.cc */; };
+ B88FAE1911665FE400407530 /* dwarf2diehandler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE1711665FE400407530 /* dwarf2diehandler.cc */; };
+ B88FAE261166603300407530 /* dwarf_cu_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE1E1166603300407530 /* dwarf_cu_to_module.cc */; };
+ B88FAE271166603300407530 /* dwarf_line_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE201166603300407530 /* dwarf_line_to_module.cc */; };
+ B88FAE281166603300407530 /* language.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE221166603300407530 /* language.cc */; };
+ B88FAE291166603300407530 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+ B88FAE2C1166606200407530 /* macho_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E6E1166571D00DD08C9 /* macho_reader.cc */; };
+ B88FAE351166673E00407530 /* dwarf_cfi_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE331166673E00407530 /* dwarf_cfi_to_module.cc */; };
+ B88FAE3B11666C6F00407530 /* stabs_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE3911666C6F00407530 /* stabs_reader.cc */; };
+ B88FAE3E11666C8900407530 /* stabs_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE3C11666C8900407530 /* stabs_to_module.cc */; };
+ B88FAF37116A595400407530 /* cfi_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAF34116A595400407530 /* cfi_assembler.cc */; };
+ B88FAF38116A595400407530 /* dwarf2reader_cfi_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAF36116A595400407530 /* dwarf2reader_cfi_unittest.cc */; };
+ B88FAF3F116A5A2E00407530 /* dwarf2reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F95B422F0E0E22D100DBDE83 /* dwarf2reader.cc */; };
+ B88FAF40116A5A2E00407530 /* bytereader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F95B422C0E0E22D100DBDE83 /* bytereader.cc */; };
+ B88FB00F116BDEA700407530 /* stabs_reader_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB003116BDE7200407530 /* stabs_reader_unittest.cc */; };
+ B88FB010116BDEA700407530 /* stabs_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE3911666C6F00407530 /* stabs_reader.cc */; };
+ B88FB028116BE03100407530 /* test_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE0911665B5700407530 /* test_assembler.cc */; };
+ B88FB029116BE03100407530 /* gmock-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0EA311665AEA00DD08C9 /* gmock-all.cc */; };
+ B88FB02A116BE03100407530 /* gtest_main.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E9F11665AC300DD08C9 /* gtest_main.cc */; };
+ B88FB02B116BE03100407530 /* gtest-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0EA011665AC300DD08C9 /* gtest-all.cc */; };
+ B88FB03F116BE24200407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB042116BE3C400407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB057116C0CDE00407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB0BD116CEAE000407530 /* module_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0B5116CEA8A00407530 /* module_unittest.cc */; };
+ B88FB0C1116CEB0600407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB0C4116CEB4100407530 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+ B88FB0E3116CEEB000407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB0E5116CEED300407530 /* dwarf2diehandler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE1711665FE400407530 /* dwarf2diehandler.cc */; };
+ B88FB0E6116CEED300407530 /* dwarf2diehandler_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0DB116CEC5800407530 /* dwarf2diehandler_unittest.cc */; };
+ B88FB0F6116CEF2000407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB0FA116CF00E00407530 /* dwarf_line_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE201166603300407530 /* dwarf_line_to_module.cc */; };
+ B88FB0FB116CF00E00407530 /* dwarf_line_to_module_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D7116CEC0600407530 /* dwarf_line_to_module_unittest.cc */; };
+ B88FB0FE116CF02400407530 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+ B88FB10E116CF08100407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB112116CF1F000407530 /* dwarf_cu_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE1E1166603300407530 /* dwarf_cu_to_module.cc */; };
+ B88FB113116CF1F000407530 /* dwarf_cu_to_module_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D6116CEC0600407530 /* dwarf_cu_to_module_unittest.cc */; };
+ B88FB114116CF1F000407530 /* language.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE221166603300407530 /* language.cc */; };
+ B88FB115116CF1F000407530 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+ B88FB123116CF28500407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB129116CF2DD00407530 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+ B88FB12A116CF2DD00407530 /* dwarf_cfi_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE331166673E00407530 /* dwarf_cfi_to_module.cc */; };
+ B88FB12B116CF2DD00407530 /* dwarf_cfi_to_module_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D5116CEC0600407530 /* dwarf_cfi_to_module_unittest.cc */; };
+ B88FB139116CF31600407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB13D116CF38300407530 /* cfi_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAF34116A595400407530 /* cfi_assembler.cc */; };
+ B88FB13E116CF38300407530 /* bytereader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F95B422C0E0E22D100DBDE83 /* bytereader.cc */; };
+ B88FB13F116CF38300407530 /* bytereader_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0DA116CEC5800407530 /* bytereader_unittest.cc */; };
+ B88FB14F116CF4AE00407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ B88FB152116CF4D300407530 /* byte_cursor_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D4116CEC0600407530 /* byte_cursor_unittest.cc */; };
+ B89E0E781166576C00DD08C9 /* macho_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E6E1166571D00DD08C9 /* macho_reader.cc */; };
+ B89E0E7A1166576C00DD08C9 /* macho_dump.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E701166573700DD08C9 /* macho_dump.cc */; };
+ B89E0E9911665A7200DD08C9 /* macho_reader_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E6D1166571D00DD08C9 /* macho_reader_unittest.cc */; };
+ B89E0E9A11665A7200DD08C9 /* macho_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E6E1166571D00DD08C9 /* macho_reader.cc */; };
+ B8C5B5171166534700D34F4E /* dwarf2reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F95B422F0E0E22D100DBDE83 /* dwarf2reader.cc */; };
+ B8C5B5181166534700D34F4E /* bytereader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F95B422C0E0E22D100DBDE83 /* bytereader.cc */; };
+ B8C5B5191166534700D34F4E /* macho_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 557800890BE1F3AB00EC23E0 /* macho_utilities.cc */; };
+ B8C5B51A1166534700D34F4E /* file_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650410B52F6D800611104 /* file_id.cc */; };
+ B8C5B51B1166534700D34F4E /* macho_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650430B52F6D800611104 /* macho_id.cc */; };
+ B8C5B51C1166534700D34F4E /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650450B52F6D800611104 /* macho_walker.cc */; };
+ B8C5B51D1166534700D34F4E /* dump_syms.cc in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* dump_syms.cc */; };
+ B8C5B51E1166534700D34F4E /* dump_syms_tool.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF186E0B1BB43700F8391B /* dump_syms_tool.cc */; };
+ B8C5B523116653BA00D34F4E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; };
+ D21F97D711CBA12300239E38 /* test_assembler_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D9116CEC0600407530 /* test_assembler_unittest.cc */; };
+ D21F97D811CBA13D00239E38 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+ D21F97E911CBA1FF00239E38 /* test_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE0911665B5700407530 /* test_assembler.cc */; };
+ EB06C7531FEBC516000214D9 /* path_helper.cc in Sources */ = {isa = PBXBuildFile; fileRef = EB06C7511FEBC515000214D9 /* path_helper.cc */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 8B31051411F100CF00FCF3E4 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = D21F97D111CBA0F200239E38;
+ remoteInfo = test_assembler_unittest;
+ };
+ B84A91F9116CF796006C210E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B84A9200116CF7D2006C210E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B84A91F3116CF784006C210E;
+ remoteInfo = stabs_to_module_unittest;
+ };
+ B88FAFCE116BDD7000407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B89E0E9411665A6400DD08C9;
+ remoteInfo = macho_reader_unittest;
+ };
+ B88FAFD0116BDD7000407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FAF2E116A591D00407530;
+ remoteInfo = dwarf2reader_cfi_unittest;
+ };
+ B88FB01C116BDF9800407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB006116BDE8300407530;
+ remoteInfo = stabs_reader_unittest;
+ };
+ B88FB039116BE17E00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB087116CE6D800407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB08F116CE71000407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB0BF116CEAFE00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB0C7116CEB4A00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB0B8116CEABF00407530;
+ remoteInfo = module_unittest;
+ };
+ B88FB0E7116CEEDA00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB0F7116CEF2E00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB10F116CF08A00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB124116CF29E00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB13B116CF35C00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB150116CF4C100407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB023116BDFFF00407530;
+ remoteInfo = gtestmockall;
+ };
+ B88FB15A116CF53E00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB14A116CF4A700407530;
+ remoteInfo = byte_cursor_unittest;
+ };
+ B88FB15C116CF54B00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB11E116CF27F00407530;
+ remoteInfo = dwarf_cfi_to_module_unittest;
+ };
+ B88FB15E116CF54B00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB0F1116CEF1900407530;
+ remoteInfo = dwarf_line_to_module_unittest;
+ };
+ B88FB160116CF54B00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB109116CF07900407530;
+ remoteInfo = dwarf_cu_to_module_unittest;
+ };
+ B88FB164116CF54B00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB0DE116CEEA800407530;
+ remoteInfo = dwarf2diehandler_unittest;
+ };
+ B88FB166116CF54B00407530 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B88FB134116CF30F00407530;
+ remoteInfo = bytereader_unittest;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 08FB7796FE84155DC02AAC07 /* dump_syms.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = dump_syms.cc; path = ../../../common/mac/dump_syms.cc; sourceTree = "<group>"; };
+ 08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 162F64F8161C591500CD68D5 /* arch_utilities.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = arch_utilities.cc; path = ../../../common/mac/arch_utilities.cc; sourceTree = "<group>"; };
+ 162F64F9161C591500CD68D5 /* arch_utilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = arch_utilities.h; path = ../../../common/mac/arch_utilities.h; sourceTree = "<group>"; };
+ 4262382521AC496F00E5A3A6 /* dwarf_range_list_handler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_range_list_handler.cc; path = ../../../common/dwarf_range_list_handler.cc; sourceTree = "<group>"; };
+ 4262382621AC496F00E5A3A6 /* dwarf_range_list_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_range_list_handler.h; path = ../../../common/dwarf_range_list_handler.h; sourceTree = "<group>"; };
+ 4D72CAF413DFBAC2006CABE3 /* md5.cc */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = md5.cc; path = ../../../common/md5.cc; sourceTree = SOURCE_ROOT; };
+ 557800890BE1F3AB00EC23E0 /* macho_utilities.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macho_utilities.cc; path = ../../../common/mac/macho_utilities.cc; sourceTree = SOURCE_ROOT; };
+ 5578008A0BE1F3AB00EC23E0 /* macho_utilities.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macho_utilities.h; path = ../../../common/mac/macho_utilities.h; sourceTree = SOURCE_ROOT; };
+ 8B31023E11F0CF1C00FCF3E4 /* Breakpad.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Breakpad.xcconfig; path = ../../../common/mac/Breakpad.xcconfig; sourceTree = SOURCE_ROOT; };
+ 8B3102D411F0D60300FCF3E4 /* BreakpadDebug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadDebug.xcconfig; path = ../../../common/mac/BreakpadDebug.xcconfig; sourceTree = SOURCE_ROOT; };
+ 8B3102D511F0D60300FCF3E4 /* BreakpadRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadRelease.xcconfig; path = ../../../common/mac/BreakpadRelease.xcconfig; sourceTree = SOURCE_ROOT; };
+ 8BCAAA4A1CE3A7980046090B /* elf_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = elf_reader.cc; path = ../../../common/dwarf/elf_reader.cc; sourceTree = "<group>"; };
+ 8BCAAA4B1CE3A7980046090B /* elf_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = elf_reader.h; path = ../../../common/dwarf/elf_reader.h; sourceTree = "<group>"; };
+ 9BDF186D0B1BB43700F8391B /* dump_syms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dump_syms.h; path = ../../../common/mac/dump_syms.h; sourceTree = "<group>"; };
+ 9BDF186E0B1BB43700F8391B /* dump_syms_tool.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = dump_syms_tool.cc; sourceTree = "<group>"; };
+ 9BE650410B52F6D800611104 /* file_id.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = file_id.cc; path = ../../../common/mac/file_id.cc; sourceTree = SOURCE_ROOT; };
+ 9BE650420B52F6D800611104 /* file_id.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = file_id.h; path = ../../../common/mac/file_id.h; sourceTree = SOURCE_ROOT; };
+ 9BE650430B52F6D800611104 /* macho_id.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macho_id.cc; path = ../../../common/mac/macho_id.cc; sourceTree = SOURCE_ROOT; };
+ 9BE650440B52F6D800611104 /* macho_id.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macho_id.h; path = ../../../common/mac/macho_id.h; sourceTree = SOURCE_ROOT; };
+ 9BE650450B52F6D800611104 /* macho_walker.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macho_walker.cc; path = ../../../common/mac/macho_walker.cc; sourceTree = SOURCE_ROOT; };
+ 9BE650460B52F6D800611104 /* macho_walker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macho_walker.h; path = ../../../common/mac/macho_walker.h; sourceTree = SOURCE_ROOT; };
+ B84A91F4116CF784006C210E /* stabs_to_module_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = stabs_to_module_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FAE0911665B5700407530 /* test_assembler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = test_assembler.cc; path = ../../../common/test_assembler.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE0A11665B5700407530 /* test_assembler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_assembler.h; path = ../../../common/test_assembler.h; sourceTree = SOURCE_ROOT; };
+ B88FAE1711665FE400407530 /* dwarf2diehandler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2diehandler.cc; path = ../../../common/dwarf/dwarf2diehandler.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE1811665FE400407530 /* dwarf2diehandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf2diehandler.h; path = ../../../common/dwarf/dwarf2diehandler.h; sourceTree = SOURCE_ROOT; };
+ B88FAE1D1166603300407530 /* byte_cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = byte_cursor.h; path = ../../../common/byte_cursor.h; sourceTree = SOURCE_ROOT; };
+ B88FAE1E1166603300407530 /* dwarf_cu_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_cu_to_module.cc; path = ../../../common/dwarf_cu_to_module.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE1F1166603300407530 /* dwarf_cu_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_cu_to_module.h; path = ../../../common/dwarf_cu_to_module.h; sourceTree = SOURCE_ROOT; };
+ B88FAE201166603300407530 /* dwarf_line_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_line_to_module.cc; path = ../../../common/dwarf_line_to_module.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE211166603300407530 /* dwarf_line_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_line_to_module.h; path = ../../../common/dwarf_line_to_module.h; sourceTree = SOURCE_ROOT; };
+ B88FAE221166603300407530 /* language.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = language.cc; path = ../../../common/language.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE231166603300407530 /* language.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = language.h; path = ../../../common/language.h; sourceTree = SOURCE_ROOT; };
+ B88FAE241166603300407530 /* module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = module.cc; path = ../../../common/module.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE251166603300407530 /* module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = module.h; path = ../../../common/module.h; sourceTree = SOURCE_ROOT; };
+ B88FAE331166673E00407530 /* dwarf_cfi_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_cfi_to_module.cc; path = ../../../common/dwarf_cfi_to_module.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE341166673E00407530 /* dwarf_cfi_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_cfi_to_module.h; path = ../../../common/dwarf_cfi_to_module.h; sourceTree = SOURCE_ROOT; };
+ B88FAE3911666C6F00407530 /* stabs_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_reader.cc; path = ../../../common/stabs_reader.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE3A11666C6F00407530 /* stabs_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stabs_reader.h; path = ../../../common/stabs_reader.h; sourceTree = SOURCE_ROOT; };
+ B88FAE3C11666C8900407530 /* stabs_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_to_module.cc; path = ../../../common/stabs_to_module.cc; sourceTree = SOURCE_ROOT; };
+ B88FAE3D11666C8900407530 /* stabs_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stabs_to_module.h; path = ../../../common/stabs_to_module.h; sourceTree = SOURCE_ROOT; };
+ B88FAF2F116A591E00407530 /* dwarf2reader_cfi_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dwarf2reader_cfi_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FAF34116A595400407530 /* cfi_assembler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cfi_assembler.cc; path = ../../../common/dwarf/cfi_assembler.cc; sourceTree = SOURCE_ROOT; };
+ B88FAF35116A595400407530 /* cfi_assembler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cfi_assembler.h; path = ../../../common/dwarf/cfi_assembler.h; sourceTree = SOURCE_ROOT; };
+ B88FAF36116A595400407530 /* dwarf2reader_cfi_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2reader_cfi_unittest.cc; path = ../../../common/dwarf/dwarf2reader_cfi_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB003116BDE7200407530 /* stabs_reader_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_reader_unittest.cc; path = ../../../common/stabs_reader_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB007116BDE8300407530 /* stabs_reader_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = stabs_reader_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FB024116BDFFF00407530 /* libgtestmockall.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgtestmockall.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FB0B5116CEA8A00407530 /* module_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = module_unittest.cc; path = ../../../common/module_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0B9116CEABF00407530 /* module_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = module_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FB0D4116CEC0600407530 /* byte_cursor_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = byte_cursor_unittest.cc; path = ../../../common/byte_cursor_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0D5116CEC0600407530 /* dwarf_cfi_to_module_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_cfi_to_module_unittest.cc; path = ../../../common/dwarf_cfi_to_module_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0D6116CEC0600407530 /* dwarf_cu_to_module_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_cu_to_module_unittest.cc; path = ../../../common/dwarf_cu_to_module_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0D7116CEC0600407530 /* dwarf_line_to_module_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_line_to_module_unittest.cc; path = ../../../common/dwarf_line_to_module_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0D8116CEC0600407530 /* stabs_to_module_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_to_module_unittest.cc; path = ../../../common/stabs_to_module_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0D9116CEC0600407530 /* test_assembler_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = test_assembler_unittest.cc; path = ../../../common/test_assembler_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0DA116CEC5800407530 /* bytereader_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bytereader_unittest.cc; path = ../../../common/dwarf/bytereader_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0DB116CEC5800407530 /* dwarf2diehandler_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2diehandler_unittest.cc; path = ../../../common/dwarf/dwarf2diehandler_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B88FB0DF116CEEA800407530 /* dwarf2diehandler_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dwarf2diehandler_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FB0F2116CEF1900407530 /* dwarf_line_to_module_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dwarf_line_to_module_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FB10A116CF07900407530 /* dwarf_cu_to_module_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dwarf_cu_to_module_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FB11F116CF27F00407530 /* dwarf_cfi_to_module_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dwarf_cfi_to_module_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FB135116CF30F00407530 /* bytereader_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = bytereader_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B88FB14B116CF4A700407530 /* byte_cursor_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = byte_cursor_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B89E0E6D1166571D00DD08C9 /* macho_reader_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macho_reader_unittest.cc; path = ../../../common/mac/macho_reader_unittest.cc; sourceTree = SOURCE_ROOT; };
+ B89E0E6E1166571D00DD08C9 /* macho_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macho_reader.cc; path = ../../../common/mac/macho_reader.cc; sourceTree = SOURCE_ROOT; };
+ B89E0E6F1166571D00DD08C9 /* macho_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macho_reader.h; path = ../../../common/mac/macho_reader.h; sourceTree = SOURCE_ROOT; };
+ B89E0E701166573700DD08C9 /* macho_dump.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = macho_dump.cc; sourceTree = "<group>"; };
+ B89E0E741166575200DD08C9 /* macho_dump */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = macho_dump; sourceTree = BUILT_PRODUCTS_DIR; };
+ B89E0E9511665A6400DD08C9 /* macho_reader_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = macho_reader_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B89E0E9F11665AC300DD08C9 /* gtest_main.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gtest_main.cc; path = ../../../testing/googletest/src/gtest_main.cc; sourceTree = SOURCE_ROOT; };
+ B89E0EA011665AC300DD08C9 /* gtest-all.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gtest-all.cc"; path = "../../../testing/googletest/src/gtest-all.cc"; sourceTree = SOURCE_ROOT; };
+ B89E0EA311665AEA00DD08C9 /* gmock-all.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gmock-all.cc"; path = "../../../testing/googlemock/src/gmock-all.cc"; sourceTree = SOURCE_ROOT; };
+ B8C5B5111166531A00D34F4E /* dump_syms */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dump_syms; sourceTree = BUILT_PRODUCTS_DIR; };
+ B8E8CA0C1156C854009E61B2 /* byteswap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = byteswap.h; path = ../../../common/mac/byteswap.h; sourceTree = SOURCE_ROOT; };
+ D21F97D211CBA0F200239E38 /* test_assembler_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = test_assembler_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ EB06C7511FEBC515000214D9 /* path_helper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = path_helper.cc; path = ../../../common/path_helper.cc; sourceTree = "<group>"; };
+ EB06C7521FEBC516000214D9 /* path_helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = path_helper.h; path = ../../../common/path_helper.h; sourceTree = "<group>"; };
+ F95B422B0E0E22D100DBDE83 /* bytereader-inl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "bytereader-inl.h"; path = "../../../common/dwarf/bytereader-inl.h"; sourceTree = SOURCE_ROOT; };
+ F95B422C0E0E22D100DBDE83 /* bytereader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bytereader.cc; path = ../../../common/dwarf/bytereader.cc; sourceTree = SOURCE_ROOT; };
+ F95B422D0E0E22D100DBDE83 /* bytereader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bytereader.h; path = ../../../common/dwarf/bytereader.h; sourceTree = SOURCE_ROOT; };
+ F95B422E0E0E22D100DBDE83 /* dwarf2enums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf2enums.h; path = ../../../common/dwarf/dwarf2enums.h; sourceTree = SOURCE_ROOT; };
+ F95B422F0E0E22D100DBDE83 /* dwarf2reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2reader.cc; path = ../../../common/dwarf/dwarf2reader.cc; sourceTree = SOURCE_ROOT; };
+ F95B42300E0E22D100DBDE83 /* dwarf2reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf2reader.h; path = ../../../common/dwarf/dwarf2reader.h; sourceTree = SOURCE_ROOT; };
+ F95B42310E0E22D100DBDE83 /* line_state_machine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = line_state_machine.h; path = ../../../common/dwarf/line_state_machine.h; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ B84A91F2116CF784006C210E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B84A91F8116CF78F006C210E /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FAF2D116A591D00407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB042116BE3C400407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB005116BDE8300407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB03F116BE24200407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB022116BDFFF00407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB0B7116CEABF00407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB0C1116CEB0600407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB0DD116CEEA800407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB0E3116CEEB000407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB0F0116CEF1900407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB0F6116CEF2000407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB108116CF07900407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB10E116CF08100407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB11D116CF27F00407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB123116CF28500407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB133116CF30F00407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB139116CF31600407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB149116CF4A700407530 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB14F116CF4AE00407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B89E0E721166575200DD08C9 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B89E0E9311665A6400DD08C9 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB057116C0CDE00407530 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B8C5B50F1166531A00D34F4E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B8C5B523116653BA00D34F4E /* Foundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ D21F97D011CBA0F200239E38 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D21F97D811CBA13D00239E38 /* libgtestmockall.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 08FB7794FE84155DC02AAC07 /* dump_syms */ = {
+ isa = PBXGroup;
+ children = (
+ 8B31023E11F0CF1C00FCF3E4 /* Breakpad.xcconfig */,
+ 8B3102D411F0D60300FCF3E4 /* BreakpadDebug.xcconfig */,
+ 8B3102D511F0D60300FCF3E4 /* BreakpadRelease.xcconfig */,
+ B89E0E9D11665A9500DD08C9 /* TESTING */,
+ F9F5344B0E7C8FFC0012363F /* DWARF */,
+ B89E0E6C1166569700DD08C9 /* MACHO */,
+ B88FAE3811666A1700407530 /* STABS */,
+ B88FAE1C11665FFD00407530 /* MODULE */,
+ 162F64F8161C591500CD68D5 /* arch_utilities.cc */,
+ 162F64F9161C591500CD68D5 /* arch_utilities.h */,
+ B88FAE1D1166603300407530 /* byte_cursor.h */,
+ B88FB0D4116CEC0600407530 /* byte_cursor_unittest.cc */,
+ B8E8CA0C1156C854009E61B2 /* byteswap.h */,
+ 9BE650410B52F6D800611104 /* file_id.cc */,
+ 9BE650420B52F6D800611104 /* file_id.h */,
+ 9BDF186D0B1BB43700F8391B /* dump_syms.h */,
+ 08FB7796FE84155DC02AAC07 /* dump_syms.cc */,
+ 9BDF186E0B1BB43700F8391B /* dump_syms_tool.cc */,
+ B89E0E701166573700DD08C9 /* macho_dump.cc */,
+ 4D72CAF413DFBAC2006CABE3 /* md5.cc */,
+ EB06C7511FEBC515000214D9 /* path_helper.cc */,
+ EB06C7521FEBC516000214D9 /* path_helper.h */,
+ 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */,
+ 1AB674ADFE9D54B511CA2CBB /* Products */,
+ );
+ name = dump_syms;
+ sourceTree = "<group>";
+ };
+ 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB779EFE84155DC02AAC07 /* Foundation.framework */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+ 1AB674ADFE9D54B511CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ B8C5B5111166531A00D34F4E /* dump_syms */,
+ B89E0E741166575200DD08C9 /* macho_dump */,
+ B89E0E9511665A6400DD08C9 /* macho_reader_unittest */,
+ B88FAF2F116A591E00407530 /* dwarf2reader_cfi_unittest */,
+ B88FB007116BDE8300407530 /* stabs_reader_unittest */,
+ B88FB024116BDFFF00407530 /* libgtestmockall.a */,
+ B88FB0B9116CEABF00407530 /* module_unittest */,
+ B88FB0DF116CEEA800407530 /* dwarf2diehandler_unittest */,
+ B88FB0F2116CEF1900407530 /* dwarf_line_to_module_unittest */,
+ B88FB10A116CF07900407530 /* dwarf_cu_to_module_unittest */,
+ B88FB11F116CF27F00407530 /* dwarf_cfi_to_module_unittest */,
+ B88FB135116CF30F00407530 /* bytereader_unittest */,
+ B88FB14B116CF4A700407530 /* byte_cursor_unittest */,
+ B84A91F4116CF784006C210E /* stabs_to_module_unittest */,
+ D21F97D211CBA0F200239E38 /* test_assembler_unittest */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ B88FAE1C11665FFD00407530 /* MODULE */ = {
+ isa = PBXGroup;
+ children = (
+ B88FAE1E1166603300407530 /* dwarf_cu_to_module.cc */,
+ B88FAE1F1166603300407530 /* dwarf_cu_to_module.h */,
+ B88FB0D6116CEC0600407530 /* dwarf_cu_to_module_unittest.cc */,
+ B88FAE201166603300407530 /* dwarf_line_to_module.cc */,
+ B88FAE211166603300407530 /* dwarf_line_to_module.h */,
+ B88FB0D7116CEC0600407530 /* dwarf_line_to_module_unittest.cc */,
+ B88FAE221166603300407530 /* language.cc */,
+ B88FAE231166603300407530 /* language.h */,
+ B88FAE241166603300407530 /* module.cc */,
+ B88FAE251166603300407530 /* module.h */,
+ B88FB0B5116CEA8A00407530 /* module_unittest.cc */,
+ B88FAE331166673E00407530 /* dwarf_cfi_to_module.cc */,
+ B88FAE341166673E00407530 /* dwarf_cfi_to_module.h */,
+ B88FB0D5116CEC0600407530 /* dwarf_cfi_to_module_unittest.cc */,
+ B88FAE3C11666C8900407530 /* stabs_to_module.cc */,
+ B88FAE3D11666C8900407530 /* stabs_to_module.h */,
+ B88FB0D8116CEC0600407530 /* stabs_to_module_unittest.cc */,
+ );
+ name = MODULE;
+ sourceTree = "<group>";
+ };
+ B88FAE3811666A1700407530 /* STABS */ = {
+ isa = PBXGroup;
+ children = (
+ B88FB003116BDE7200407530 /* stabs_reader_unittest.cc */,
+ B88FAE3911666C6F00407530 /* stabs_reader.cc */,
+ B88FAE3A11666C6F00407530 /* stabs_reader.h */,
+ );
+ name = STABS;
+ sourceTree = "<group>";
+ };
+ B89E0E6C1166569700DD08C9 /* MACHO */ = {
+ isa = PBXGroup;
+ children = (
+ B89E0E6D1166571D00DD08C9 /* macho_reader_unittest.cc */,
+ B89E0E6E1166571D00DD08C9 /* macho_reader.cc */,
+ B89E0E6F1166571D00DD08C9 /* macho_reader.h */,
+ 557800890BE1F3AB00EC23E0 /* macho_utilities.cc */,
+ 5578008A0BE1F3AB00EC23E0 /* macho_utilities.h */,
+ 9BE650430B52F6D800611104 /* macho_id.cc */,
+ 9BE650440B52F6D800611104 /* macho_id.h */,
+ 9BE650450B52F6D800611104 /* macho_walker.cc */,
+ 9BE650460B52F6D800611104 /* macho_walker.h */,
+ );
+ name = MACHO;
+ sourceTree = "<group>";
+ };
+ B89E0E9D11665A9500DD08C9 /* TESTING */ = {
+ isa = PBXGroup;
+ children = (
+ B88FAE0911665B5700407530 /* test_assembler.cc */,
+ B88FAE0A11665B5700407530 /* test_assembler.h */,
+ B88FB0D9116CEC0600407530 /* test_assembler_unittest.cc */,
+ B89E0EA311665AEA00DD08C9 /* gmock-all.cc */,
+ B89E0E9F11665AC300DD08C9 /* gtest_main.cc */,
+ B89E0EA011665AC300DD08C9 /* gtest-all.cc */,
+ );
+ name = TESTING;
+ sourceTree = "<group>";
+ };
+ F9F5344B0E7C8FFC0012363F /* DWARF */ = {
+ isa = PBXGroup;
+ children = (
+ B88FAF34116A595400407530 /* cfi_assembler.cc */,
+ B88FAF35116A595400407530 /* cfi_assembler.h */,
+ F95B422E0E0E22D100DBDE83 /* dwarf2enums.h */,
+ F95B422F0E0E22D100DBDE83 /* dwarf2reader.cc */,
+ 4262382521AC496F00E5A3A6 /* dwarf_range_list_handler.cc */,
+ 4262382621AC496F00E5A3A6 /* dwarf_range_list_handler.h */,
+ F95B42300E0E22D100DBDE83 /* dwarf2reader.h */,
+ B88FAF36116A595400407530 /* dwarf2reader_cfi_unittest.cc */,
+ F95B422D0E0E22D100DBDE83 /* bytereader.h */,
+ F95B422B0E0E22D100DBDE83 /* bytereader-inl.h */,
+ F95B422C0E0E22D100DBDE83 /* bytereader.cc */,
+ B88FB0DA116CEC5800407530 /* bytereader_unittest.cc */,
+ F95B42310E0E22D100DBDE83 /* line_state_machine.h */,
+ B88FAE1711665FE400407530 /* dwarf2diehandler.cc */,
+ B88FAE1811665FE400407530 /* dwarf2diehandler.h */,
+ B88FB0DB116CEC5800407530 /* dwarf2diehandler_unittest.cc */,
+ 8BCAAA4A1CE3A7980046090B /* elf_reader.cc */,
+ 8BCAAA4B1CE3A7980046090B /* elf_reader.h */,
+ );
+ name = DWARF;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ B88FB020116BDFFF00407530 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ B84A91F3116CF784006C210E /* stabs_to_module_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B84A9202116CF7F0006C210E /* Build configuration list for PBXNativeTarget "stabs_to_module_unittest" */;
+ buildPhases = (
+ B84A91F1116CF784006C210E /* Sources */,
+ B84A91F2116CF784006C210E /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B84A91FA116CF796006C210E /* PBXTargetDependency */,
+ );
+ name = stabs_to_module_unittest;
+ productName = stabs_to_module_unittest;
+ productReference = B84A91F4116CF784006C210E /* stabs_to_module_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FAF2E116A591D00407530 /* dwarf2reader_cfi_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FAF33116A594800407530 /* Build configuration list for PBXNativeTarget "dwarf2reader_cfi_unittest" */;
+ buildPhases = (
+ B88FAF2C116A591D00407530 /* Sources */,
+ B88FAF2D116A591D00407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB03A116BE17E00407530 /* PBXTargetDependency */,
+ );
+ name = dwarf2reader_cfi_unittest;
+ productName = dwarf2reader_cfi_unittest;
+ productReference = B88FAF2F116A591E00407530 /* dwarf2reader_cfi_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FB006116BDE8300407530 /* stabs_reader_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB013116BDEC800407530 /* Build configuration list for PBXNativeTarget "stabs_reader_unittest" */;
+ buildPhases = (
+ B88FB004116BDE8300407530 /* Sources */,
+ B88FB005116BDE8300407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB088116CE6D800407530 /* PBXTargetDependency */,
+ );
+ name = stabs_reader_unittest;
+ productName = stabs_reader_unittest;
+ productReference = B88FB007116BDE8300407530 /* stabs_reader_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FB023116BDFFF00407530 /* gtestmockall */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB027116BE02900407530 /* Build configuration list for PBXNativeTarget "gtestmockall" */;
+ buildPhases = (
+ B88FB020116BDFFF00407530 /* Headers */,
+ B88FB021116BDFFF00407530 /* Sources */,
+ B88FB022116BDFFF00407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = gtestmockall;
+ productName = gtestmockall;
+ productReference = B88FB024116BDFFF00407530 /* libgtestmockall.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+ B88FB0B8116CEABF00407530 /* module_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB0BE116CEAFE00407530 /* Build configuration list for PBXNativeTarget "module_unittest" */;
+ buildPhases = (
+ B88FB0B6116CEABF00407530 /* Sources */,
+ B88FB0B7116CEABF00407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB0C0116CEAFE00407530 /* PBXTargetDependency */,
+ );
+ name = module_unittest;
+ productName = module_unittest;
+ productReference = B88FB0B9116CEABF00407530 /* module_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FB0DE116CEEA800407530 /* dwarf2diehandler_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB0E4116CEECE00407530 /* Build configuration list for PBXNativeTarget "dwarf2diehandler_unittest" */;
+ buildPhases = (
+ B88FB0DC116CEEA800407530 /* Sources */,
+ B88FB0DD116CEEA800407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB0E8116CEEDA00407530 /* PBXTargetDependency */,
+ );
+ name = dwarf2diehandler_unittest;
+ productName = dwarf2diehandler_unittest;
+ productReference = B88FB0DF116CEEA800407530 /* dwarf2diehandler_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FB0F1116CEF1900407530 /* dwarf_line_to_module_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB0F9116CEF9800407530 /* Build configuration list for PBXNativeTarget "dwarf_line_to_module_unittest" */;
+ buildPhases = (
+ B88FB0EF116CEF1900407530 /* Sources */,
+ B88FB0F0116CEF1900407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB0F8116CEF2E00407530 /* PBXTargetDependency */,
+ );
+ name = dwarf_line_to_module_unittest;
+ productName = dwarf_line_to_module_unittest;
+ productReference = B88FB0F2116CEF1900407530 /* dwarf_line_to_module_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FB109116CF07900407530 /* dwarf_cu_to_module_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB111116CF0A800407530 /* Build configuration list for PBXNativeTarget "dwarf_cu_to_module_unittest" */;
+ buildPhases = (
+ B88FB107116CF07900407530 /* Sources */,
+ B88FB108116CF07900407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB110116CF08A00407530 /* PBXTargetDependency */,
+ );
+ name = dwarf_cu_to_module_unittest;
+ productName = dwarf_cu_to_module_unittest;
+ productReference = B88FB10A116CF07900407530 /* dwarf_cu_to_module_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FB11E116CF27F00407530 /* dwarf_cfi_to_module_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB128116CF2C800407530 /* Build configuration list for PBXNativeTarget "dwarf_cfi_to_module_unittest" */;
+ buildPhases = (
+ B88FB11C116CF27F00407530 /* Sources */,
+ B88FB11D116CF27F00407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB125116CF29E00407530 /* PBXTargetDependency */,
+ );
+ name = dwarf_cfi_to_module_unittest;
+ productName = dwarf_cfi_to_module_unittest;
+ productReference = B88FB11F116CF27F00407530 /* dwarf_cfi_to_module_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FB134116CF30F00407530 /* bytereader_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB13A116CF33400407530 /* Build configuration list for PBXNativeTarget "bytereader_unittest" */;
+ buildPhases = (
+ B88FB132116CF30F00407530 /* Sources */,
+ B88FB133116CF30F00407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB13C116CF35C00407530 /* PBXTargetDependency */,
+ );
+ name = bytereader_unittest;
+ productName = bytereader_unittest;
+ productReference = B88FB135116CF30F00407530 /* bytereader_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B88FB14A116CF4A700407530 /* byte_cursor_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B88FB159116CF4F900407530 /* Build configuration list for PBXNativeTarget "byte_cursor_unittest" */;
+ buildPhases = (
+ B88FB148116CF4A700407530 /* Sources */,
+ B88FB149116CF4A700407530 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB151116CF4C100407530 /* PBXTargetDependency */,
+ );
+ name = byte_cursor_unittest;
+ productName = byte_cursor_unittest;
+ productReference = B88FB14B116CF4A700407530 /* byte_cursor_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B89E0E731166575200DD08C9 /* macho_dump */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B89E0E7F116657A100DD08C9 /* Build configuration list for PBXNativeTarget "macho_dump" */;
+ buildPhases = (
+ B89E0E711166575200DD08C9 /* Sources */,
+ B89E0E721166575200DD08C9 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = macho_dump;
+ productName = macho_dump;
+ productReference = B89E0E741166575200DD08C9 /* macho_dump */;
+ productType = "com.apple.product-type.tool";
+ };
+ B89E0E9411665A6400DD08C9 /* macho_reader_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B89E0E9E11665A9600DD08C9 /* Build configuration list for PBXNativeTarget "macho_reader_unittest" */;
+ buildPhases = (
+ B89E0E9211665A6400DD08C9 /* Sources */,
+ B89E0E9311665A6400DD08C9 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B88FB090116CE71000407530 /* PBXTargetDependency */,
+ );
+ name = macho_reader_unittest;
+ productName = macho_reader_unittest;
+ productReference = B89E0E9511665A6400DD08C9 /* macho_reader_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+ B8C5B5101166531A00D34F4E /* dump_syms */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B8C5B5151166533900D34F4E /* Build configuration list for PBXNativeTarget "dump_syms" */;
+ buildPhases = (
+ B8C5B50E1166531A00D34F4E /* Sources */,
+ B8C5B50F1166531A00D34F4E /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = dump_syms;
+ productName = dump_syms;
+ productReference = B8C5B5111166531A00D34F4E /* dump_syms */;
+ productType = "com.apple.product-type.tool";
+ };
+ D21F97D111CBA0F200239E38 /* test_assembler_unittest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = D21F97D611CBA11000239E38 /* Build configuration list for PBXNativeTarget "test_assembler_unittest" */;
+ buildPhases = (
+ D21F97CF11CBA0F200239E38 /* Sources */,
+ D21F97D011CBA0F200239E38 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = test_assembler_unittest;
+ productName = test_assembler_unittest;
+ productReference = D21F97D211CBA0F200239E38 /* test_assembler_unittest */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 08FB7793FE84155DC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ };
+ buildConfigurationList = 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "dump_syms" */;
+ compatibilityVersion = "Xcode 3.1";
+ developmentRegion = English;
+ hasScannedForEncodings = 1;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ );
+ mainGroup = 08FB7794FE84155DC02AAC07 /* dump_syms */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ B8C5B5101166531A00D34F4E /* dump_syms */,
+ B89E0E731166575200DD08C9 /* macho_dump */,
+ B88FB023116BDFFF00407530 /* gtestmockall */,
+ B88FB14A116CF4A700407530 /* byte_cursor_unittest */,
+ B89E0E9411665A6400DD08C9 /* macho_reader_unittest */,
+ B88FB006116BDE8300407530 /* stabs_reader_unittest */,
+ B88FB134116CF30F00407530 /* bytereader_unittest */,
+ B88FAF2E116A591D00407530 /* dwarf2reader_cfi_unittest */,
+ B88FB0DE116CEEA800407530 /* dwarf2diehandler_unittest */,
+ B88FB109116CF07900407530 /* dwarf_cu_to_module_unittest */,
+ B88FB0F1116CEF1900407530 /* dwarf_line_to_module_unittest */,
+ B88FB11E116CF27F00407530 /* dwarf_cfi_to_module_unittest */,
+ B84A91F3116CF784006C210E /* stabs_to_module_unittest */,
+ B88FB0B8116CEABF00407530 /* module_unittest */,
+ B88FAFC9116BDCAD00407530 /* all_unittests */,
+ D21F97D111CBA0F200239E38 /* test_assembler_unittest */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ B88FB094116CE73E00407530 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "set -eu\n\ncd $BUILT_PRODUCTS_DIR\npwd\n\n./byte_cursor_unittest\n./macho_reader_unittest\n./stabs_reader_unittest\n./bytereader_unittest\n./dwarf2reader_cfi_unittest\n./dwarf2diehandler_unittest\n./dwarf_cu_to_module_unittest\n./dwarf_line_to_module_unittest\n./dwarf_cfi_to_module_unittest\n./stabs_to_module_unittest\n./module_unittest\n./test_assembler_unittest\n\necho \"Expect two warnings from the following tests:\"\necho \" Errors.BadFileNumber\"\necho \" Errors.BadDirectoryNumber\"\necho \"The proper behavior of these tests is to print text that XCode confuses with compiler warnings.\"\n";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ B84A91F1116CF784006C210E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B84A91FB116CF7AF006C210E /* module.cc in Sources */,
+ B84A91FC116CF7AF006C210E /* stabs_to_module.cc in Sources */,
+ B84A91FD116CF7AF006C210E /* stabs_to_module_unittest.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FAF2C116A591D00407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FAF38116A595400407530 /* dwarf2reader_cfi_unittest.cc in Sources */,
+ B88FAF3F116A5A2E00407530 /* dwarf2reader.cc in Sources */,
+ 8BCAAA4D1CE3B1260046090B /* elf_reader.cc in Sources */,
+ B88FAF40116A5A2E00407530 /* bytereader.cc in Sources */,
+ B88FAF37116A595400407530 /* cfi_assembler.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB004116BDE8300407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB00F116BDEA700407530 /* stabs_reader_unittest.cc in Sources */,
+ B88FB010116BDEA700407530 /* stabs_reader.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB021116BDFFF00407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB028116BE03100407530 /* test_assembler.cc in Sources */,
+ B88FB029116BE03100407530 /* gmock-all.cc in Sources */,
+ B88FB02A116BE03100407530 /* gtest_main.cc in Sources */,
+ B88FB02B116BE03100407530 /* gtest-all.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB0B6116CEABF00407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB0BD116CEAE000407530 /* module_unittest.cc in Sources */,
+ B88FB0C4116CEB4100407530 /* module.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB0DC116CEEA800407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB0E5116CEED300407530 /* dwarf2diehandler.cc in Sources */,
+ B88FB0E6116CEED300407530 /* dwarf2diehandler_unittest.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB0EF116CEF1900407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB0FA116CF00E00407530 /* dwarf_line_to_module.cc in Sources */,
+ B88FB0FE116CF02400407530 /* module.cc in Sources */,
+ B88FB0FB116CF00E00407530 /* dwarf_line_to_module_unittest.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB107116CF07900407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB112116CF1F000407530 /* dwarf_cu_to_module.cc in Sources */,
+ B88FB113116CF1F000407530 /* dwarf_cu_to_module_unittest.cc in Sources */,
+ B88FB114116CF1F000407530 /* language.cc in Sources */,
+ B88FB115116CF1F000407530 /* module.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB11C116CF27F00407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB129116CF2DD00407530 /* module.cc in Sources */,
+ B88FB12A116CF2DD00407530 /* dwarf_cfi_to_module.cc in Sources */,
+ B88FB12B116CF2DD00407530 /* dwarf_cfi_to_module_unittest.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB132116CF30F00407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB13D116CF38300407530 /* cfi_assembler.cc in Sources */,
+ B88FB13E116CF38300407530 /* bytereader.cc in Sources */,
+ B88FB13F116CF38300407530 /* bytereader_unittest.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B88FB148116CF4A700407530 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B88FB152116CF4D300407530 /* byte_cursor_unittest.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B89E0E711166575200DD08C9 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 4247E63D2110D4B200482558 /* path_helper.cc in Sources */,
+ 162F6500161C5F2200CD68D5 /* arch_utilities.cc in Sources */,
+ B89E0E781166576C00DD08C9 /* macho_reader.cc in Sources */,
+ B89E0E7A1166576C00DD08C9 /* macho_dump.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B89E0E9211665A6400DD08C9 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B89E0E9911665A7200DD08C9 /* macho_reader_unittest.cc in Sources */,
+ B89E0E9A11665A7200DD08C9 /* macho_reader.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B8C5B50E1166531A00D34F4E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 4262382821AC49A000E5A3A6 /* dwarf_range_list_handler.h in Sources */,
+ 162F64FA161C591500CD68D5 /* arch_utilities.cc in Sources */,
+ B88FAE2C1166606200407530 /* macho_reader.cc in Sources */,
+ 8BCAAA4C1CE3A7980046090B /* elf_reader.cc in Sources */,
+ B8C5B5171166534700D34F4E /* dwarf2reader.cc in Sources */,
+ EB06C7531FEBC516000214D9 /* path_helper.cc in Sources */,
+ B8C5B5181166534700D34F4E /* bytereader.cc in Sources */,
+ B8C5B5191166534700D34F4E /* macho_utilities.cc in Sources */,
+ B8C5B51A1166534700D34F4E /* file_id.cc in Sources */,
+ B8C5B51B1166534700D34F4E /* macho_id.cc in Sources */,
+ B8C5B51C1166534700D34F4E /* macho_walker.cc in Sources */,
+ B8C5B51D1166534700D34F4E /* dump_syms.cc in Sources */,
+ B8C5B51E1166534700D34F4E /* dump_syms_tool.cc in Sources */,
+ B88FAE1911665FE400407530 /* dwarf2diehandler.cc in Sources */,
+ B88FAE261166603300407530 /* dwarf_cu_to_module.cc in Sources */,
+ B88FAE271166603300407530 /* dwarf_line_to_module.cc in Sources */,
+ 4262382721AC496F00E5A3A6 /* dwarf_range_list_handler.cc in Sources */,
+ B88FAE281166603300407530 /* language.cc in Sources */,
+ B88FAE291166603300407530 /* module.cc in Sources */,
+ B88FAE351166673E00407530 /* dwarf_cfi_to_module.cc in Sources */,
+ B88FAE3B11666C6F00407530 /* stabs_reader.cc in Sources */,
+ B88FAE3E11666C8900407530 /* stabs_to_module.cc in Sources */,
+ 4D72CAF513DFBAC2006CABE3 /* md5.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ D21F97CF11CBA0F200239E38 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D21F97E911CBA1FF00239E38 /* test_assembler.cc in Sources */,
+ D21F97D711CBA12300239E38 /* test_assembler_unittest.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 8B31051511F100CF00FCF3E4 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = D21F97D111CBA0F200239E38 /* test_assembler_unittest */;
+ targetProxy = 8B31051411F100CF00FCF3E4 /* PBXContainerItemProxy */;
+ };
+ B84A91FA116CF796006C210E /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B84A91F9116CF796006C210E /* PBXContainerItemProxy */;
+ };
+ B84A9201116CF7D2006C210E /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B84A91F3116CF784006C210E /* stabs_to_module_unittest */;
+ targetProxy = B84A9200116CF7D2006C210E /* PBXContainerItemProxy */;
+ };
+ B88FAFCF116BDD7000407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B89E0E9411665A6400DD08C9 /* macho_reader_unittest */;
+ targetProxy = B88FAFCE116BDD7000407530 /* PBXContainerItemProxy */;
+ };
+ B88FAFD1116BDD7000407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FAF2E116A591D00407530 /* dwarf2reader_cfi_unittest */;
+ targetProxy = B88FAFD0116BDD7000407530 /* PBXContainerItemProxy */;
+ };
+ B88FB01D116BDF9800407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB006116BDE8300407530 /* stabs_reader_unittest */;
+ targetProxy = B88FB01C116BDF9800407530 /* PBXContainerItemProxy */;
+ };
+ B88FB03A116BE17E00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB039116BE17E00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB088116CE6D800407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB087116CE6D800407530 /* PBXContainerItemProxy */;
+ };
+ B88FB090116CE71000407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB08F116CE71000407530 /* PBXContainerItemProxy */;
+ };
+ B88FB0C0116CEAFE00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB0BF116CEAFE00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB0C8116CEB4A00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB0B8116CEABF00407530 /* module_unittest */;
+ targetProxy = B88FB0C7116CEB4A00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB0E8116CEEDA00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB0E7116CEEDA00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB0F8116CEF2E00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB0F7116CEF2E00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB110116CF08A00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB10F116CF08A00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB125116CF29E00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB124116CF29E00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB13C116CF35C00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB13B116CF35C00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB151116CF4C100407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB023116BDFFF00407530 /* gtestmockall */;
+ targetProxy = B88FB150116CF4C100407530 /* PBXContainerItemProxy */;
+ };
+ B88FB15B116CF53E00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB14A116CF4A700407530 /* byte_cursor_unittest */;
+ targetProxy = B88FB15A116CF53E00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB15D116CF54B00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB11E116CF27F00407530 /* dwarf_cfi_to_module_unittest */;
+ targetProxy = B88FB15C116CF54B00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB15F116CF54B00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB0F1116CEF1900407530 /* dwarf_line_to_module_unittest */;
+ targetProxy = B88FB15E116CF54B00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB161116CF54B00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB109116CF07900407530 /* dwarf_cu_to_module_unittest */;
+ targetProxy = B88FB160116CF54B00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB165116CF54B00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB0DE116CEEA800407530 /* dwarf2diehandler_unittest */;
+ targetProxy = B88FB164116CF54B00407530 /* PBXContainerItemProxy */;
+ };
+ B88FB167116CF54B00407530 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B88FB134116CF30F00407530 /* bytereader_unittest */;
+ targetProxy = B88FB166116CF54B00407530 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB927908733DD40010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 8B3102D411F0D60300FCF3E4 /* BreakpadDebug.xcconfig */;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
+ HEADER_SEARCH_PATHS = (
+ ../../..,
+ ../../../common/mac/include/,
+ ../../../third_party/musl/include/,
+ );
+ };
+ name = Debug;
+ };
+ 1DEB927A08733DD40010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 8B3102D511F0D60300FCF3E4 /* BreakpadRelease.xcconfig */;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
+ HEADER_SEARCH_PATHS = (
+ ../../..,
+ ../../../common/mac/include/,
+ ../../../third_party/musl/include/,
+ );
+ };
+ name = Release;
+ };
+ B84A91F6116CF784006C210E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = stabs_to_module_unittest;
+ };
+ name = Debug;
+ };
+ B84A91F7116CF784006C210E /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = stabs_to_module_unittest;
+ };
+ name = Release;
+ };
+ B88FAF31116A591F00407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
+ PRODUCT_NAME = dwarf2reader_cfi_unittest;
+ };
+ name = Debug;
+ };
+ B88FAF32116A591F00407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
+ PRODUCT_NAME = dwarf2reader_cfi_unittest;
+ };
+ name = Release;
+ };
+ B88FAFCA116BDCAD00407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = all_unittests;
+ };
+ name = Debug;
+ };
+ B88FAFCB116BDCAD00407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = all_unittests;
+ };
+ name = Release;
+ };
+ B88FB009116BDE8400407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = stabs_reader_unittest;
+ };
+ name = Debug;
+ };
+ B88FB00A116BDE8400407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = stabs_reader_unittest;
+ };
+ name = Release;
+ };
+ B88FB025116BE00100407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = gtestmockall;
+ };
+ name = Debug;
+ };
+ B88FB026116BE00100407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = gtestmockall;
+ };
+ name = Release;
+ };
+ B88FB0BB116CEAC000407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = module_unittest;
+ };
+ name = Debug;
+ };
+ B88FB0BC116CEAC000407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = module_unittest;
+ };
+ name = Release;
+ };
+ B88FB0E1116CEEA800407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = dwarf2diehandler_unittest;
+ };
+ name = Debug;
+ };
+ B88FB0E2116CEEA800407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = dwarf2diehandler_unittest;
+ };
+ name = Release;
+ };
+ B88FB0F4116CEF1900407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = dwarf_line_to_module_unittest;
+ };
+ name = Debug;
+ };
+ B88FB0F5116CEF1900407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = dwarf_line_to_module_unittest;
+ };
+ name = Release;
+ };
+ B88FB10C116CF07A00407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = dwarf_cu_to_module_unittest;
+ };
+ name = Debug;
+ };
+ B88FB10D116CF07A00407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = dwarf_cu_to_module_unittest;
+ };
+ name = Release;
+ };
+ B88FB121116CF28000407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = dwarf_cfi_to_module_unittest;
+ };
+ name = Debug;
+ };
+ B88FB122116CF28000407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = dwarf_cfi_to_module_unittest;
+ };
+ name = Release;
+ };
+ B88FB137116CF30F00407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = bytereader_unittest;
+ };
+ name = Debug;
+ };
+ B88FB138116CF30F00407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ );
+ PRODUCT_NAME = bytereader_unittest;
+ };
+ name = Release;
+ };
+ B88FB14D116CF4A800407530 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ );
+ PRODUCT_NAME = byte_cursor_unittest;
+ };
+ name = Debug;
+ };
+ B88FB14E116CF4A800407530 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ );
+ PRODUCT_NAME = byte_cursor_unittest;
+ };
+ name = Release;
+ };
+ B89E0E761166575300DD08C9 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = macho_dump;
+ };
+ name = Debug;
+ };
+ B89E0E771166575300DD08C9 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = macho_dump;
+ };
+ name = Release;
+ };
+ B89E0E9711665A6400DD08C9 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ );
+ PRODUCT_NAME = macho_reader_unittest;
+ };
+ name = Debug;
+ };
+ B89E0E9811665A6400DD08C9 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ );
+ PRODUCT_NAME = macho_reader_unittest;
+ };
+ name = Release;
+ };
+ B8C5B5131166531B00D34F4E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
+ GCC_VERSION = "";
+ PRODUCT_NAME = dump_syms;
+ };
+ name = Debug;
+ };
+ B8C5B5141166531B00D34F4E /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
+ GCC_VERSION = "";
+ PRODUCT_NAME = dump_syms;
+ };
+ name = Release;
+ };
+ D21F97D411CBA0F200239E38 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ );
+ PRODUCT_NAME = test_assembler_unittest;
+ };
+ name = Debug;
+ };
+ D21F97D511CBA0F200239E38 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ $inherited,
+ ../../../testing/googletest,
+ ../../../testing/googletest/include,
+ ../../../testing/googlemock,
+ ../../../testing/googlemock/include,
+ );
+ PRODUCT_NAME = test_assembler_unittest;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "dump_syms" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB927908733DD40010E9CD /* Debug */,
+ 1DEB927A08733DD40010E9CD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B84A9202116CF7F0006C210E /* Build configuration list for PBXNativeTarget "stabs_to_module_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B84A91F6116CF784006C210E /* Debug */,
+ B84A91F7116CF784006C210E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FAF33116A594800407530 /* Build configuration list for PBXNativeTarget "dwarf2reader_cfi_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FAF31116A591F00407530 /* Debug */,
+ B88FAF32116A591F00407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FAFCC116BDCCC00407530 /* Build configuration list for PBXAggregateTarget "all_unittests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FAFCA116BDCAD00407530 /* Debug */,
+ B88FAFCB116BDCAD00407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB013116BDEC800407530 /* Build configuration list for PBXNativeTarget "stabs_reader_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB009116BDE8400407530 /* Debug */,
+ B88FB00A116BDE8400407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB027116BE02900407530 /* Build configuration list for PBXNativeTarget "gtestmockall" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB025116BE00100407530 /* Debug */,
+ B88FB026116BE00100407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB0BE116CEAFE00407530 /* Build configuration list for PBXNativeTarget "module_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB0BB116CEAC000407530 /* Debug */,
+ B88FB0BC116CEAC000407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB0E4116CEECE00407530 /* Build configuration list for PBXNativeTarget "dwarf2diehandler_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB0E1116CEEA800407530 /* Debug */,
+ B88FB0E2116CEEA800407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB0F9116CEF9800407530 /* Build configuration list for PBXNativeTarget "dwarf_line_to_module_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB0F4116CEF1900407530 /* Debug */,
+ B88FB0F5116CEF1900407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB111116CF0A800407530 /* Build configuration list for PBXNativeTarget "dwarf_cu_to_module_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB10C116CF07A00407530 /* Debug */,
+ B88FB10D116CF07A00407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB128116CF2C800407530 /* Build configuration list for PBXNativeTarget "dwarf_cfi_to_module_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB121116CF28000407530 /* Debug */,
+ B88FB122116CF28000407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB13A116CF33400407530 /* Build configuration list for PBXNativeTarget "bytereader_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB137116CF30F00407530 /* Debug */,
+ B88FB138116CF30F00407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B88FB159116CF4F900407530 /* Build configuration list for PBXNativeTarget "byte_cursor_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B88FB14D116CF4A800407530 /* Debug */,
+ B88FB14E116CF4A800407530 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B89E0E7F116657A100DD08C9 /* Build configuration list for PBXNativeTarget "macho_dump" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B89E0E761166575300DD08C9 /* Debug */,
+ B89E0E771166575300DD08C9 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B89E0E9E11665A9600DD08C9 /* Build configuration list for PBXNativeTarget "macho_reader_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B89E0E9711665A6400DD08C9 /* Debug */,
+ B89E0E9811665A6400DD08C9 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B8C5B5151166533900D34F4E /* Build configuration list for PBXNativeTarget "dump_syms" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B8C5B5131166531B00D34F4E /* Debug */,
+ B8C5B5141166531B00D34F4E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ D21F97D611CBA11000239E38 /* Build configuration list for PBXNativeTarget "test_assembler_unittest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ D21F97D411CBA0F200239E38 /* Debug */,
+ D21F97D511CBA0F200239E38 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/externals/breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc b/externals/breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc
new file mode 100644
index 0000000000..9fb8d13f2d
--- /dev/null
+++ b/externals/breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc
@@ -0,0 +1,340 @@
+// -*- mode: c++ -*-
+
+// Copyright 2011 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.
+
+// dump_syms_tool.cc: Command line tool that uses the DumpSymbols class.
+// TODO(waylonis): accept stdin
+
+#ifdef HAVE_CONFIG_H
+#include <config.h> // Must come first
+#endif
+
+#include <mach-o/arch.h>
+#include <unistd.h>
+
+#include <algorithm>
+#include <iostream>
+#include <memory>
+#include <utility>
+#include <vector>
+
+#include "common/mac/dump_syms.h"
+#include "common/mac/arch_utilities.h"
+#include "common/mac/macho_utilities.h"
+#include "common/scoped_ptr.h"
+
+using google_breakpad::DumpSymbols;
+using google_breakpad::Module;
+using google_breakpad::scoped_ptr;
+using std::vector;
+
+struct Options {
+ Options()
+ : srcPath(),
+ dsymPath(),
+ arch(),
+ header_only(false),
+ cfi(true),
+ handle_inter_cu_refs(true),
+ handle_inlines(false),
+ enable_multiple(false),
+ module_name(),
+ prefer_extern_name(false) {}
+
+ string srcPath;
+ string dsymPath;
+ std::optional<ArchInfo> arch;
+ bool header_only;
+ bool cfi;
+ bool handle_inter_cu_refs;
+ bool handle_inlines;
+ bool enable_multiple;
+ string module_name;
+ bool prefer_extern_name;
+};
+
+static bool StackFrameEntryComparator(const Module::StackFrameEntry* a,
+ const Module::StackFrameEntry* b) {
+ return a->address < b->address;
+}
+
+// Copy the CFI data from |from_module| into |to_module|, for any non-
+// overlapping ranges.
+static void CopyCFIDataBetweenModules(Module* to_module,
+ const Module* from_module) {
+ typedef vector<Module::StackFrameEntry*>::const_iterator Iterator;
+
+ // Get the CFI data from both the source and destination modules and ensure
+ // it is sorted by start address.
+ vector<Module::StackFrameEntry*> from_data;
+ from_module->GetStackFrameEntries(&from_data);
+ std::sort(from_data.begin(), from_data.end(), &StackFrameEntryComparator);
+
+ vector<Module::StackFrameEntry*> to_data;
+ to_module->GetStackFrameEntries(&to_data);
+ std::sort(to_data.begin(), to_data.end(), &StackFrameEntryComparator);
+
+ Iterator to_it = to_data.begin();
+
+ for (Iterator it = from_data.begin(); it != from_data.end(); ++it) {
+ Module::StackFrameEntry* from_entry = *it;
+ Module::Address from_entry_end = from_entry->address + from_entry->size;
+
+ // Find the first CFI record in the |to_module| that does not have an
+ // address less than the entry to be copied.
+ while (to_it != to_data.end()) {
+ if (from_entry->address > (*to_it)->address)
+ ++to_it;
+ else
+ break;
+ }
+
+ // If the entry does not overlap, then it is safe to copy to |to_module|.
+ if (to_it == to_data.end() || (from_entry->address < (*to_it)->address &&
+ from_entry_end < (*to_it)->address)) {
+ to_module->AddStackFrameEntry(
+ std::make_unique<Module::StackFrameEntry>(*from_entry));
+ }
+ }
+}
+
+static bool SetArchitecture(DumpSymbols& dump_symbols,
+ const ArchInfo& arch,
+ const std::string& filename) {
+ if (!dump_symbols.SetArchitecture(arch)) {
+ fprintf(stderr, "%s: no architecture '%s' is present in file.\n",
+ filename.c_str(),
+ GetNameFromCPUType(arch.cputype, arch.cpusubtype));
+ size_t available_size;
+ const SuperFatArch* available =
+ dump_symbols.AvailableArchitectures(&available_size);
+ if (available_size == 1)
+ fprintf(stderr, "the file's architecture is: ");
+ else
+ fprintf(stderr, "architectures present in the file are:\n");
+ for (size_t i = 0; i < available_size; i++) {
+ const SuperFatArch* arch = &available[i];
+ fprintf(stderr, "%s\n",
+ GetNameFromCPUType(arch->cputype, arch->cpusubtype));
+ }
+ return false;
+ }
+ return true;
+}
+
+static bool Start(const Options& options) {
+ SymbolData symbol_data =
+ (options.handle_inlines ? INLINES : NO_DATA) |
+ (options.cfi ? CFI : NO_DATA) | SYMBOLS_AND_FILES;
+ DumpSymbols dump_symbols(symbol_data, options.handle_inter_cu_refs,
+ options.enable_multiple, options.module_name,
+ options.prefer_extern_name);
+
+ // For x86_64 binaries, the CFI data is in the __TEXT,__eh_frame of the
+ // Mach-O file, which is not copied into the dSYM. Whereas in i386, the CFI
+ // data is in the __DWARF,__debug_frame section, which is moved into the
+ // dSYM. Therefore, to get x86_64 CFI data, dump_syms needs to look at both
+ // the dSYM and the Mach-O file. If both paths are present and CFI was
+ // requested, then consider the Module as "split" and dump all the debug data
+ // from the primary debug info file, the dSYM, and then dump additional CFI
+ // data from the source Mach-O file.
+ bool split_module =
+ !options.dsymPath.empty() && !options.srcPath.empty() && options.cfi;
+ const string& primary_file =
+ split_module ? options.dsymPath : options.srcPath;
+
+ if (!dump_symbols.Read(primary_file))
+ return false;
+
+ if (options.arch &&
+ !SetArchitecture(dump_symbols, *options.arch, primary_file)) {
+ return false;
+ }
+
+ if (options.header_only)
+ return dump_symbols.WriteSymbolFileHeader(std::cout);
+
+ // Read the primary file into a Breakpad Module.
+ Module* module = NULL;
+ if (!dump_symbols.ReadSymbolData(&module))
+ return false;
+ scoped_ptr<Module> scoped_module(module);
+
+ // If this is a split module, read the secondary Mach-O file, from which the
+ // CFI data will be extracted.
+ if (split_module && primary_file == options.dsymPath) {
+ if (!dump_symbols.Read(options.srcPath))
+ return false;
+
+ if (options.arch &&
+ !SetArchitecture(dump_symbols, *options.arch, options.srcPath)) {
+ return false;
+ }
+ Module* cfi_module = NULL;
+ if (!dump_symbols.ReadSymbolData(&cfi_module))
+ return false;
+ scoped_ptr<Module> scoped_cfi_module(cfi_module);
+
+ bool name_matches;
+ if (!options.module_name.empty()) {
+ // Ignore the basename of the dSYM and binary and use the passed-in module
+ // name.
+ name_matches = true;
+ } else {
+ name_matches = cfi_module->name() == module->name();
+ }
+
+ // Ensure that the modules are for the same debug code file.
+ if (!name_matches || cfi_module->os() != module->os() ||
+ cfi_module->architecture() != module->architecture() ||
+ cfi_module->identifier() != module->identifier()) {
+ fprintf(stderr, "Cannot generate a symbol file from split sources that do"
+ " not match.\n");
+ if (!name_matches) {
+ fprintf(stderr, "Name mismatch: binary=[%s], dSYM=[%s]\n",
+ cfi_module->name().c_str(), module->name().c_str());
+ }
+ if (cfi_module->os() != module->os()) {
+ fprintf(stderr, "OS mismatch: binary=[%s], dSYM=[%s]\n",
+ cfi_module->os().c_str(), module->os().c_str());
+ }
+ if (cfi_module->architecture() != module->architecture()) {
+ fprintf(stderr, "Architecture mismatch: binary=[%s], dSYM=[%s]\n",
+ cfi_module->architecture().c_str(),
+ module->architecture().c_str());
+ }
+ if (cfi_module->identifier() != module->identifier()) {
+ fprintf(stderr, "Identifier mismatch: binary=[%s], dSYM=[%s]\n",
+ cfi_module->identifier().c_str(), module->identifier().c_str());
+ }
+ return false;
+ }
+
+ CopyCFIDataBetweenModules(module, cfi_module);
+ }
+
+ return module->Write(std::cout, symbol_data);
+}
+
+//=============================================================================
+static void Usage(int argc, const char *argv[]) {
+ fprintf(stderr, "Output a Breakpad symbol file from a Mach-o file.\n");
+ fprintf(stderr,
+ "Usage: %s [-a ARCHITECTURE] [-c] [-g dSYM path] "
+ "[-n MODULE] [-x] <Mach-o file>\n",
+ argv[0]);
+ fprintf(stderr, "\t-i: Output module header information only.\n");
+ fprintf(stderr, "\t-a: Architecture type [default: native, or whatever is\n");
+ fprintf(stderr, "\t in the file, if it contains only one architecture]\n");
+ fprintf(stderr, "\t-g: Debug symbol file (dSYM) to dump in addition to the "
+ "Mach-o file\n");
+ fprintf(stderr, "\t-c: Do not generate CFI section\n");
+ fprintf(stderr, "\t-r: Do not handle inter-compilation unit references\n");
+ fprintf(stderr, "\t-d: Generate INLINE and INLINE_ORIGIN records\n");
+ fprintf(stderr,
+ "\t-m: Enable writing the optional 'm' field on FUNC "
+ "and PUBLIC, denoting multiple symbols for the address.\n");
+ fprintf(stderr,
+ "\t-n: Use MODULE as the name of the module rather than \n"
+ "the basename of the Mach-O file/dSYM.\n");
+ fprintf(stderr,
+ "\t-x: Prefer the PUBLIC (extern) name over the FUNC if\n"
+ "they do not match.\n");
+ fprintf(stderr, "\t-h: Usage\n");
+ fprintf(stderr, "\t-?: Usage\n");
+}
+
+//=============================================================================
+static void SetupOptions(int argc, const char *argv[], Options *options) {
+ extern int optind;
+ signed char ch;
+
+ while ((ch = getopt(argc, (char* const*)argv, "ia:g:crdm?hn:x")) != -1) {
+ switch (ch) {
+ case 'i':
+ options->header_only = true;
+ break;
+ case 'a': {
+ std::optional<ArchInfo> arch_info = GetArchInfoFromName(optarg);
+ if (!arch_info) {
+ fprintf(stderr, "%s: Invalid architecture: %s\n", argv[0], optarg);
+ Usage(argc, argv);
+ exit(1);
+ }
+ options->arch = arch_info;
+ break;
+ }
+ case 'g':
+ options->dsymPath = optarg;
+ break;
+ case 'c':
+ options->cfi = false;
+ break;
+ case 'r':
+ options->handle_inter_cu_refs = false;
+ break;
+ case 'd':
+ options->handle_inlines = true;
+ break;
+ case 'm':
+ options->enable_multiple = true;
+ break;
+ case 'n':
+ options->module_name = optarg;
+ break;
+ case 'x':
+ options->prefer_extern_name = true;
+ break;
+ case '?':
+ case 'h':
+ Usage(argc, argv);
+ exit(0);
+ break;
+ }
+ }
+
+ if ((argc - optind) != 1) {
+ fprintf(stderr, "Must specify Mach-o file\n");
+ Usage(argc, argv);
+ exit(1);
+ }
+
+ options->srcPath = argv[optind];
+}
+
+//=============================================================================
+int main (int argc, const char * argv[]) {
+ Options options;
+ bool result;
+
+ SetupOptions(argc, argv, &options);
+ result = Start(options);
+
+ return !result;
+}
diff --git a/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 */;
+}
diff --git a/externals/breakpad/src/tools/mac/upload_system_symbols/arch_constants.h b/externals/breakpad/src/tools/mac/upload_system_symbols/arch_constants.h
new file mode 100644
index 0000000000..b6dbc89a05
--- /dev/null
+++ b/externals/breakpad/src/tools/mac/upload_system_symbols/arch_constants.h
@@ -0,0 +1,66 @@
+/* Copyright 2014 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.
+*/
+
+#include <mach-o/arch.h>
+#include <mach-o/loader.h>
+#include <mach/machine.h>
+
+// Go/Cgo does not support #define constants, so turn them into symbols
+// that are reachable from Go.
+
+#ifndef CPU_TYPE_ARM64
+#define CPU_TYPE_ARM64 (CPU_TYPE_ARM | CPU_ARCH_ABI64)
+#endif
+
+#ifndef CPU_SUBTYPE_ARM64_ALL
+#define CPU_SUBTYPE_ARM64_ALL 0
+#endif
+
+#ifndef CPU_SUBTYPE_ARM64_E
+#define CPU_SUBTYPE_ARM64_E 2
+#endif
+
+const cpu_type_t kCPU_TYPE_ARM = CPU_TYPE_ARM;
+const cpu_type_t kCPU_TYPE_ARM64 = CPU_TYPE_ARM64;
+
+const cpu_subtype_t kCPU_SUBTYPE_ARM64_ALL = CPU_SUBTYPE_ARM64_ALL;
+const cpu_subtype_t kCPU_SUBTYPE_ARM64_E = CPU_SUBTYPE_ARM64_E;
+const cpu_subtype_t kCPU_SUBTYPE_ARM_V7S = CPU_SUBTYPE_ARM_V7S;
+
+const char* GetNXArchInfoName(cpu_type_t cpu_type, cpu_subtype_t cpu_subtype) {
+ const NXArchInfo* arch_info = NXGetArchInfoFromCpuType(cpu_type, cpu_subtype);
+ if (!arch_info)
+ return 0;
+ return arch_info->name;
+}
+
+const uint32_t kMachHeaderFtypeDylib = MH_DYLIB;
+const uint32_t kMachHeaderFtypeBundle = MH_BUNDLE;
+const uint32_t kMachHeaderFtypeExe = MH_EXECUTE;
+const uint32_t kMachHeaderFtypeDylinker = MH_DYLINKER;
diff --git a/externals/breakpad/src/tools/mac/upload_system_symbols/arch_reader.go b/externals/breakpad/src/tools/mac/upload_system_symbols/arch_reader.go
new file mode 100644
index 0000000000..03a764215a
--- /dev/null
+++ b/externals/breakpad/src/tools/mac/upload_system_symbols/arch_reader.go
@@ -0,0 +1,68 @@
+/* Copyright 2014 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.
+*/
+
+package main
+
+import (
+ "debug/macho"
+)
+
+/*
+#include "arch_constants.h"
+*/
+import "C"
+
+// getArchStringFromHeader takes a MachO FileHeader and returns a string that
+// represents the CPU type and subtype.
+// This function is a Go version of src/common/mac/arch_utilities.cc:BreakpadGetArchInfoFromCpuType().
+func getArchStringFromHeader(header macho.FileHeader) string {
+ // TODO(rsesek): As of 10.9.4, OS X doesn't list these in /usr/include/mach/machine.h.
+ if header.Cpu == C.kCPU_TYPE_ARM64 && header.SubCpu == C.kCPU_SUBTYPE_ARM64_ALL {
+ return "arm64"
+ }
+ if header.Cpu == C.kCPU_TYPE_ARM64 && header.SubCpu == C.kCPU_SUBTYPE_ARM64_E {
+ return "arm64e"
+ }
+ if header.Cpu == C.kCPU_TYPE_ARM && header.SubCpu == C.kCPU_SUBTYPE_ARM_V7S {
+ return "armv7s"
+ }
+
+ cstr := C.GetNXArchInfoName(C.cpu_type_t(header.Cpu), C.cpu_subtype_t(header.SubCpu))
+ if cstr == nil {
+ return ""
+ }
+ return C.GoString(cstr)
+}
+
+const (
+ MachODylib macho.Type = C.kMachHeaderFtypeDylib
+ MachOBundle = C.kMachHeaderFtypeBundle
+ MachOExe = C.kMachHeaderFtypeExe
+ MachODylinker = C.kMachHeaderFtypeDylinker
+)
diff --git a/externals/breakpad/src/tools/mac/upload_system_symbols/go.mod b/externals/breakpad/src/tools/mac/upload_system_symbols/go.mod
new file mode 100644
index 0000000000..ff21bba9fd
--- /dev/null
+++ b/externals/breakpad/src/tools/mac/upload_system_symbols/go.mod
@@ -0,0 +1,3 @@
+module upload_system_symbols
+
+go 1.17
diff --git a/externals/breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.go b/externals/breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.go
new file mode 100644
index 0000000000..f34c288ae9
--- /dev/null
+++ b/externals/breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.go
@@ -0,0 +1,484 @@
+/* Copyright 2014 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.
+*/
+
+/*
+Tool upload_system_symbols generates and uploads Breakpad symbol files for OS X system libraries.
+
+This tool shells out to the dump_syms and symupload Breakpad tools. In its default mode, this
+will find all dynamic libraries on the system, run dump_syms to create the Breakpad symbol files,
+and then upload them to Google's crash infrastructure.
+
+The tool can also be used to only dump libraries or upload from a directory. See -help for more
+information.
+
+Both i386 and x86_64 architectures will be dumped and uploaded.
+*/
+package main
+
+import (
+ "debug/macho"
+ "flag"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "log"
+ "os"
+ "os/exec"
+ "path"
+ "regexp"
+ "strings"
+ "sync"
+ "time"
+)
+
+var (
+ breakpadTools = flag.String("breakpad-tools", "out/Release/", "Path to the Breakpad tools directory, containing dump_syms and symupload.")
+ uploadOnlyPath = flag.String("upload-from", "", "Upload a directory of symbol files that has been dumped independently.")
+ dumpOnlyPath = flag.String("dump-to", "", "Dump the symbols to the specified directory, but do not upload them.")
+ systemRoot = flag.String("system-root", "", "Path to the root of the Mac OS X system whose symbols will be dumped.")
+ dumpArchitecture = flag.String("arch", "", "The CPU architecture for which symbols should be dumped. If not specified, dumps all architectures.")
+ apiKey = flag.String("api-key", "", "API key to use. If this is present, the `sym-upload-v2` protocol is used.\nSee https://chromium.googlesource.com/breakpad/breakpad/+/HEAD/docs/sym_upload_v2_protocol.md or\n`symupload`'s help for more information.")
+)
+
+var (
+ // pathsToScan are the subpaths in the systemRoot that should be scanned for shared libraries.
+ pathsToScan = []string{
+ "/System/Library/Frameworks",
+ "/System/Library/PrivateFrameworks",
+ "/usr/lib",
+ }
+
+ // optionalPathsToScan is just like pathsToScan, but the paths are permitted to be absent.
+ optionalPathsToScan = []string{
+ // Gone in 10.15.
+ "/Library/QuickTime",
+ // Not present in dumped dyld_shared_caches
+ "/System/Library/Components",
+ }
+
+ // uploadServersV1 are the list of servers to which symbols should be
+ // uploaded when using the V1 protocol.
+ uploadServersV1 = []string{
+ "https://clients2.google.com/cr/symbol",
+ "https://clients2.google.com/cr/staging_symbol",
+ }
+ // uploadServersV2 are the list of servers to which symbols should be
+ // uploaded when using the V2 protocol.
+ uploadServersV2 = []string{
+ "https://staging-crashsymbolcollector-pa.googleapis.com",
+ "https://prod-crashsymbolcollector-pa.googleapis.com",
+ }
+
+ // uploadServers are the list of servers that should be used, accounting
+ // for whether v1 or v2 protocol is used.
+ uploadServers = uploadServersV1
+
+ // blacklistRegexps match paths that should be excluded from dumping.
+ blacklistRegexps = []*regexp.Regexp{
+ regexp.MustCompile(`/System/Library/Frameworks/Python\.framework/`),
+ regexp.MustCompile(`/System/Library/Frameworks/Ruby\.framework/`),
+ regexp.MustCompile(`_profile\.dylib$`),
+ regexp.MustCompile(`_debug\.dylib$`),
+ regexp.MustCompile(`\.a$`),
+ regexp.MustCompile(`\.dat$`),
+ }
+)
+
+func main() {
+ flag.Parse()
+ log.SetFlags(0)
+
+ // If `apiKey` is set, we're using the v2 protocol.
+ if len(*apiKey) > 0 {
+ uploadServers = uploadServersV2
+ }
+
+ var uq *UploadQueue
+
+ if *uploadOnlyPath != "" {
+ // -upload-from specified, so handle that case early.
+ uq = StartUploadQueue()
+ uploadFromDirectory(*uploadOnlyPath, uq)
+ uq.Wait()
+ return
+ }
+
+ if *systemRoot == "" {
+ log.Fatal("Need a -system-root to dump symbols for")
+ }
+
+ if *dumpOnlyPath != "" {
+ // -dump-to specified, so make sure that the path is a directory.
+ if fi, err := os.Stat(*dumpOnlyPath); err != nil {
+ log.Fatalf("-dump-to location: %v", err)
+ } else if !fi.IsDir() {
+ log.Fatal("-dump-to location is not a directory")
+ }
+ }
+
+ dumpPath := *dumpOnlyPath
+ if *dumpOnlyPath == "" {
+ // If -dump-to was not specified, then run the upload pipeline and create
+ // a temporary dump output directory.
+ uq = StartUploadQueue()
+
+ if p, err := ioutil.TempDir("", "upload_system_symbols"); err != nil {
+ log.Fatalf("Failed to create temporary directory: %v", err)
+ } else {
+ dumpPath = p
+ defer os.RemoveAll(p)
+ }
+ }
+
+ dq := StartDumpQueue(*systemRoot, dumpPath, uq)
+ dq.Wait()
+ if uq != nil {
+ uq.Wait()
+ }
+}
+
+// manglePath reduces an absolute filesystem path to a string suitable as the
+// base for a file name which encodes some of the original path. The result
+// concatenates the leading initial from each path component except the last to
+// the last path component; for example /System/Library/Frameworks/AppKit
+// becomes SLFAppKit.
+// Assumes ASCII.
+func manglePath(path string) string {
+ components := strings.Split(path, "/")
+ n := len(components)
+ builder := strings.Builder{}
+ for i, component := range components {
+ if len(component) == 0 {
+ continue
+ }
+ if i < n-1 {
+ builder.WriteString(component[:1])
+ } else {
+ builder.WriteString(component)
+ }
+ }
+ return builder.String()
+}
+
+type WorkerPool struct {
+ wg sync.WaitGroup
+}
+
+// StartWorkerPool will launch numWorkers goroutines all running workerFunc.
+// When workerFunc exits, the goroutine will terminate.
+func StartWorkerPool(numWorkers int, workerFunc func()) *WorkerPool {
+ p := new(WorkerPool)
+ for i := 0; i < numWorkers; i++ {
+ p.wg.Add(1)
+ go func() {
+ workerFunc()
+ p.wg.Done()
+ }()
+ }
+ return p
+}
+
+// Wait for all the workers in the pool to complete the workerFunc.
+func (p *WorkerPool) Wait() {
+ p.wg.Wait()
+}
+
+type UploadQueue struct {
+ *WorkerPool
+ queue chan string
+}
+
+// StartUploadQueue creates a new worker pool and queue, to which paths to
+// Breakpad symbol files may be sent for uploading.
+func StartUploadQueue() *UploadQueue {
+ uq := &UploadQueue{
+ queue: make(chan string, 10),
+ }
+ uq.WorkerPool = StartWorkerPool(5, uq.worker)
+ return uq
+}
+
+// Upload enqueues the contents of filepath to be uploaded.
+func (uq *UploadQueue) Upload(filepath string) {
+ uq.queue <- filepath
+}
+
+// Done tells the queue that no more files need to be uploaded. This must be
+// called before WorkerPool.Wait.
+func (uq *UploadQueue) Done() {
+ close(uq.queue)
+}
+
+func (uq *UploadQueue) runSymUpload(symfile, server string) *exec.Cmd {
+ symUpload := path.Join(*breakpadTools, "symupload")
+ args := []string{symfile, server}
+ if len(*apiKey) > 0 {
+ args = append([]string{"-p", "sym-upload-v2", "-k", *apiKey}, args...)
+ }
+ return exec.Command(symUpload, args...)
+}
+
+func (uq *UploadQueue) worker() {
+ for symfile := range uq.queue {
+ for _, server := range uploadServers {
+ for i := 0; i < 3; i++ { // Give each upload 3 attempts to succeed.
+ cmd := uq.runSymUpload(symfile, server)
+ if output, err := cmd.Output(); err == nil {
+ // Success. No retry needed.
+ fmt.Printf("Uploaded %s to %s\n", symfile, server)
+ break
+ } else if exitError, ok := err.(*exec.ExitError); ok && exitError.ExitCode() == 2 && *apiKey != "" {
+ // Exit code 2 in protocol v2 means the file already exists on the server.
+ // No point retrying.
+ fmt.Printf("File %s already exists on %s\n", symfile, server)
+ break
+ } else {
+ log.Printf("Error running symupload(%s, %s), attempt %d: %v: %s\n", symfile, server, i, err, output)
+ time.Sleep(1 * time.Second)
+ }
+ }
+ }
+ }
+}
+
+type DumpQueue struct {
+ *WorkerPool
+ dumpPath string
+ queue chan dumpRequest
+ uq *UploadQueue
+}
+
+type dumpRequest struct {
+ path string
+ arch string
+}
+
+// StartDumpQueue creates a new worker pool to find all the Mach-O libraries in
+// root and dump their symbols to dumpPath. If an UploadQueue is passed, the
+// path to the symbol file will be enqueued there, too.
+func StartDumpQueue(root, dumpPath string, uq *UploadQueue) *DumpQueue {
+ dq := &DumpQueue{
+ dumpPath: dumpPath,
+ queue: make(chan dumpRequest),
+ uq: uq,
+ }
+ dq.WorkerPool = StartWorkerPool(12, dq.worker)
+
+ findLibsInRoot(root, dq)
+
+ return dq
+}
+
+// DumpSymbols enqueues the filepath to have its symbols dumped in the specified
+// architecture.
+func (dq *DumpQueue) DumpSymbols(filepath string, arch string) {
+ dq.queue <- dumpRequest{
+ path: filepath,
+ arch: arch,
+ }
+}
+
+func (dq *DumpQueue) Wait() {
+ dq.WorkerPool.Wait()
+ if dq.uq != nil {
+ dq.uq.Done()
+ }
+}
+
+func (dq *DumpQueue) done() {
+ close(dq.queue)
+}
+
+func (dq *DumpQueue) worker() {
+ dumpSyms := path.Join(*breakpadTools, "dump_syms")
+
+ for req := range dq.queue {
+ filebase := path.Join(dq.dumpPath, manglePath(req.path))
+ symfile := fmt.Sprintf("%s_%s.sym", filebase, req.arch)
+ f, err := os.Create(symfile)
+ if err != nil {
+ log.Fatalf("Error creating symbol file: %v", err)
+ }
+
+ cmd := exec.Command(dumpSyms, "-a", req.arch, req.path)
+ cmd.Stdout = f
+ err = cmd.Run()
+ f.Close()
+
+ if err != nil {
+ os.Remove(symfile)
+ log.Printf("Error running dump_syms(%s, %s): %v\n", req.arch, req.path, err)
+ } else if dq.uq != nil {
+ dq.uq.Upload(symfile)
+ }
+ }
+}
+
+// uploadFromDirectory handles the upload-only case and merely uploads all files in
+// a directory.
+func uploadFromDirectory(directory string, uq *UploadQueue) {
+ d, err := os.Open(directory)
+ if err != nil {
+ log.Fatalf("Could not open directory to upload: %v", err)
+ }
+ defer d.Close()
+
+ entries, err := d.Readdirnames(0)
+ if err != nil {
+ log.Fatalf("Could not read directory: %v", err)
+ }
+
+ for _, entry := range entries {
+ uq.Upload(path.Join(directory, entry))
+ }
+
+ uq.Done()
+}
+
+// findQueue is an implementation detail of the DumpQueue that finds all the
+// Mach-O files and their architectures.
+type findQueue struct {
+ *WorkerPool
+ queue chan string
+ dq *DumpQueue
+}
+
+// findLibsInRoot looks in all the pathsToScan in the root and manages the
+// interaction between findQueue and DumpQueue.
+func findLibsInRoot(root string, dq *DumpQueue) {
+ fq := &findQueue{
+ queue: make(chan string, 10),
+ dq: dq,
+ }
+ fq.WorkerPool = StartWorkerPool(12, fq.worker)
+
+ for _, p := range pathsToScan {
+ fq.findLibsInPath(path.Join(root, p), true)
+ }
+
+ for _, p := range optionalPathsToScan {
+ fq.findLibsInPath(path.Join(root, p), false)
+ }
+
+ close(fq.queue)
+ fq.Wait()
+ dq.done()
+}
+
+// findLibsInPath recursively walks the directory tree, sending file paths to
+// test for being Mach-O to the findQueue.
+func (fq *findQueue) findLibsInPath(loc string, mustExist bool) {
+ d, err := os.Open(loc)
+ if err != nil {
+ if !mustExist && os.IsNotExist(err) {
+ return
+ }
+ log.Fatalf("Could not open %s: %v", loc, err)
+ }
+ defer d.Close()
+
+ for {
+ fis, err := d.Readdir(100)
+ if err != nil && err != io.EOF {
+ log.Fatalf("Error reading directory %s: %v", loc, err)
+ }
+
+ for _, fi := range fis {
+ fp := path.Join(loc, fi.Name())
+ if fi.IsDir() {
+ fq.findLibsInPath(fp, true)
+ continue
+ } else if fi.Mode()&os.ModeSymlink != 0 {
+ continue
+ }
+
+ // Test the blacklist in the worker to not slow down this main loop.
+
+ fq.queue <- fp
+ }
+
+ if err == io.EOF {
+ break
+ }
+ }
+}
+
+func (fq *findQueue) worker() {
+ for fp := range fq.queue {
+ blacklisted := false
+ for _, re := range blacklistRegexps {
+ blacklisted = blacklisted || re.MatchString(fp)
+ }
+ if blacklisted {
+ continue
+ }
+
+ f, err := os.Open(fp)
+ if err != nil {
+ log.Printf("%s: %v", fp, err)
+ continue
+ }
+
+ fatFile, err := macho.NewFatFile(f)
+ if err == nil {
+ // The file is fat, so dump its architectures.
+ for _, fatArch := range fatFile.Arches {
+ fq.dumpMachOFile(fp, fatArch.File)
+ }
+ fatFile.Close()
+ } else if err == macho.ErrNotFat {
+ // The file isn't fat but may still be MachO.
+ thinFile, err := macho.NewFile(f)
+ if err != nil {
+ log.Printf("%s: %v", fp, err)
+ continue
+ }
+ fq.dumpMachOFile(fp, thinFile)
+ thinFile.Close()
+ } else {
+ f.Close()
+ }
+ }
+}
+
+func (fq *findQueue) dumpMachOFile(fp string, image *macho.File) {
+ if image.Type != MachODylib && image.Type != MachOBundle && image.Type != MachODylinker {
+ return
+ }
+
+ arch := getArchStringFromHeader(image.FileHeader)
+ if arch == "" {
+ // Don't know about this architecture type.
+ return
+ }
+
+ if (*dumpArchitecture != "" && *dumpArchitecture == arch) || *dumpArchitecture == "" {
+ fq.dq.DumpSymbols(fp, arch)
+ }
+}
diff --git a/externals/breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.sh b/externals/breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.sh
new file mode 100755
index 0000000000..43fd98ed52
--- /dev/null
+++ b/externals/breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.sh
@@ -0,0 +1,114 @@
+#!/bin/bash
+
+# Copyright 2023 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.
+
+# Finds the dyld_shared_cache on a system, extracts it, and dumps the symbols
+# in Breakpad format to the directory passed as the first argument
+# The script must be in the same directory as `dump_syms`,
+# `upload_system_symbols` and `dsc_extractor` binaries.
+# Exits with 0 if all supported architectures for this OS version were found and
+# dumped, and nonzero otherwise.
+
+set -ex
+
+if [[ $# -ne 1 ]]; then
+ echo "usage: $0 <destination_directory>" >& 2
+ exit 1
+fi
+
+destination_dir="$1"
+
+dir="$(dirname "$0")"
+dir="$(cd "${dir}"; pwd)"
+major_version=$(sw_vers -productVersion | cut -d . -f 1)
+if [[ "${major_version}" -lt 13 ]]; then
+ dsc_directory="/System/Library/dyld"
+else
+ dsc_directory="/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld"
+fi
+
+working_dir=$(mktemp -d)
+mkdir "${destination_dir}"
+trap 'rm -rf "${working_dir}" "${destination_dir}"' EXIT
+
+architectures=(x86_64h)
+missing_architectures=()
+# macOS >= 13 on arm64 still has a x86_64 cache for Rosetta.
+if [[ "${major_version}" -lt 13 ]] || [[ $(uname -p) == "arm" ]]; then
+ architectures+=( x86_64 )
+fi
+if [[ "${major_version}" -ge 11 ]]; then
+ architectures+=( arm64e )
+fi
+
+for arch in "${architectures[@]}"; do
+ cache="${dsc_directory}/dyld_shared_cache_${arch}"
+ if [[ ! -f "${cache}" ]]; then
+ missing_architectures+=("${arch}")
+ continue
+ fi
+ "${dir}/dsc_extractor" \
+ "${cache}" \
+ "${working_dir}/${arch}"
+ "${dir}/upload_system_symbols" \
+ --breakpad-tools="${dir}" \
+ --system-root="${working_dir}/${arch}" \
+ --dump-to="${destination_dir}"
+done
+if [[ "${#missing_architectures[@]}" -eq "${#architectures[@]}" ]]; then
+ echo "Couldn't locate dyld_shared_cache for any architectures" >& 2
+ echo "in ${dsc_directory}. Exiting." >& 2
+ exit 1
+fi
+
+rm -rf "${working_dir}"
+# We have results now, so let's keep `destination_dir`.
+trap '' EXIT
+
+"${dir}/upload_system_symbols" \
+ --breakpad-tools="${dir}" \
+ --system-root=/ \
+ --dump-to="${destination_dir}"
+
+set +x
+echo
+echo "Dumped!"
+echo "To upload, run:"
+echo
+echo "'${dir}/upload_system_symbols'" \\
+echo " --breakpad-tools='${dir}'" \\
+echo " --api-key=<YOUR API KEY>" \\
+echo " --upload-from='${destination_dir}'"
+
+if [[ "${#missing_architectures[@]}" -gt 0 ]]; then
+ echo "dyld_shared_cache not found for architecture(s):" >& 2
+ echo " " "${missing_architectures[@]}" >& 2
+ echo "You'll need to get symbols for them elsewhere." >& 2
+ exit 1
+fi