mirror of
https://github.com/yuzu-emu/breakpad.git
synced 2025-02-03 00:11:07 +00:00
As part of resolving issue 256 I'd like to check in some unit
tests(ok, just one) for the private copy of nlist that I checked in last week, plus lay some of the ground work for collecting code coverage numbers. Both of these are accomplished by leveraging the built-in facilities of Xcode & Developer Tools(namely, CPlusTest and gcov integration; however, eventually I will also add a way to get lcov results from the gcov results). I also: - renamed breakpad_nlist_64.c to breakpad_nlist_64.cc to be more consistent(even though it's not C++ code it still only gets called by C++ code so I don't have to deal with extern "C" constructs). - I created a new target (minidump_tests) that has a "Coverage" configuration with the appropriate GCC flags turned on. It is only compiled in 64-bit configurations and has 10.5 as a minimum deployment target as well as uses the 10.5 SDK. git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@260 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
parent
b0d807666f
commit
5da03791a7
|
@ -68,7 +68,18 @@
|
||||||
|
|
||||||
#ifdef __LP64__
|
#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 "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 */
|
/* Stuff lifted from <a.out.h> and <sys/exec.h> since they are gone */
|
||||||
/*
|
/*
|
||||||
|
@ -97,6 +108,9 @@ struct exec {
|
||||||
#define N_SYMOFF(x) \
|
#define N_SYMOFF(x) \
|
||||||
(N_TXTOFF(x) + (x).a_text+(x).a_data + (x).a_trsize+(x).a_drsize)
|
(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)
|
* nlist - retreive attributes from name list (string table version)
|
||||||
*/
|
*/
|
||||||
|
@ -104,8 +118,7 @@ struct exec {
|
||||||
int
|
int
|
||||||
breakpad_nlist_64(const char *name,
|
breakpad_nlist_64(const char *name,
|
||||||
breakpad_nlist *list,
|
breakpad_nlist *list,
|
||||||
const char **symbolNames)
|
const char **symbolNames) {
|
||||||
{
|
|
||||||
int fd, n;
|
int fd, n;
|
||||||
|
|
||||||
fd = open(name, O_RDONLY, 0);
|
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 */
|
/* Note: __fdnlist() is called from kvm_nlist in libkvm's kvm.c */
|
||||||
|
|
||||||
int
|
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;
|
register breakpad_nlist *p, *q;
|
||||||
breakpad_nlist space[BUFSIZ/sizeof (breakpad_nlist)];
|
breakpad_nlist space[BUFSIZ/sizeof (breakpad_nlist)];
|
||||||
|
|
81
src/client/mac/handler/breakpad_nlist_test.cc
Normal file
81
src/client/mac/handler/breakpad_nlist_test.cc
Normal file
|
@ -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;
|
||||||
|
|
||||||
|
}
|
43
src/client/mac/handler/breakpad_nlist_test.h
Normal file
43
src/client/mac/handler/breakpad_nlist_test.h
Normal file
|
@ -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();
|
||||||
|
};
|
|
@ -49,6 +49,8 @@
|
||||||
D2F6511E0BEF973600920385 /* macho_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F650FC0BEF947200920385 /* macho_id.cc */; };
|
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 */; };
|
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 */; };
|
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 */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase 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>"; };
|
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; };
|
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; };
|
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 */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
@ -132,12 +140,21 @@
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
F9AE19C00DB04A9500C98454 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
08FB7794FE84155DC02AAC07 /* MinidumpWriter */ = {
|
08FB7794FE84155DC02AAC07 /* MinidumpWriter */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
F98208A10DB32CAE0017AECA /* breakpad_nlist_64.cc */,
|
||||||
|
F98208A20DB32CAE0017AECA /* breakpad_nlist_64.h */,
|
||||||
D2F6510C0BEF94EB00920385 /* macho_walker.cc */,
|
D2F6510C0BEF94EB00920385 /* macho_walker.cc */,
|
||||||
D2F6510D0BEF94EB00920385 /* macho_walker.h */,
|
D2F6510D0BEF94EB00920385 /* macho_walker.h */,
|
||||||
D2F651070BEF949A00920385 /* dynamic_images.cc */,
|
D2F651070BEF949A00920385 /* dynamic_images.cc */,
|
||||||
|
@ -152,6 +169,9 @@
|
||||||
08FB7795FE84155DC02AAC07 /* Source */,
|
08FB7795FE84155DC02AAC07 /* Source */,
|
||||||
9B37CEEA0AF98EB600FA4BD4 /* Frameworks */,
|
9B37CEEA0AF98EB600FA4BD4 /* Frameworks */,
|
||||||
1AB674ADFE9D54B511CA2CBB /* Products */,
|
1AB674ADFE9D54B511CA2CBB /* Products */,
|
||||||
|
F9AE19B50DB040E300C98454 /* minidump_tests-Info.plist */,
|
||||||
|
F982089A0DB3280D0017AECA /* breakpad_nlist_test.h */,
|
||||||
|
F982089B0DB3280D0017AECA /* breakpad_nlist_test.cc */,
|
||||||
);
|
);
|
||||||
name = MinidumpWriter;
|
name = MinidumpWriter;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -172,6 +192,7 @@
|
||||||
8DD76F6C0486A84900D96B5E /* generator_test */,
|
8DD76F6C0486A84900D96B5E /* generator_test */,
|
||||||
9BD82A9B0B00267E0055103E /* handler_test */,
|
9BD82A9B0B00267E0055103E /* handler_test */,
|
||||||
9B7CA84E0B1297F200CD3A1D /* unit_test */,
|
9B7CA84E0B1297F200CD3A1D /* unit_test */,
|
||||||
|
F9AE19C30DB04A9500C98454 /* minidump_tests.cptest */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -257,23 +278,70 @@
|
||||||
productReference = 9BD82A9B0B00267E0055103E /* handler_test */;
|
productReference = 9BD82A9B0B00267E0055103E /* handler_test */;
|
||||||
productType = "com.apple.product-type.tool";
|
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 */
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
/* Begin PBXProject section */
|
/* Begin PBXProject section */
|
||||||
08FB7793FE84155DC02AAC07 /* Project object */ = {
|
08FB7793FE84155DC02AAC07 /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "minidump_test" */;
|
buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "minidump_test" */;
|
||||||
|
compatibilityVersion = "Xcode 2.4";
|
||||||
hasScannedForEncodings = 1;
|
hasScannedForEncodings = 1;
|
||||||
mainGroup = 08FB7794FE84155DC02AAC07 /* MinidumpWriter */;
|
mainGroup = 08FB7794FE84155DC02AAC07 /* MinidumpWriter */;
|
||||||
projectDirPath = "";
|
projectDirPath = "";
|
||||||
|
projectRoot = "";
|
||||||
targets = (
|
targets = (
|
||||||
8DD76F620486A84900D96B5E /* generator_test */,
|
8DD76F620486A84900D96B5E /* generator_test */,
|
||||||
9BD82A9A0B00267E0055103E /* handler_test */,
|
9BD82A9A0B00267E0055103E /* handler_test */,
|
||||||
9B7CA84D0B1297F200CD3A1D /* unit_test */,
|
9B7CA84D0B1297F200CD3A1D /* unit_test */,
|
||||||
|
F9AE19C20DB04A9500C98454 /* minidump_tests */,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
/* End PBXProject section */
|
/* 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 */
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
8DD76F640486A84900D96B5E /* Sources */ = {
|
8DD76F640486A84900D96B5E /* Sources */ = {
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
|
@ -324,6 +392,15 @@
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
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 */
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
|
@ -456,6 +533,168 @@
|
||||||
};
|
};
|
||||||
name = Release;
|
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 */
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */
|
/* Begin XCConfigurationList section */
|
||||||
|
@ -463,6 +702,7 @@
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
1DEB923208733DC60010E9CD /* Debug */,
|
1DEB923208733DC60010E9CD /* Debug */,
|
||||||
|
F996CB8D0DB40AE30089CCC8 /* Coverage */,
|
||||||
1DEB923308733DC60010E9CD /* Release */,
|
1DEB923308733DC60010E9CD /* Release */,
|
||||||
);
|
);
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
|
@ -472,6 +712,7 @@
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
1DEB923608733DC60010E9CD /* Debug */,
|
1DEB923608733DC60010E9CD /* Debug */,
|
||||||
|
F996CB8C0DB40AE30089CCC8 /* Coverage */,
|
||||||
1DEB923708733DC60010E9CD /* Release */,
|
1DEB923708733DC60010E9CD /* Release */,
|
||||||
);
|
);
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
|
@ -481,6 +722,7 @@
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
9B7CA8510B12984300CD3A1D /* Debug */,
|
9B7CA8510B12984300CD3A1D /* Debug */,
|
||||||
|
F996CB8F0DB40AE30089CCC8 /* Coverage */,
|
||||||
9B7CA8520B12984300CD3A1D /* Release */,
|
9B7CA8520B12984300CD3A1D /* Release */,
|
||||||
);
|
);
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
|
@ -490,11 +732,22 @@
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
9BD82AA70B0026BF0055103E /* Debug */,
|
9BD82AA70B0026BF0055103E /* Debug */,
|
||||||
|
F996CB8E0DB40AE30089CCC8 /* Coverage */,
|
||||||
9BD82AA80B0026BF0055103E /* Release */,
|
9BD82AA80B0026BF0055103E /* Release */,
|
||||||
);
|
);
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
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 */
|
/* End XCConfigurationList section */
|
||||||
};
|
};
|
||||||
rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
|
rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
|
||||||
|
|
20
src/client/mac/handler/minidump_tests-Info.plist
Normal file
20
src/client/mac/handler/minidump_tests-Info.plist
Normal file
|
@ -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>
|
|
@ -145,6 +145,18 @@ static bool CompareFile(const char *path) {
|
||||||
ASSERT_NE(fd, -1);
|
ASSERT_NE(fd, -1);
|
||||||
ASSERT_TRUE(buffer);
|
ASSERT_TRUE(buffer);
|
||||||
ASSERT_EQ(read(fd, buffer, expected_byte_count), expected_byte_count);
|
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);
|
ASSERT_EQ(memcmp(buffer, expected, expected_byte_count), 0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue