diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/client/mac/handler/breakpad_nlist_64.cc (renamed from src/client/mac/handler/breakpad_nlist_64.c) | 22 | ||||
-rw-r--r-- | src/client/mac/handler/breakpad_nlist_test.cc | 81 | ||||
-rw-r--r-- | src/client/mac/handler/breakpad_nlist_test.h | 43 | ||||
-rw-r--r-- | src/client/mac/handler/minidump_test.xcodeproj/project.pbxproj | 253 | ||||
-rw-r--r-- | src/client/mac/handler/minidump_tests-Info.plist | 20 | ||||
-rw-r--r-- | src/client/minidump_file_writer_unittest.cc | 12 |
6 files changed, 426 insertions, 5 deletions
diff --git a/src/client/mac/handler/breakpad_nlist_64.c b/src/client/mac/handler/breakpad_nlist_64.cc index 2429235b..c220d88d 100644 --- a/src/client/mac/handler/breakpad_nlist_64.c +++ b/src/client/mac/handler/breakpad_nlist_64.cc @@ -68,7 +68,18 @@ #ifdef __LP64__ +#include <mach-o/nlist.h> +#include <mach-o/loader.h> +#include <mach-o/fat.h> +#include <stdlib.h> +#include <fcntl.h> +#include <sys/types.h> +#include <sys/uio.h> +#include <unistd.h> #include "breakpad_nlist_64.h" +#include <TargetConditionals.h> +#include <stdio.h> +#include <mach/mach.h> /* Stuff lifted from <a.out.h> and <sys/exec.h> since they are gone */ /* @@ -97,6 +108,9 @@ struct exec { #define N_SYMOFF(x) \ (N_TXTOFF(x) + (x).a_text+(x).a_data + (x).a_trsize+(x).a_drsize) +int +__breakpad_fdnlist_64(int fd, breakpad_nlist *list, const char **symbolNames); + /* * nlist - retreive attributes from name list (string table version) */ @@ -104,8 +118,7 @@ struct exec { int breakpad_nlist_64(const char *name, breakpad_nlist *list, - const char **symbolNames) -{ + const char **symbolNames) { int fd, n; fd = open(name, O_RDONLY, 0); @@ -119,8 +132,7 @@ breakpad_nlist_64(const char *name, /* Note: __fdnlist() is called from kvm_nlist in libkvm's kvm.c */ int -__breakpad_fdnlist_64(int fd, breakpad_nlist *list, const char **symbolNames) -{ +__breakpad_fdnlist_64(int fd, breakpad_nlist *list, const char **symbolNames) { register breakpad_nlist *p, *q; breakpad_nlist space[BUFSIZ/sizeof (breakpad_nlist)]; @@ -223,7 +235,7 @@ __breakpad_fdnlist_64(int fd, breakpad_nlist *list, const char **symbolNames) #elif TARGET_CPU_PPC64 if (fat_archs[i].cputype == CPU_TYPE_POWERPC64) { #else -#error undefined cpu! +#error undefined cpu! { #endif fap = &fat_archs[i]; diff --git a/src/client/mac/handler/breakpad_nlist_test.cc b/src/client/mac/handler/breakpad_nlist_test.cc new file mode 100644 index 00000000..d0dd2f6a --- /dev/null +++ b/src/client/mac/handler/breakpad_nlist_test.cc @@ -0,0 +1,81 @@ +/* + * BreakpadNlistTest.cpp + * minidump_test + * + * Created by Neal Sidhwaney on 4/13/08. + * Copyright 2008 Google Inc. All rights reserved. + * + */ + +#include "breakpad_nlist_test.h" +#include <mach-o/nlist.h> +#include "breakpad_nlist_64.h" + +BreakpadNlistTest test1(TEST_INVOCATION(BreakpadNlistTest, CompareToNM)); + +BreakpadNlistTest::BreakpadNlistTest(TestInvocation *invocation) + : TestCase(invocation) { +} + + +BreakpadNlistTest::~BreakpadNlistTest() { +} + +void BreakpadNlistTest::CompareToNM() { +#if TARGET_CPU_X86_64 + system("/usr/bin/nm -arch x86_64 /usr/lib/dyld > /tmp/dyld-namelist.txt"); +#elif TARGET_CPU_PPC64 + system("/usr/bin/nm -arch ppc64 /usr/lib/dyld > /tmp/dyld-namelist.txt"); +#endif + + FILE *fd = fopen("/tmp/dyld-namelist.txt","rt"); + + char oneNMAddr[30]; + char symbolType; + char symbolName[500]; + while(!feof(fd)) { + fscanf(fd,"%s %c %s",oneNMAddr, &symbolType, symbolName); + breakpad_nlist symbolList[2]; + breakpad_nlist &list = symbolList[0]; + + memset(symbolList,0, sizeof(breakpad_nlist)*2); + const char *symbolNames[2]; + symbolNames[0] = (const char*)symbolName; + symbolNames[1] = "\0"; + breakpad_nlist_64("/usr/lib/dyld",&list, symbolNames); + uint64_t nmAddr = strtol(oneNMAddr,NULL,16); + if(!IsSymbolMoreThanOnceInDyld(symbolName)) { + CPTAssert(nmAddr == symbolList[0].n_value); + } + } + + fclose(fd); +} + +bool BreakpadNlistTest::IsSymbolMoreThanOnceInDyld(const char *symbolName) { + //These are the symbols that occur more than once when nm dumps + // the symbol table of /usr/lib/dyld. Our nlist program returns + // the first address because it's doing a search so we need to exclude + // these from causing the test to fail + const char *multipleSymbols[] = { + "__Z41__static_initialization_and_destruction_0ii", + "___tcf_0", + "___tcf_1", + "_read_encoded_value_with_base", + "_read_sleb128", + "_read_uleb128", + "\0"}; + + bool found = false; + + for(int i = 0; multipleSymbols[i][0]; i++) { + if(!strcmp(multipleSymbols[i],symbolName)) { + found = true; + break; + } + + } + + return found; + +} diff --git a/src/client/mac/handler/breakpad_nlist_test.h b/src/client/mac/handler/breakpad_nlist_test.h new file mode 100644 index 00000000..c778a9b3 --- /dev/null +++ b/src/client/mac/handler/breakpad_nlist_test.h @@ -0,0 +1,43 @@ +/* + * BreakpadNlistTest.h + * minidump_test + * + * Created by Neal Sidhwaney on 4/13/08. + * Copyright 2008 Google Inc. All rights reserved. + * + */ + +#include <CPlusTest/CPlusTest.h> + +/* +__Z41__static_initialization_and_destruction_0ii +__Z41__static_initialization_and_destruction_0ii +__Z41__static_initialization_and_destruction_0ii +___tcf_0 +___tcf_0 +___tcf_0 +___tcf_1 +_read_encoded_value_with_base +_read_sleb128 +_read_uleb128 + +*/ + +class BreakpadNlistTest : public TestCase { +private: + + // nm dumps multiple addresses for the same symbol in + // /usr/lib/dyld. So we track those so we don't report failures + // in mismatches between what our nlist returns and what nm has + // for the duplicate symbols. + bool IsSymbolMoreThanOnceInDyld(const char *symbolName); + +public: + BreakpadNlistTest(TestInvocation* invocation); + virtual ~BreakpadNlistTest(); + + + /* This test case runs nm on /usr/lib/dyld and then compares the + output of every symbol to what our nlist implementation returns */ + void CompareToNM(); +}; diff --git a/src/client/mac/handler/minidump_test.xcodeproj/project.pbxproj b/src/client/mac/handler/minidump_test.xcodeproj/project.pbxproj index f3c7665f..8e3e9567 100644 --- a/src/client/mac/handler/minidump_test.xcodeproj/project.pbxproj +++ b/src/client/mac/handler/minidump_test.xcodeproj/project.pbxproj @@ -49,6 +49,8 @@ D2F6511E0BEF973600920385 /* macho_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F650FC0BEF947200920385 /* macho_id.cc */; }; D2F6511F0BEF973900920385 /* macho_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F650FE0BEF947200920385 /* macho_utilities.cc */; }; D2F651210BEF975400920385 /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F6510C0BEF94EB00920385 /* macho_walker.cc */; }; + F982089C0DB3280D0017AECA /* breakpad_nlist_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = F982089B0DB3280D0017AECA /* breakpad_nlist_test.cc */; }; + F98208A30DB32CAE0017AECA /* breakpad_nlist_64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F98208A10DB32CAE0017AECA /* breakpad_nlist_64.cc */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -106,6 +108,12 @@ D2F651080BEF949A00920385 /* dynamic_images.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = dynamic_images.h; sourceTree = "<group>"; }; D2F6510C0BEF94EB00920385 /* macho_walker.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macho_walker.cc; path = ../../../common/mac/macho_walker.cc; sourceTree = SOURCE_ROOT; }; D2F6510D0BEF94EB00920385 /* macho_walker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macho_walker.h; path = ../../../common/mac/macho_walker.h; sourceTree = SOURCE_ROOT; }; + F982089A0DB3280D0017AECA /* breakpad_nlist_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = breakpad_nlist_test.h; sourceTree = "<group>"; }; + F982089B0DB3280D0017AECA /* breakpad_nlist_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = breakpad_nlist_test.cc; sourceTree = "<group>"; }; + F98208A10DB32CAE0017AECA /* breakpad_nlist_64.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = breakpad_nlist_64.cc; sourceTree = "<group>"; }; + F98208A20DB32CAE0017AECA /* breakpad_nlist_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = breakpad_nlist_64.h; sourceTree = "<group>"; }; + F9AE19B50DB040E300C98454 /* minidump_tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "minidump_tests-Info.plist"; sourceTree = "<group>"; }; + F9AE19C30DB04A9500C98454 /* minidump_tests.cptest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = minidump_tests.cptest; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -132,12 +140,21 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + F9AE19C00DB04A9500C98454 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 08FB7794FE84155DC02AAC07 /* MinidumpWriter */ = { isa = PBXGroup; children = ( + F98208A10DB32CAE0017AECA /* breakpad_nlist_64.cc */, + F98208A20DB32CAE0017AECA /* breakpad_nlist_64.h */, D2F6510C0BEF94EB00920385 /* macho_walker.cc */, D2F6510D0BEF94EB00920385 /* macho_walker.h */, D2F651070BEF949A00920385 /* dynamic_images.cc */, @@ -152,6 +169,9 @@ 08FB7795FE84155DC02AAC07 /* Source */, 9B37CEEA0AF98EB600FA4BD4 /* Frameworks */, 1AB674ADFE9D54B511CA2CBB /* Products */, + F9AE19B50DB040E300C98454 /* minidump_tests-Info.plist */, + F982089A0DB3280D0017AECA /* breakpad_nlist_test.h */, + F982089B0DB3280D0017AECA /* breakpad_nlist_test.cc */, ); name = MinidumpWriter; sourceTree = "<group>"; @@ -172,6 +192,7 @@ 8DD76F6C0486A84900D96B5E /* generator_test */, 9BD82A9B0B00267E0055103E /* handler_test */, 9B7CA84E0B1297F200CD3A1D /* unit_test */, + F9AE19C30DB04A9500C98454 /* minidump_tests.cptest */, ); name = Products; sourceTree = "<group>"; @@ -257,23 +278,70 @@ productReference = 9BD82A9B0B00267E0055103E /* handler_test */; productType = "com.apple.product-type.tool"; }; + F9AE19C20DB04A9500C98454 /* minidump_tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = F9AE19C70DB04AA200C98454 /* Build configuration list for PBXNativeTarget "minidump_tests" */; + buildPhases = ( + F9AE19BE0DB04A9500C98454 /* Resources */, + F9AE19BF0DB04A9500C98454 /* Sources */, + F9AE19C00DB04A9500C98454 /* Frameworks */, + F9AE19C10DB04A9500C98454 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = minidump_tests; + productName = minidump_tests; + productReference = F9AE19C30DB04A9500C98454 /* minidump_tests.cptest */; + productType = "com.apple.product-type.bundle"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "minidump_test" */; + compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 1; mainGroup = 08FB7794FE84155DC02AAC07 /* MinidumpWriter */; projectDirPath = ""; + projectRoot = ""; targets = ( 8DD76F620486A84900D96B5E /* generator_test */, 9BD82A9A0B00267E0055103E /* handler_test */, 9B7CA84D0B1297F200CD3A1D /* unit_test */, + F9AE19C20DB04A9500C98454 /* minidump_tests */, ); }; /* End PBXProject section */ +/* Begin PBXResourcesBuildPhase section */ + F9AE19BE0DB04A9500C98454 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + F9AE19C10DB04A9500C98454 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n# Run gcov on the framework getting tested\nif [ \"${CONFIGURATION}\" = 'Coverage' ];\nthen\n FRAMEWORK_NAME=minidump_tests\n FRAMEWORK_OBJ_DIR=${OBJROOT}/${PROJECT_NAME}.build/${CONFIGURATION}/${FRAMEWORK_NAME}.build/Objects-normal/${NATIVE_ARCH_ACTUAL}\n mkdir -p coverage\n pushd coverage\n echo find ${OBJROOT} -name *.gcda -exec gcov -o ${FRAMEWORK_OBJ_DIR} {} \\;\n find ${OBJROOT} -name *.gcda -exec gcov -o ${FRAMEWORK_OBJ_DIR} {} \\;\n popd\nfi "; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 8DD76F640486A84900D96B5E /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -324,6 +392,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + F9AE19BF0DB04A9500C98454 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F982089C0DB3280D0017AECA /* breakpad_nlist_test.cc in Sources */, + F98208A30DB32CAE0017AECA /* breakpad_nlist_64.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ @@ -456,6 +533,168 @@ }; name = Release; }; + F996CB8C0DB40AE30089CCC8 /* Coverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_LDFLAGS = "-lcrypto"; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Coverage; + }; + F996CB8D0DB40AE30089CCC8 /* Coverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_CW_ASM_SYNTAX = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_THREADSAFE_STATICS = NO; + INSTALL_PATH = "$(HOME)/bin"; + PRODUCT_NAME = generator_test; + USER_HEADER_SEARCH_PATHS = "../../../** $(inherited)"; + ZERO_LINK = NO; + }; + name = Coverage; + }; + F996CB8E0DB40AE30089CCC8 /* Coverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(NATIVE_ARCH)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_CFLAGS = "-Wall"; + PREBINDING = NO; + PRODUCT_NAME = handler_test; + USER_HEADER_SEARCH_PATHS = "../../.. $(inherited)"; + ZERO_LINK = NO; + }; + name = Coverage; + }; + F996CB8F0DB40AE30089CCC8 /* Coverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = "$(HOME)/bin"; + PREBINDING = NO; + PRODUCT_NAME = unit_test; + USER_HEADER_SEARCH_PATHS = "../../../** $(inherited)"; + ZERO_LINK = NO; + }; + name = Coverage; + }; + F996CB900DB40AE30089CCC8 /* Coverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_64_BIT)", + ppc64, + ); + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h"; + INFOPLIST_FILE = "minidump_tests-Info.plist"; + INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.5; + OTHER_LDFLAGS = ( + "-framework", + Carbon, + "-framework", + CPlusTest, + "-lgcov", + ); + PREBINDING = NO; + PRODUCT_NAME = minidump_tests; + SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; + WRAPPER_EXTENSION = cptest; + }; + name = Coverage; + }; + F9AE19C40DB04A9500C98454 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_64_BIT)", + ppc64, + ); + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h"; + INFOPLIST_FILE = "minidump_tests-Info.plist"; + INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.5; + OTHER_LDFLAGS = ( + "-framework", + Carbon, + "-framework", + CPlusTest, + ); + PREBINDING = NO; + PRODUCT_NAME = minidump_tests; + SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; + WRAPPER_EXTENSION = cptest; + }; + name = Debug; + }; + F9AE19C50DB04A9500C98454 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_64_BIT)", + ppc64, + ); + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h"; + INFOPLIST_FILE = "minidump_tests-Info.plist"; + INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.5; + OTHER_LDFLAGS = ( + "-framework", + Carbon, + "-framework", + CPlusTest, + ); + PREBINDING = NO; + PRODUCT_NAME = minidump_tests; + SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; + WRAPPER_EXTENSION = cptest; + ZERO_LINK = NO; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -463,6 +702,7 @@ isa = XCConfigurationList; buildConfigurations = ( 1DEB923208733DC60010E9CD /* Debug */, + F996CB8D0DB40AE30089CCC8 /* Coverage */, 1DEB923308733DC60010E9CD /* Release */, ); defaultConfigurationIsVisible = 0; @@ -472,6 +712,7 @@ isa = XCConfigurationList; buildConfigurations = ( 1DEB923608733DC60010E9CD /* Debug */, + F996CB8C0DB40AE30089CCC8 /* Coverage */, 1DEB923708733DC60010E9CD /* Release */, ); defaultConfigurationIsVisible = 0; @@ -481,6 +722,7 @@ isa = XCConfigurationList; buildConfigurations = ( 9B7CA8510B12984300CD3A1D /* Debug */, + F996CB8F0DB40AE30089CCC8 /* Coverage */, 9B7CA8520B12984300CD3A1D /* Release */, ); defaultConfigurationIsVisible = 0; @@ -490,11 +732,22 @@ isa = XCConfigurationList; buildConfigurations = ( 9BD82AA70B0026BF0055103E /* Debug */, + F996CB8E0DB40AE30089CCC8 /* Coverage */, 9BD82AA80B0026BF0055103E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + F9AE19C70DB04AA200C98454 /* Build configuration list for PBXNativeTarget "minidump_tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F9AE19C40DB04A9500C98454 /* Debug */, + F996CB900DB40AE30089CCC8 /* Coverage */, + F9AE19C50DB04A9500C98454 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; diff --git a/src/client/mac/handler/minidump_tests-Info.plist b/src/client/mac/handler/minidump_tests-Info.plist new file mode 100644 index 00000000..909bbe22 --- /dev/null +++ b/src/client/mac/handler/minidump_tests-Info.plist @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleExecutable</key> + <string>${EXECUTABLE_NAME}</string> + <key>CFBundleIdentifier</key> + <string>com.google.breakpad.minidump_tests</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundlePackageType</key> + <string>BNDL</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleVersion</key> + <string>1.0</string> +</dict> +</plist> diff --git a/src/client/minidump_file_writer_unittest.cc b/src/client/minidump_file_writer_unittest.cc index 58750667..8eadff46 100644 --- a/src/client/minidump_file_writer_unittest.cc +++ b/src/client/minidump_file_writer_unittest.cc @@ -145,6 +145,18 @@ static bool CompareFile(const char *path) { ASSERT_NE(fd, -1); ASSERT_TRUE(buffer); ASSERT_EQ(read(fd, buffer, expected_byte_count), expected_byte_count); + + char *b1, *b2; + b1 = (char*)buffer; + b2 = (char*)expected; + while (*b1 == *b2) { + b1++; + b2++; + } + + printf("%d\n",b1 - (char*)buffer); + + ASSERT_EQ(memcmp(buffer, expected, expected_byte_count), 0); return true; } |