mirror of
https://github.com/yuzu-emu/breakpad.git
synced 2025-08-04 07:01:15 +00:00
Issue 258: Added test cases for ReadTaskMemory, reorganized project file, renamed filenames inside comments
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@263 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
parent
9033edcd7b
commit
4c39c138fe
|
@ -1,81 +0,0 @@
|
||||||
/*
|
|
||||||
* 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;
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
/*
|
|
||||||
* 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();
|
|
||||||
};
|
|
|
@ -31,9 +31,9 @@ extern "C" { // needed to compile on Leopard
|
||||||
#include <mach-o/nlist.h>
|
#include <mach-o/nlist.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "breakpad_nlist_64.h"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "breakpad_nlist_64.h"
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_vm.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
@ -128,7 +128,8 @@ static void* ReadTaskString(task_port_t target_task,
|
||||||
mach_vm_size_t size_to_read =
|
mach_vm_size_t size_to_read =
|
||||||
size_to_end > kMaxStringLength ? kMaxStringLength : size_to_end;
|
size_to_end > kMaxStringLength ? kMaxStringLength : size_to_end;
|
||||||
|
|
||||||
return ReadTaskMemory(target_task, address, size_to_read);
|
kern_return_t kr;
|
||||||
|
return ReadTaskMemory(target_task, address, size_to_read, &kr);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -139,7 +140,8 @@ static void* ReadTaskString(task_port_t target_task,
|
||||||
// and should be freed by the caller.
|
// and should be freed by the caller.
|
||||||
void* ReadTaskMemory(task_port_t target_task,
|
void* ReadTaskMemory(task_port_t target_task,
|
||||||
const void* address,
|
const void* address,
|
||||||
size_t length) {
|
size_t length,
|
||||||
|
kern_return_t *kr) {
|
||||||
void* result = NULL;
|
void* result = NULL;
|
||||||
int systemPageSize = getpagesize();
|
int systemPageSize = getpagesize();
|
||||||
|
|
||||||
|
@ -155,12 +157,19 @@ void* ReadTaskMemory(task_port_t target_task,
|
||||||
uint8_t* local_start;
|
uint8_t* local_start;
|
||||||
uint32_t local_length;
|
uint32_t local_length;
|
||||||
|
|
||||||
kern_return_t r = mach_vm_read(target_task,
|
kern_return_t r;
|
||||||
|
|
||||||
|
r = mach_vm_read(target_task,
|
||||||
page_address,
|
page_address,
|
||||||
page_size,
|
page_size,
|
||||||
reinterpret_cast<vm_offset_t*>(&local_start),
|
reinterpret_cast<vm_offset_t*>(&local_start),
|
||||||
&local_length);
|
&local_length);
|
||||||
|
|
||||||
|
|
||||||
|
if(kr != NULL) {
|
||||||
|
*kr = r;
|
||||||
|
}
|
||||||
|
|
||||||
if (r == KERN_SUCCESS) {
|
if (r == KERN_SUCCESS) {
|
||||||
result = malloc(length);
|
result = malloc(length);
|
||||||
if (result != NULL) {
|
if (result != NULL) {
|
||||||
|
@ -289,6 +298,7 @@ void DynamicImages::ReadImageInfoForTask() {
|
||||||
void *imageList = GetDyldAllImageInfosPointer();
|
void *imageList = GetDyldAllImageInfosPointer();
|
||||||
|
|
||||||
if (imageList) {
|
if (imageList) {
|
||||||
|
kern_return_t kr;
|
||||||
// Read the structure inside of dyld that contains information about
|
// Read the structure inside of dyld that contains information about
|
||||||
// loaded images. We're reading from the desired task's address space.
|
// loaded images. We're reading from the desired task's address space.
|
||||||
|
|
||||||
|
@ -298,7 +308,7 @@ void DynamicImages::ReadImageInfoForTask() {
|
||||||
dyld_all_image_infos *dyldInfo = reinterpret_cast<dyld_all_image_infos*>
|
dyld_all_image_infos *dyldInfo = reinterpret_cast<dyld_all_image_infos*>
|
||||||
(ReadTaskMemory(task_,
|
(ReadTaskMemory(task_,
|
||||||
reinterpret_cast<void*>(imageList),
|
reinterpret_cast<void*>(imageList),
|
||||||
sizeof(dyld_all_image_infos)));
|
sizeof(dyld_all_image_infos), &kr));
|
||||||
|
|
||||||
if (dyldInfo) {
|
if (dyldInfo) {
|
||||||
// number of loaded images
|
// number of loaded images
|
||||||
|
@ -309,7 +319,7 @@ void DynamicImages::ReadImageInfoForTask() {
|
||||||
dyld_image_info *infoArray = reinterpret_cast<dyld_image_info*>
|
dyld_image_info *infoArray = reinterpret_cast<dyld_image_info*>
|
||||||
(ReadTaskMemory(task_,
|
(ReadTaskMemory(task_,
|
||||||
dyldInfo->infoArray,
|
dyldInfo->infoArray,
|
||||||
count*sizeof(dyld_image_info)));
|
count*sizeof(dyld_image_info), &kr));
|
||||||
|
|
||||||
image_list_.reserve(count);
|
image_list_.reserve(count);
|
||||||
|
|
||||||
|
@ -320,7 +330,7 @@ void DynamicImages::ReadImageInfoForTask() {
|
||||||
breakpad_mach_header *header = reinterpret_cast<breakpad_mach_header*>
|
breakpad_mach_header *header = reinterpret_cast<breakpad_mach_header*>
|
||||||
(ReadTaskMemory(task_,
|
(ReadTaskMemory(task_,
|
||||||
info.load_address_,
|
info.load_address_,
|
||||||
sizeof(breakpad_mach_header)));
|
sizeof(breakpad_mach_header), &kr));
|
||||||
|
|
||||||
if (!header)
|
if (!header)
|
||||||
break; // bail on this dynamic image
|
break; // bail on this dynamic image
|
||||||
|
@ -334,7 +344,7 @@ void DynamicImages::ReadImageInfoForTask() {
|
||||||
free(header);
|
free(header);
|
||||||
|
|
||||||
header = reinterpret_cast<breakpad_mach_header*>
|
header = reinterpret_cast<breakpad_mach_header*>
|
||||||
(ReadTaskMemory(task_, info.load_address_, header_size));
|
(ReadTaskMemory(task_, info.load_address_, header_size, &kr));
|
||||||
|
|
||||||
// Read the file name from the task's memory space.
|
// Read the file name from the task's memory space.
|
||||||
char *file_path = NULL;
|
char *file_path = NULL;
|
||||||
|
|
|
@ -303,7 +303,10 @@ class DynamicImages {
|
||||||
|
|
||||||
// Returns a malloced block containing the contents of memory at a particular
|
// Returns a malloced block containing the contents of memory at a particular
|
||||||
// location in another task.
|
// location in another task.
|
||||||
void* ReadTaskMemory(task_port_t target_task, const void* address, size_t len);
|
void* ReadTaskMemory(task_port_t target_task,
|
||||||
|
const void* address,
|
||||||
|
size_t len,
|
||||||
|
kern_return_t *kr);
|
||||||
|
|
||||||
} // namespace google_breakpad
|
} // namespace google_breakpad
|
||||||
|
|
||||||
|
|
|
@ -268,9 +268,16 @@ bool MinidumpGenerator::WriteStackFromStartAddress(
|
||||||
bool result;
|
bool result;
|
||||||
if (dynamic_images_) {
|
if (dynamic_images_) {
|
||||||
|
|
||||||
|
kern_return_t kr;
|
||||||
|
|
||||||
void *stack_memory = ReadTaskMemory(crashing_task_,
|
void *stack_memory = ReadTaskMemory(crashing_task_,
|
||||||
(void*)start_addr,
|
(void*)start_addr,
|
||||||
size);
|
size,
|
||||||
|
&kr);
|
||||||
|
|
||||||
|
if(stack_memory == NULL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
result = memory.Copy(stack_memory, size);
|
result = memory.Copy(stack_memory, size);
|
||||||
free(stack_memory);
|
free(stack_memory);
|
||||||
|
|
|
@ -51,6 +51,10 @@
|
||||||
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 */; };
|
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 */; };
|
F98208A30DB32CAE0017AECA /* breakpad_nlist_64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F98208A10DB32CAE0017AECA /* breakpad_nlist_64.cc */; };
|
||||||
|
F9AE5B390DBFDBDB00505983 /* dynamic_images.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F651070BEF949A00920385 /* dynamic_images.cc */; };
|
||||||
|
F9AE5B3A0DBFDBDB00505983 /* DynamicImagesTests.cc in Sources */ = {isa = PBXBuildFile; fileRef = F9C5A4210DB82DD800209C76 /* DynamicImagesTests.cc */; };
|
||||||
|
F9B34E870DBC1E1600306484 /* dynamic_images.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F651070BEF949A00920385 /* dynamic_images.cc */; };
|
||||||
|
F9C5A4220DB82DD800209C76 /* DynamicImagesTests.cc in Sources */ = {isa = PBXBuildFile; fileRef = F9C5A4210DB82DD800209C76 /* DynamicImagesTests.cc */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
|
@ -112,8 +116,12 @@
|
||||||
F982089B0DB3280D0017AECA /* breakpad_nlist_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = breakpad_nlist_test.cc; 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>"; };
|
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>"; };
|
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>"; };
|
F9AE19B50DB040E300C98454 /* minidump_tests32-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "minidump_tests32-Info.plist"; sourceTree = "<group>"; };
|
||||||
F9AE19C30DB04A9500C98454 /* minidump_tests.cptest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = minidump_tests.cptest; sourceTree = BUILT_PRODUCTS_DIR; };
|
F9AE19C30DB04A9500C98454 /* minidump_tests64.cptest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = minidump_tests64.cptest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
F9AE5B330DBFDBA300505983 /* minidump_tests32.cptest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = minidump_tests32.cptest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
F9AE5B340DBFDBA300505983 /* minidump_tests64-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "minidump_tests64-Info.plist"; sourceTree = "<group>"; };
|
||||||
|
F9C5A4200DB82DD800209C76 /* DynamicImagesTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DynamicImagesTests.h; sourceTree = "<group>"; };
|
||||||
|
F9C5A4210DB82DD800209C76 /* DynamicImagesTests.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DynamicImagesTests.cc; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
@ -147,6 +155,13 @@
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
F9AE5B300DBFDBA300505983 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
|
@ -165,13 +180,13 @@
|
||||||
D2F650FD0BEF947200920385 /* macho_id.h */,
|
D2F650FD0BEF947200920385 /* macho_id.h */,
|
||||||
D2F650FE0BEF947200920385 /* macho_utilities.cc */,
|
D2F650FE0BEF947200920385 /* macho_utilities.cc */,
|
||||||
D2F650FF0BEF947200920385 /* macho_utilities.h */,
|
D2F650FF0BEF947200920385 /* macho_utilities.h */,
|
||||||
|
F9C5A41F0DB82DB000209C76 /* testcases */,
|
||||||
9BD82C040B0133420055103E /* Breakpad */,
|
9BD82C040B0133420055103E /* Breakpad */,
|
||||||
08FB7795FE84155DC02AAC07 /* Source */,
|
08FB7795FE84155DC02AAC07 /* Source */,
|
||||||
9B37CEEA0AF98EB600FA4BD4 /* Frameworks */,
|
9B37CEEA0AF98EB600FA4BD4 /* Frameworks */,
|
||||||
1AB674ADFE9D54B511CA2CBB /* Products */,
|
1AB674ADFE9D54B511CA2CBB /* Products */,
|
||||||
F9AE19B50DB040E300C98454 /* minidump_tests-Info.plist */,
|
F9AE19B50DB040E300C98454 /* minidump_tests32-Info.plist */,
|
||||||
F982089A0DB3280D0017AECA /* breakpad_nlist_test.h */,
|
F9AE5B340DBFDBA300505983 /* minidump_tests64-Info.plist */,
|
||||||
F982089B0DB3280D0017AECA /* breakpad_nlist_test.cc */,
|
|
||||||
);
|
);
|
||||||
name = MinidumpWriter;
|
name = MinidumpWriter;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -192,7 +207,8 @@
|
||||||
8DD76F6C0486A84900D96B5E /* generator_test */,
|
8DD76F6C0486A84900D96B5E /* generator_test */,
|
||||||
9BD82A9B0B00267E0055103E /* handler_test */,
|
9BD82A9B0B00267E0055103E /* handler_test */,
|
||||||
9B7CA84E0B1297F200CD3A1D /* unit_test */,
|
9B7CA84E0B1297F200CD3A1D /* unit_test */,
|
||||||
F9AE19C30DB04A9500C98454 /* minidump_tests.cptest */,
|
F9AE19C30DB04A9500C98454 /* minidump_tests64.cptest */,
|
||||||
|
F9AE5B330DBFDBA300505983 /* minidump_tests32.cptest */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -225,6 +241,17 @@
|
||||||
name = Breakpad;
|
name = Breakpad;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
F9C5A41F0DB82DB000209C76 /* testcases */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
F982089A0DB3280D0017AECA /* breakpad_nlist_test.h */,
|
||||||
|
F982089B0DB3280D0017AECA /* breakpad_nlist_test.cc */,
|
||||||
|
F9C5A4200DB82DD800209C76 /* DynamicImagesTests.h */,
|
||||||
|
F9C5A4210DB82DD800209C76 /* DynamicImagesTests.cc */,
|
||||||
|
);
|
||||||
|
path = testcases;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
|
@ -278,9 +305,9 @@
|
||||||
productReference = 9BD82A9B0B00267E0055103E /* handler_test */;
|
productReference = 9BD82A9B0B00267E0055103E /* handler_test */;
|
||||||
productType = "com.apple.product-type.tool";
|
productType = "com.apple.product-type.tool";
|
||||||
};
|
};
|
||||||
F9AE19C20DB04A9500C98454 /* minidump_tests */ = {
|
F9AE19C20DB04A9500C98454 /* minidump_tests64 */ = {
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = F9AE19C70DB04AA200C98454 /* Build configuration list for PBXNativeTarget "minidump_tests" */;
|
buildConfigurationList = F9AE19C70DB04AA200C98454 /* Build configuration list for PBXNativeTarget "minidump_tests64" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
F9AE19BE0DB04A9500C98454 /* Resources */,
|
F9AE19BE0DB04A9500C98454 /* Resources */,
|
||||||
F9AE19BF0DB04A9500C98454 /* Sources */,
|
F9AE19BF0DB04A9500C98454 /* Sources */,
|
||||||
|
@ -291,9 +318,27 @@
|
||||||
);
|
);
|
||||||
dependencies = (
|
dependencies = (
|
||||||
);
|
);
|
||||||
name = minidump_tests;
|
name = minidump_tests64;
|
||||||
productName = minidump_tests;
|
productName = minidump_tests;
|
||||||
productReference = F9AE19C30DB04A9500C98454 /* minidump_tests.cptest */;
|
productReference = F9AE19C30DB04A9500C98454 /* minidump_tests64.cptest */;
|
||||||
|
productType = "com.apple.product-type.bundle";
|
||||||
|
};
|
||||||
|
F9AE5B320DBFDBA300505983 /* minidump_tests32 */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = F9AE5B380DBFDBA300505983 /* Build configuration list for PBXNativeTarget "minidump_tests32" */;
|
||||||
|
buildPhases = (
|
||||||
|
F9AE5B2E0DBFDBA300505983 /* Resources */,
|
||||||
|
F9AE5B2F0DBFDBA300505983 /* Sources */,
|
||||||
|
F9AE5B300DBFDBA300505983 /* Frameworks */,
|
||||||
|
F9AE5B310DBFDBA300505983 /* ShellScript */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = minidump_tests32;
|
||||||
|
productName = Untitled;
|
||||||
|
productReference = F9AE5B330DBFDBA300505983 /* minidump_tests32.cptest */;
|
||||||
productType = "com.apple.product-type.bundle";
|
productType = "com.apple.product-type.bundle";
|
||||||
};
|
};
|
||||||
/* End PBXNativeTarget section */
|
/* End PBXNativeTarget section */
|
||||||
|
@ -311,7 +356,8 @@
|
||||||
8DD76F620486A84900D96B5E /* generator_test */,
|
8DD76F620486A84900D96B5E /* generator_test */,
|
||||||
9BD82A9A0B00267E0055103E /* handler_test */,
|
9BD82A9A0B00267E0055103E /* handler_test */,
|
||||||
9B7CA84D0B1297F200CD3A1D /* unit_test */,
|
9B7CA84D0B1297F200CD3A1D /* unit_test */,
|
||||||
F9AE19C20DB04A9500C98454 /* minidump_tests */,
|
F9AE19C20DB04A9500C98454 /* minidump_tests64 */,
|
||||||
|
F9AE5B320DBFDBA300505983 /* minidump_tests32 */,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
/* End PBXProject section */
|
/* End PBXProject section */
|
||||||
|
@ -324,6 +370,13 @@
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
F9AE5B2E0DBFDBA300505983 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
/* End PBXResourcesBuildPhase section */
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXShellScriptBuildPhase section */
|
/* Begin PBXShellScriptBuildPhase section */
|
||||||
|
@ -340,6 +393,19 @@
|
||||||
shellPath = /bin/sh;
|
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 ";
|
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 ";
|
||||||
};
|
};
|
||||||
|
F9AE5B310DBFDBA300505983 /* 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";
|
||||||
|
};
|
||||||
/* End PBXShellScriptBuildPhase section */
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
@ -396,8 +462,19 @@
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
F9B34E870DBC1E1600306484 /* dynamic_images.cc in Sources */,
|
||||||
F982089C0DB3280D0017AECA /* breakpad_nlist_test.cc in Sources */,
|
F982089C0DB3280D0017AECA /* breakpad_nlist_test.cc in Sources */,
|
||||||
F98208A30DB32CAE0017AECA /* breakpad_nlist_64.cc in Sources */,
|
F98208A30DB32CAE0017AECA /* breakpad_nlist_64.cc in Sources */,
|
||||||
|
F9C5A4220DB82DD800209C76 /* DynamicImagesTests.cc in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
F9AE5B2F0DBFDBA300505983 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
F9AE5B390DBFDBDB00505983 /* dynamic_images.cc in Sources */,
|
||||||
|
F9AE5B3A0DBFDBDB00505983 /* DynamicImagesTests.cc in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -616,7 +693,7 @@
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
|
GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
|
||||||
INFOPLIST_FILE = "minidump_tests-Info.plist";
|
INFOPLIST_FILE = "minidump_tests64-Info.plist";
|
||||||
INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
|
INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.5;
|
MACOSX_DEPLOYMENT_TARGET = 10.5;
|
||||||
OTHER_LDFLAGS = (
|
OTHER_LDFLAGS = (
|
||||||
|
@ -627,8 +704,9 @@
|
||||||
"-lgcov",
|
"-lgcov",
|
||||||
);
|
);
|
||||||
PREBINDING = NO;
|
PREBINDING = NO;
|
||||||
PRODUCT_NAME = minidump_tests;
|
PRODUCT_NAME = minidump_tests64;
|
||||||
SDKROOT = /Developer/SDKs/MacOSX10.5.sdk;
|
SDKROOT = /Developer/SDKs/MacOSX10.5.sdk;
|
||||||
|
USER_HEADER_SEARCH_PATHS = "../../../**";
|
||||||
WRAPPER_EXTENSION = cptest;
|
WRAPPER_EXTENSION = cptest;
|
||||||
};
|
};
|
||||||
name = Coverage;
|
name = Coverage;
|
||||||
|
@ -648,7 +726,7 @@
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
|
GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
|
||||||
INFOPLIST_FILE = "minidump_tests-Info.plist";
|
INFOPLIST_FILE = "minidump_tests64-Info.plist";
|
||||||
INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
|
INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.5;
|
MACOSX_DEPLOYMENT_TARGET = 10.5;
|
||||||
OTHER_LDFLAGS = (
|
OTHER_LDFLAGS = (
|
||||||
|
@ -658,8 +736,9 @@
|
||||||
CPlusTest,
|
CPlusTest,
|
||||||
);
|
);
|
||||||
PREBINDING = NO;
|
PREBINDING = NO;
|
||||||
PRODUCT_NAME = minidump_tests;
|
PRODUCT_NAME = minidump_tests64;
|
||||||
SDKROOT = /Developer/SDKs/MacOSX10.5.sdk;
|
SDKROOT = /Developer/SDKs/MacOSX10.5.sdk;
|
||||||
|
USER_HEADER_SEARCH_PATHS = "../../../**";
|
||||||
WRAPPER_EXTENSION = cptest;
|
WRAPPER_EXTENSION = cptest;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
|
@ -678,7 +757,7 @@
|
||||||
GCC_MODEL_TUNING = G5;
|
GCC_MODEL_TUNING = G5;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
|
GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
|
||||||
INFOPLIST_FILE = "minidump_tests-Info.plist";
|
INFOPLIST_FILE = "minidump_tests64-Info.plist";
|
||||||
INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
|
INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.5;
|
MACOSX_DEPLOYMENT_TARGET = 10.5;
|
||||||
OTHER_LDFLAGS = (
|
OTHER_LDFLAGS = (
|
||||||
|
@ -688,8 +767,96 @@
|
||||||
CPlusTest,
|
CPlusTest,
|
||||||
);
|
);
|
||||||
PREBINDING = NO;
|
PREBINDING = NO;
|
||||||
PRODUCT_NAME = minidump_tests;
|
PRODUCT_NAME = minidump_tests64;
|
||||||
SDKROOT = /Developer/SDKs/MacOSX10.5.sdk;
|
SDKROOT = /Developer/SDKs/MacOSX10.5.sdk;
|
||||||
|
USER_HEADER_SEARCH_PATHS = "../../../**";
|
||||||
|
WRAPPER_EXTENSION = cptest;
|
||||||
|
ZERO_LINK = NO;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
F9AE5B350DBFDBA300505983 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ARCHS = (
|
||||||
|
"$(NATIVE_ARCH)",
|
||||||
|
ppc,
|
||||||
|
);
|
||||||
|
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_tests32-Info.plist";
|
||||||
|
INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
|
||||||
|
OTHER_LDFLAGS = (
|
||||||
|
"-framework",
|
||||||
|
Carbon,
|
||||||
|
"-framework",
|
||||||
|
CPlusTest,
|
||||||
|
);
|
||||||
|
PREBINDING = NO;
|
||||||
|
PRODUCT_NAME = minidump_tests32;
|
||||||
|
USER_HEADER_SEARCH_PATHS = "../../../**";
|
||||||
|
WRAPPER_EXTENSION = cptest;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
F9AE5B360DBFDBA300505983 /* Coverage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ARCHS = (
|
||||||
|
"$(NATIVE_ARCH)",
|
||||||
|
ppc,
|
||||||
|
);
|
||||||
|
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_tests32-Info.plist";
|
||||||
|
INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
|
||||||
|
OTHER_LDFLAGS = (
|
||||||
|
"-framework",
|
||||||
|
Carbon,
|
||||||
|
"-framework",
|
||||||
|
CPlusTest,
|
||||||
|
);
|
||||||
|
PREBINDING = NO;
|
||||||
|
PRODUCT_NAME = minidump_tests32;
|
||||||
|
USER_HEADER_SEARCH_PATHS = "../../../**";
|
||||||
|
WRAPPER_EXTENSION = cptest;
|
||||||
|
};
|
||||||
|
name = Coverage;
|
||||||
|
};
|
||||||
|
F9AE5B370DBFDBA300505983 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ARCHS = (
|
||||||
|
"$(NATIVE_ARCH)",
|
||||||
|
ppc,
|
||||||
|
);
|
||||||
|
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_tests32-Info.plist";
|
||||||
|
INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
|
||||||
|
OTHER_LDFLAGS = (
|
||||||
|
"-framework",
|
||||||
|
Carbon,
|
||||||
|
"-framework",
|
||||||
|
CPlusTest,
|
||||||
|
);
|
||||||
|
PREBINDING = NO;
|
||||||
|
PRODUCT_NAME = minidump_tests32;
|
||||||
|
USER_HEADER_SEARCH_PATHS = "../../../**";
|
||||||
WRAPPER_EXTENSION = cptest;
|
WRAPPER_EXTENSION = cptest;
|
||||||
ZERO_LINK = NO;
|
ZERO_LINK = NO;
|
||||||
};
|
};
|
||||||
|
@ -738,7 +905,7 @@
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
};
|
};
|
||||||
F9AE19C70DB04AA200C98454 /* Build configuration list for PBXNativeTarget "minidump_tests" */ = {
|
F9AE19C70DB04AA200C98454 /* Build configuration list for PBXNativeTarget "minidump_tests64" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
F9AE19C40DB04A9500C98454 /* Debug */,
|
F9AE19C40DB04A9500C98454 /* Debug */,
|
||||||
|
@ -748,6 +915,16 @@
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
};
|
};
|
||||||
|
F9AE5B380DBFDBA300505983 /* Build configuration list for PBXNativeTarget "minidump_tests32" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
F9AE5B350DBFDBA300505983 /* Debug */,
|
||||||
|
F9AE5B360DBFDBA300505983 /* Coverage */,
|
||||||
|
F9AE5B370DBFDBA300505983 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
/* End XCConfigurationList section */
|
/* End XCConfigurationList section */
|
||||||
};
|
};
|
||||||
rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
|
rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>${EXECUTABLE_NAME}</string>
|
<string>${EXECUTABLE_NAME}</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>com.google.breakpad.minidump_tests</string>
|
<string>com.google.breakpad.minidump_tests32</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
22
src/client/mac/handler/minidump_tests64-Info.plist
Normal file
22
src/client/mac/handler/minidump_tests64-Info.plist
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?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_tests64</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>
|
||||||
|
<key>CSResourcesFileMapped</key>
|
||||||
|
<string>yes</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
48
src/client/mac/handler/testcases/DynamicImagesTests.cc
Normal file
48
src/client/mac/handler/testcases/DynamicImagesTests.cc
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
* DynamicImagesTests.cpp
|
||||||
|
* minidump_test
|
||||||
|
*
|
||||||
|
* Created by Neal Sidhwaney on 4/17/08.
|
||||||
|
* Copyright 2008 Google Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "DynamicImagesTests.h"
|
||||||
|
#include "dynamic_images.h"
|
||||||
|
|
||||||
|
DynamicImagesTests test2(TEST_INVOCATION(DynamicImagesTests, ReadTaskMemoryTest));
|
||||||
|
|
||||||
|
DynamicImagesTests::DynamicImagesTests(TestInvocation *invocation)
|
||||||
|
: TestCase(invocation)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DynamicImagesTests::~DynamicImagesTests()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void DynamicImagesTests::ReadTaskMemoryTest()
|
||||||
|
{
|
||||||
|
kern_return_t kr;
|
||||||
|
|
||||||
|
// pick test2 as a symbol we know to be valid to read
|
||||||
|
// anything will work, really
|
||||||
|
void *addr = (void*)&test2;
|
||||||
|
|
||||||
|
void *buf;
|
||||||
|
fprintf(stderr, "reading 0x%p\n",addr);
|
||||||
|
buf = google_breakpad::ReadTaskMemory(mach_task_self(),
|
||||||
|
addr,
|
||||||
|
getpagesize(),
|
||||||
|
&kr);
|
||||||
|
|
||||||
|
CPTAssert(kr == KERN_SUCCESS);
|
||||||
|
|
||||||
|
CPTAssert(buf != NULL);
|
||||||
|
|
||||||
|
CPTAssert(0 == memcmp(buf,(const void*)addr,getpagesize()));
|
||||||
|
|
||||||
|
free(buf);
|
||||||
|
|
||||||
|
}
|
19
src/client/mac/handler/testcases/DynamicImagesTests.h
Normal file
19
src/client/mac/handler/testcases/DynamicImagesTests.h
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* DynamicImagesTests.h
|
||||||
|
* minidump_test
|
||||||
|
*
|
||||||
|
* Created by Neal Sidhwaney on 4/17/08.
|
||||||
|
* Copyright 2008 Google Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <CPlusTest/CPlusTest.h>
|
||||||
|
|
||||||
|
|
||||||
|
class DynamicImagesTests : public TestCase {
|
||||||
|
public:
|
||||||
|
DynamicImagesTests(TestInvocation* invocation);
|
||||||
|
virtual ~DynamicImagesTests();
|
||||||
|
|
||||||
|
void ReadTaskMemoryTest();
|
||||||
|
};
|
81
src/client/mac/handler/testcases/breakpad_nlist_test.cc
Normal file
81
src/client/mac/handler/testcases/breakpad_nlist_test.cc
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
/*
|
||||||
|
* breakpad_nlist_test.cc
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
}
|
29
src/client/mac/handler/testcases/breakpad_nlist_test.h
Normal file
29
src/client/mac/handler/testcases/breakpad_nlist_test.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/*
|
||||||
|
* breakpad_nlist_test.h
|
||||||
|
* minidump_test
|
||||||
|
*
|
||||||
|
* Created by Neal Sidhwaney on 4/13/08.
|
||||||
|
* Copyright 2008 Google Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <CPlusTest/CPlusTest.h>
|
||||||
|
|
||||||
|
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();
|
||||||
|
};
|
Loading…
Reference in a new issue