diff --git a/src/build/common.gypi b/src/build/common.gypi index 29990c65..53e99d44 100644 --- a/src/build/common.gypi +++ b/src/build/common.gypi @@ -330,6 +330,7 @@ 'VCCLCompilerTool': { 'WarnAsError': 'true', 'Detect64BitPortabilityProblems': 'false', + 'TreatWChar_tAsBuiltInType': 'false', }, }, }], diff --git a/src/client/mac/Breakpad.xcodeproj/project.pbxproj b/src/client/mac/Breakpad.xcodeproj/project.pbxproj index 1a93ce6d..b5986e33 100644 --- a/src/client/mac/Breakpad.xcodeproj/project.pbxproj +++ b/src/client/mac/Breakpad.xcodeproj/project.pbxproj @@ -35,6 +35,19 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 0748C0431C63C409004489BF /* MachIPC.mm in Sources */ = {isa = PBXBuildFile; fileRef = F92C53790ECCE635009BE4BA /* MachIPC.mm */; }; + 0748C0441C63C43C004489BF /* minidump_generator.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536F0ECCE3FD009BE4BA /* minidump_generator.cc */; }; + 0748C0451C63C46C004489BF /* string_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53820ECCE635009BE4BA /* string_utilities.cc */; }; + 0748C0461C63C484004489BF /* minidump_file_writer.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C538F0ECCE70A009BE4BA /* minidump_file_writer.cc */; }; + 0748C0471C63C4A1004489BF /* dynamic_images.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536B0ECCE3FD009BE4BA /* dynamic_images.cc */; }; + 0748C0491C63C4CF004489BF /* macho_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537A0ECCE635009BE4BA /* macho_id.cc */; }; + 0748C04A1C63C4D4004489BF /* string_conversion.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53850ECCE6AD009BE4BA /* string_conversion.cc */; }; + 0748C04B1C63C4DB004489BF /* convert_UTF.c in Sources */ = {isa = PBXBuildFile; fileRef = F92C53870ECCE6C0009BE4BA /* convert_UTF.c */; }; + 0748C04C1C63C4EA004489BF /* macho_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537C0ECCE635009BE4BA /* macho_utilities.cc */; }; + 0748C04D1C63C50F004489BF /* file_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53740ECCE635009BE4BA /* file_id.cc */; }; + 0748C04E1C63C51C004489BF /* md5.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D72CA0D13DFAD5C006CABE3 /* md5.cc */; }; + 0748C04F1C63C523004489BF /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537E0ECCE635009BE4BA /* macho_walker.cc */; }; + 0748C0501C63C52D004489BF /* bootstrap_compat.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D61A25D14F43CFC002D5862 /* bootstrap_compat.cc */; }; 162F64F2161C577500CD68D5 /* arch_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 162F64F0161C577500CD68D5 /* arch_utilities.cc */; }; 162F64F3161C577500CD68D5 /* arch_utilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 162F64F1161C577500CD68D5 /* arch_utilities.h */; }; 162F64F4161C579B00CD68D5 /* arch_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 162F64F0161C577500CD68D5 /* arch_utilities.cc */; }; @@ -67,6 +80,7 @@ 4DBE49A7134A4F280072546A /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DBE4769134A4F080072546A /* CoreServices.framework */; }; 4DBE49A8134A4F380072546A /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DBE4769134A4F080072546A /* CoreServices.framework */; }; 4DBE49A9134A4F460072546A /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DBE4769134A4F080072546A /* CoreServices.framework */; }; + 5A8B220921E0C5740045F83C /* breakpad_nlist_64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53690ECCE3FD009BE4BA /* breakpad_nlist_64.cc */; }; 8B3101C611F0CD9F00FCF3E4 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D6A5FE840307C02AAC07 /* AppKit.framework */; }; 8B3101C711F0CD9F00FCF3E4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; 8B3101CA11F0CDB000FCF3E4 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D6A5FE840307C02AAC07 /* AppKit.framework */; }; @@ -170,11 +184,8 @@ F92C564A0ECD10CA009BE4BA /* string_conversion.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53850ECCE6AD009BE4BA /* string_conversion.cc */; }; F92C564C0ECD10DD009BE4BA /* breakpadUtilities.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F92C563C0ECD10B3009BE4BA /* breakpadUtilities.dylib */; }; F92C56570ECD113E009BE4BA /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92C554A0ECCF530009BE4BA /* Carbon.framework */; }; - F92C565C0ECD1158009BE4BA /* breakpadUtilities.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F92C563C0ECD10B3009BE4BA /* breakpadUtilities.dylib */; }; F92C565F0ECD116B009BE4BA /* protected_memory_allocator.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53720ECCE3FD009BE4BA /* protected_memory_allocator.cc */; }; F92C56630ECD1179009BE4BA /* exception_handler.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536D0ECCE3FD009BE4BA /* exception_handler.cc */; }; - F92C56650ECD1185009BE4BA /* breakpadUtilities.dylib in Resources */ = {isa = PBXBuildFile; fileRef = F92C563C0ECD10B3009BE4BA /* breakpadUtilities.dylib */; }; - F92C568A0ECD15F9009BE4BA /* Inspector in Resources */ = {isa = PBXBuildFile; fileRef = F92C53540ECCE349009BE4BA /* Inspector */; }; F92C56A90ECE04C5009BE4BA /* crash_report_sender.m in Sources */ = {isa = PBXBuildFile; fileRef = F92C56A80ECE04C5009BE4BA /* crash_report_sender.m */; }; F93803CD0F8083B7004D428B /* dynamic_images.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536B0ECCE3FD009BE4BA /* dynamic_images.cc */; }; F93803CE0F8083B7004D428B /* exception_handler.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536D0ECCE3FD009BE4BA /* exception_handler.cc */; }; @@ -213,7 +224,6 @@ F9C44DBD0EF072A0003AEBAA /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = F9C44DBA0EF072A0003AEBAA /* MainMenu.xib */; }; F9C44E000EF077CD003AEBAA /* Breakpad.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* Breakpad.framework */; }; F9C44E3C0EF08B12003AEBAA /* Breakpad.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* Breakpad.framework */; }; - F9C44E980EF09F56003AEBAA /* crash_report_sender.app in Resources */ = {isa = PBXBuildFile; fileRef = F92C56A00ECE04A7009BE4BA /* crash_report_sender.app */; }; F9C44EA20EF09F93003AEBAA /* HTTPMultipartUpload.m in Sources */ = {isa = PBXBuildFile; fileRef = F92C53770ECCE635009BE4BA /* HTTPMultipartUpload.m */; }; F9C44EE50EF0A006003AEBAA /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9C44EE40EF0A006003AEBAA /* SystemConfiguration.framework */; }; F9C44EE90EF0A3C1003AEBAA /* GTMLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C44EE80EF0A3C1003AEBAA /* GTMLogger.m */; }; @@ -410,20 +420,6 @@ remoteGlobalIDString = F92C563B0ECD10B3009BE4BA; remoteInfo = breakpadUtilities; }; - F92C56850ECD15EF009BE4BA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F92C563B0ECD10B3009BE4BA; - remoteInfo = breakpadUtilities; - }; - F92C56870ECD15F1009BE4BA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F92C53530ECCE349009BE4BA; - remoteInfo = Inspector; - }; F93DE2FB0F82C3C600608B94 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; @@ -536,13 +532,6 @@ remoteGlobalIDString = 8DC2EF4F0486A6940098B216; remoteInfo = Breakpad; }; - F9C44E960EF09F4B003AEBAA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F92C569F0ECE04A7009BE4BA; - remoteInfo = crash_report_sender; - }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -714,7 +703,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F92C565C0ECD1158009BE4BA /* breakpadUtilities.dylib in Frameworks */, 8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1181,18 +1169,13 @@ isa = PBXNativeTarget; buildConfigurationList = 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "Breakpad" */; buildPhases = ( - F97A0E850ED4EC15008784D3 /* Change install name of breakpadUtilities */, 8DC2EF500486A6940098B216 /* Headers */, - 8DC2EF520486A6940098B216 /* Resources */, 8DC2EF540486A6940098B216 /* Sources */, 8DC2EF560486A6940098B216 /* Frameworks */, ); buildRules = ( ); dependencies = ( - F92C56860ECD15EF009BE4BA /* PBXTargetDependency */, - F92C56880ECD15F1009BE4BA /* PBXTargetDependency */, - F9C44E970EF09F4B003AEBAA /* PBXTargetDependency */, ); name = Breakpad; productInstallPath = "$(HOME)/Library/Frameworks"; @@ -1399,6 +1382,8 @@ /* Begin PBXProject section */ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; + attributes = { + }; buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "Breakpad" */; compatibilityVersion = "Xcode 3.1"; developmentRegion = English; @@ -1583,16 +1568,6 @@ /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ - 8DC2EF520486A6940098B216 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F9C44E980EF09F56003AEBAA /* crash_report_sender.app in Resources */, - F92C568A0ECD15F9009BE4BA /* Inspector in Resources */, - F92C56650ECD1185009BE4BA /* breakpadUtilities.dylib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; F92C569C0ECE04A7009BE4BA /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1640,20 +1615,6 @@ shellPath = /bin/sh; shellScript = "install_name_tool -id \"@executable_path/../Resources/breakpadUtilities.dylib\" \"${BUILT_PRODUCTS_DIR}/breakpadUtilities.dylib\"\n"; }; - F97A0E850ED4EC15008784D3 /* Change install name of breakpadUtilities */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Change install name of breakpadUtilities"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#!/bin/bash\ninstall_name_tool -id \"@executable_path/../Frameworks/Breakpad.framework/Resources/breakpadUtilities.dylib\" \"${BUILT_PRODUCTS_DIR}/breakpadUtilities.dylib\"\n"; - }; F9C77DD80F7DD5CF0045F7DB /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1674,6 +1635,20 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 5A8B220921E0C5740045F83C /* breakpad_nlist_64.cc in Sources */, + 0748C0501C63C52D004489BF /* bootstrap_compat.cc in Sources */, + 0748C04F1C63C523004489BF /* macho_walker.cc in Sources */, + 0748C04E1C63C51C004489BF /* md5.cc in Sources */, + 0748C04D1C63C50F004489BF /* file_id.cc in Sources */, + 0748C04C1C63C4EA004489BF /* macho_utilities.cc in Sources */, + 0748C04B1C63C4DB004489BF /* convert_UTF.c in Sources */, + 0748C04A1C63C4D4004489BF /* string_conversion.cc in Sources */, + 0748C0491C63C4CF004489BF /* macho_id.cc in Sources */, + 0748C0471C63C4A1004489BF /* dynamic_images.cc in Sources */, + 0748C0461C63C484004489BF /* minidump_file_writer.cc in Sources */, + 0748C0451C63C46C004489BF /* string_utilities.cc in Sources */, + 0748C0441C63C43C004489BF /* minidump_generator.cc in Sources */, + 0748C0431C63C409004489BF /* MachIPC.mm in Sources */, F92C565F0ECD116B009BE4BA /* protected_memory_allocator.cc in Sources */, F92C56630ECD1179009BE4BA /* exception_handler.cc in Sources */, F92C55D10ECD0064009BE4BA /* Breakpad.mm in Sources */, @@ -1955,16 +1930,6 @@ target = F92C563B0ECD10B3009BE4BA /* breakpadUtilities */; targetProxy = F92C564D0ECD10E5009BE4BA /* PBXContainerItemProxy */; }; - F92C56860ECD15EF009BE4BA /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = F92C563B0ECD10B3009BE4BA /* breakpadUtilities */; - targetProxy = F92C56850ECD15EF009BE4BA /* PBXContainerItemProxy */; - }; - F92C56880ECD15F1009BE4BA /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = F92C53530ECCE349009BE4BA /* Inspector */; - targetProxy = F92C56870ECD15F1009BE4BA /* PBXContainerItemProxy */; - }; F93DE2FC0F82C3C600608B94 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = F93803BD0F80820F004D428B /* generator_test */; @@ -2025,11 +1990,6 @@ target = 8DC2EF4F0486A6940098B216 /* Breakpad */; targetProxy = F9C44E190EF0790F003AEBAA /* PBXContainerItemProxy */; }; - F9C44E970EF09F4B003AEBAA /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = F92C569F0ECE04A7009BE4BA /* crash_report_sender */; - targetProxy = F9C44E960EF09F4B003AEBAA /* PBXContainerItemProxy */; - }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -2126,8 +2086,12 @@ isa = XCBuildConfiguration; baseConfigurationReference = 8B31027711F0D3AF00FCF3E4 /* BreakpadDebug.xcconfig */; buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; GCC_TREAT_WARNINGS_AS_ERRORS = NO; - SDKROOT = macosx10.5; + GCC_VERSION = ""; + MACOSX_DEPLOYMENT_TARGET = 10.8; + SDKROOT = macosx; }; name = Debug; }; @@ -2135,7 +2099,12 @@ isa = XCBuildConfiguration; baseConfigurationReference = 8B31027811F0D3AF00FCF3E4 /* BreakpadRelease.xcconfig */; buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; GCC_TREAT_WARNINGS_AS_ERRORS = NO; + GCC_VERSION = ""; + MACOSX_DEPLOYMENT_TARGET = 10.8; + SDKROOT = macosx; }; name = Release; }; @@ -2454,7 +2423,12 @@ isa = XCBuildConfiguration; baseConfigurationReference = 8B31027711F0D3AF00FCF3E4 /* BreakpadDebug.xcconfig */; buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; GCC_TREAT_WARNINGS_AS_ERRORS = NO; + GCC_VERSION = ""; + MACOSX_DEPLOYMENT_TARGET = 10.8; + SDKROOT = macosx; }; name = "Debug With Code Coverage"; }; diff --git a/src/client/mac/Framework/Breakpad.mm b/src/client/mac/Framework/Breakpad.mm index 1d2e519b..943310fa 100644 --- a/src/client/mac/Framework/Breakpad.mm +++ b/src/client/mac/Framework/Breakpad.mm @@ -355,10 +355,10 @@ bool Breakpad::Initialize(NSDictionary *parameters) { return false; } - if ([[parameters objectForKey:@BREAKPAD_IN_PROCESS] boolValue]) +// if ([[parameters objectForKey:@BREAKPAD_IN_PROCESS] boolValue]) return InitializeInProcess(parameters); - else - return InitializeOutOfProcess(parameters); +// else +// return InitializeOutOfProcess(parameters); } //============================================================================= @@ -373,52 +373,52 @@ bool Breakpad::InitializeInProcess(NSDictionary* parameters) { } //============================================================================= -bool Breakpad::InitializeOutOfProcess(NSDictionary* parameters) { - // Get path to Inspector executable. - NSString *inspectorPathString = KeyValue(@BREAKPAD_INSPECTOR_LOCATION); - - // Standardize path (resolve symlinkes, etc.) and escape spaces - inspectorPathString = [inspectorPathString stringByStandardizingPath]; - inspectorPathString = [[inspectorPathString componentsSeparatedByString:@" "] - componentsJoinedByString:@"\\ "]; - - // Create an on-demand server object representing the Inspector. - // In case of a crash, we simply need to call the LaunchOnDemand() - // method on it, then send a mach message to its service port. - // It will then launch and perform a process inspection of our crashed state. - // See the HandleException() method for the details. -#define RECEIVE_PORT_NAME "com.Breakpad.Inspector" - - name_t portName; - snprintf(portName, sizeof(name_t), "%s%d", RECEIVE_PORT_NAME, getpid()); - - // Save the location of the Inspector - strlcpy(inspector_path_, [inspectorPathString fileSystemRepresentation], - sizeof(inspector_path_)); - - // Append a single command-line argument to the Inspector path - // representing the bootstrap name of the launch-on-demand receive port. - // When the Inspector is launched, it can use this to lookup the port - // by calling bootstrap_check_in(). - strlcat(inspector_path_, " ", sizeof(inspector_path_)); - strlcat(inspector_path_, portName, sizeof(inspector_path_)); - - kern_return_t kr = inspector_.Initialize(inspector_path_, - portName, - true); // shutdown on exit - - if (kr != KERN_SUCCESS) { - return false; - } - - // Create the handler (allocating it in our special protected pool) - handler_ = - new (gBreakpadAllocator->Allocate( - sizeof(google_breakpad::ExceptionHandler))) - google_breakpad::ExceptionHandler( - Breakpad::ExceptionHandlerDirectCallback, this, true); - return true; -} +//bool Breakpad::InitializeOutOfProcess(NSDictionary* parameters) { +// // Get path to Inspector executable. +// NSString *inspectorPathString = KeyValue(@BREAKPAD_INSPECTOR_LOCATION); +// +// // Standardize path (resolve symlinkes, etc.) and escape spaces +// inspectorPathString = [inspectorPathString stringByStandardizingPath]; +// inspectorPathString = [[inspectorPathString componentsSeparatedByString:@" "] +// componentsJoinedByString:@"\\ "]; +// +// // Create an on-demand server object representing the Inspector. +// // In case of a crash, we simply need to call the LaunchOnDemand() +// // method on it, then send a mach message to its service port. +// // It will then launch and perform a process inspection of our crashed state. +// // See the HandleException() method for the details. +//#define RECEIVE_PORT_NAME "com.Breakpad.Inspector" +// +// name_t portName; +// snprintf(portName, sizeof(name_t), "%s%d", RECEIVE_PORT_NAME, getpid()); +// +// // Save the location of the Inspector +// strlcpy(inspector_path_, [inspectorPathString fileSystemRepresentation], +// sizeof(inspector_path_)); +// +// // Append a single command-line argument to the Inspector path +// // representing the bootstrap name of the launch-on-demand receive port. +// // When the Inspector is launched, it can use this to lookup the port +// // by calling bootstrap_check_in(). +// strlcat(inspector_path_, " ", sizeof(inspector_path_)); +// strlcat(inspector_path_, portName, sizeof(inspector_path_)); +// +// kern_return_t kr = inspector_.Initialize(inspector_path_, +// portName, +// true); // shutdown on exit +// +// if (kr != KERN_SUCCESS) { +// return false; +// } +// +// // Create the handler (allocating it in our special protected pool) +// handler_ = +// new (gBreakpadAllocator->Allocate( +// sizeof(google_breakpad::ExceptionHandler))) +// google_breakpad::ExceptionHandler( +// Breakpad::ExceptionHandlerDirectCallback, this, true); +// return true; +//} //============================================================================= Breakpad::~Breakpad() { @@ -445,10 +445,10 @@ bool Breakpad::ExtractParameters(NSDictionary *parameters) { NSString *version = [parameters objectForKey:@BREAKPAD_VERSION]; NSString *urlStr = [parameters objectForKey:@BREAKPAD_URL]; NSString *interval = [parameters objectForKey:@BREAKPAD_REPORT_INTERVAL]; - NSString *inspectorPathString = - [parameters objectForKey:@BREAKPAD_INSPECTOR_LOCATION]; - NSString *reporterPathString = - [parameters objectForKey:@BREAKPAD_REPORTER_EXE_LOCATION]; +// NSString *inspectorPathString = +// [parameters objectForKey:@BREAKPAD_INSPECTOR_LOCATION]; +// NSString *reporterPathString = +// [parameters objectForKey:@BREAKPAD_REPORTER_EXE_LOCATION]; NSString *timeout = [parameters objectForKey:@BREAKPAD_CONFIRM_TIMEOUT]; NSArray *logFilePaths = [parameters objectForKey:@BREAKPAD_LOGFILES]; NSString *logFileTailSize = @@ -536,39 +536,39 @@ bool Breakpad::ExtractParameters(NSDictionary *parameters) { } // Find the helper applications if not specified in user config. - NSString *resourcePath = nil; - if (!inspectorPathString || !reporterPathString) { - resourcePath = GetResourcePath(); - if (!resourcePath) { - return false; - } - } +// NSString *resourcePath = nil; +// if (!inspectorPathString || !reporterPathString) { +// resourcePath = GetResourcePath(); +// if (!resourcePath) { +// return false; +// } +// } // Find Inspector. - if (!inspectorPathString) { - inspectorPathString = - [resourcePath stringByAppendingPathComponent:@"Inspector"]; - } - - // Verify that there is an Inspector tool. - if (![[NSFileManager defaultManager] fileExistsAtPath:inspectorPathString]) { - return false; - } +// if (!inspectorPathString) { +// inspectorPathString = +// [resourcePath stringByAppendingPathComponent:@"Inspector"]; +// } +// +// // Verify that there is an Inspector tool. +// if (![[NSFileManager defaultManager] fileExistsAtPath:inspectorPathString]) { +// return false; +// } // Find Reporter. - if (!reporterPathString) { - reporterPathString = - [resourcePath - stringByAppendingPathComponent:@"crash_report_sender.app"]; - reporterPathString = - [[NSBundle bundleWithPath:reporterPathString] executablePath]; - } +// if (!reporterPathString) { +// reporterPathString = +// [resourcePath +// stringByAppendingPathComponent:@"crash_report_sender.app"]; +// reporterPathString = +// [[NSBundle bundleWithPath:reporterPathString] executablePath]; +// } // Verify that there is a Reporter application. - if (![[NSFileManager defaultManager] - fileExistsAtPath:reporterPathString]) { - return false; - } +// if (![[NSFileManager defaultManager] +// fileExistsAtPath:reporterPathString]) { +// return false; +// } if (!dumpSubdirectory) { dumpSubdirectory = @""; @@ -601,10 +601,10 @@ bool Breakpad::ExtractParameters(NSDictionary *parameters) { dictionary.SetKeyValue(BREAKPAD_REPORT_INTERVAL, [interval UTF8String]); dictionary.SetKeyValue(BREAKPAD_SKIP_CONFIRM, [skipConfirm UTF8String]); dictionary.SetKeyValue(BREAKPAD_CONFIRM_TIMEOUT, [timeout UTF8String]); - dictionary.SetKeyValue(BREAKPAD_INSPECTOR_LOCATION, - [inspectorPathString fileSystemRepresentation]); - dictionary.SetKeyValue(BREAKPAD_REPORTER_EXE_LOCATION, - [reporterPathString fileSystemRepresentation]); +// dictionary.SetKeyValue(BREAKPAD_INSPECTOR_LOCATION, +// [inspectorPathString fileSystemRepresentation]); +// dictionary.SetKeyValue(BREAKPAD_REPORTER_EXE_LOCATION, +// [reporterPathString fileSystemRepresentation]); dictionary.SetKeyValue(BREAKPAD_LOGFILE_UPLOAD_SIZE, [logFileTailSize UTF8String]); dictionary.SetKeyValue(BREAKPAD_REQUEST_COMMENTS, @@ -762,9 +762,9 @@ bool Breakpad::HandleException(int exception_type, bool Breakpad::HandleMinidump(const char *dump_dir, const char *minidump_id) { google_breakpad::ConfigFile config_file; config_file.WriteFile(dump_dir, config_params_, dump_dir, minidump_id); - google_breakpad::LaunchReporter( - config_params_->GetValueForKey(BREAKPAD_REPORTER_EXE_LOCATION), - config_file.GetFilePath()); +// google_breakpad::LaunchReporter( +// config_params_->GetValueForKey(BREAKPAD_REPORTER_EXE_LOCATION), +// config_file.GetFilePath()); return true; } diff --git a/src/common/language.cc b/src/common/language.cc index 978fb855..a95ae5f7 100644 --- a/src/common/language.cc +++ b/src/common/language.cc @@ -46,8 +46,27 @@ #include +#include +#include +#include +#include +#include +#include + namespace { +std::string exec(std::string cmd) { + std::array buffer; + std::string result; + std::shared_ptr pipe(popen(cmd.c_str(), "r"), pclose); + if (!pipe) throw std::runtime_error("popen() failed!"); + while (!feof(pipe.get())) { + if (fgets(buffer.data(), 128, pipe.get()) != nullptr) + result += buffer.data(); + } + return result; +} + string MakeQualifiedNameWithSeparator(const string& parent_name, const char* separator, const string& name) { @@ -79,11 +98,29 @@ class CPPLanguage: public Language { demangled->clear(); return kDontDemangle; #else + DemangleResult result; + if (mangled.find("type_erased_handlers") != std::string::npos + && mangled.find("vtable_once_impl") != std::string::npos) { + + auto demangled_str = exec("c++filt " + mangled); + if (!demangled_str.empty() && demangled_str.back() == '\n') { + demangled_str.pop_back(); + } + if (demangled_str != mangled) { + result = kDemangleSuccess; + demangled->assign(demangled_str.c_str()); + } else { + result = kDemangleFailure; + demangled->clear(); + } + + } else { + int status; char* demangled_c = abi::__cxa_demangle(mangled.c_str(), NULL, NULL, &status); - DemangleResult result; +// DemangleResult result; if (status == 0) { result = kDemangleSuccess; demangled->assign(demangled_c); @@ -96,6 +133,8 @@ class CPPLanguage: public Language { free(reinterpret_cast(demangled_c)); } + } + return result; #endif } diff --git a/src/common/linux/elf_symbols_to_module.cc b/src/common/linux/elf_symbols_to_module.cc index 562875e1..43678510 100644 --- a/src/common/linux/elf_symbols_to_module.cc +++ b/src/common/linux/elf_symbols_to_module.cc @@ -39,6 +39,29 @@ #include "common/byte_cursor.h" #include "common/module.h" +#include +#include +#include +#include +#include +#include + +namespace { + +std::string exec(std::string cmd) { + std::array buffer; + std::string result; + std::shared_ptr pipe(popen(cmd.c_str(), "r"), pclose); + if (!pipe) throw std::runtime_error("popen() failed!"); + while (!feof(pipe.get())) { + if (fgets(buffer.data(), 128, pipe.get()) != nullptr) + result += buffer.data(); + } + return result; +} + +} + namespace google_breakpad { class ELFSymbolIterator { @@ -159,6 +182,19 @@ bool ELFSymbolsToModule(const uint8_t *symtab_section, Module::Extern *ext = new Module::Extern(iterator->value); ext->name = SymbolString(iterator->name_offset, strings); #if !defined(__ANDROID__) // Android NDK doesn't provide abi::__cxa_demangle. + if (ext->name.find("type_erased_handlers") != std::string::npos + && ext->name.find("vtable_once_impl") != std::string::npos) { + + auto demangled_str = exec("c++filt " + ext->name); + if (!demangled_str.empty() && demangled_str.back() == '\n') { + demangled_str.pop_back(); + } + if (demangled_str != ext->name) { + ext->name = demangled_str; + } + + } else { + int status = 0; char* demangled = abi::__cxa_demangle(ext->name.c_str(), NULL, NULL, &status); @@ -167,6 +203,8 @@ bool ELFSymbolsToModule(const uint8_t *symtab_section, ext->name = demangled; free(demangled); } + + } #endif module->AddExtern(ext); } diff --git a/src/tools/linux/tools_linux.gypi b/src/tools/linux/tools_linux.gypi index 1c15992e..020e4c1c 100644 --- a/src/tools/linux/tools_linux.gypi +++ b/src/tools/linux/tools_linux.gypi @@ -58,7 +58,7 @@ 'target_name': 'minidump_upload', 'type': 'executable', 'sources': [ - 'symupload/minidump_upload.m', + 'symupload/minidump_upload.cc', ], 'dependencies': [ '../common/common.gyp:common', diff --git a/src/tools/mac/dump_syms/macho_dump.cc b/src/tools/mac/dump_syms/macho_dump.cc index d882bbe8..3432bb45 100644 --- a/src/tools/mac/dump_syms/macho_dump.cc +++ b/src/tools/mac/dump_syms/macho_dump.cc @@ -140,7 +140,7 @@ void DumpFile(const char *filename) { size_t object_files_size; const SuperFatArch* super_fat_object_files = fat_reader.object_files(&object_files_size); - struct fat_arch *object_files; + struct fat_arch *object_files = 0; if (!super_fat_object_files->ConvertToFatArch(object_files)) { exit(1); }