Fix minor style problems (#58). r=bryner
http://groups.google.com/group/airbag-dev/browse_thread/thread/bbcecab979fa82bc git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@49 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
parent
0a7e6bf16c
commit
80e98391dc
24 changed files with 87 additions and 68 deletions
|
@ -33,8 +33,8 @@
|
||||||
#ifndef _PDB_SOURCE_LINE_WRITER_H__
|
#ifndef _PDB_SOURCE_LINE_WRITER_H__
|
||||||
#define _PDB_SOURCE_LINE_WRITER_H__
|
#define _PDB_SOURCE_LINE_WRITER_H__
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <atlcomcli.h>
|
#include <atlcomcli.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
struct IDiaEnumLineNumbers;
|
struct IDiaEnumLineNumbers;
|
||||||
struct IDiaSession;
|
struct IDiaSession;
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#else /* !_WIN32 */
|
#else /* !_WIN32 */
|
||||||
|
|
||||||
#include <WTypes.h>
|
#include <WTypes.h>
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ typedef unsigned __int16 u_int16_t;
|
||||||
typedef unsigned __int32 u_int32_t;
|
typedef unsigned __int32 u_int32_t;
|
||||||
typedef unsigned __int64 u_int64_t;
|
typedef unsigned __int64 u_int64_t;
|
||||||
|
|
||||||
#endif /* !_WIN32 */
|
#endif /* !_WIN32 */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
u_int64_t half[2];
|
u_int64_t half[2];
|
||||||
|
@ -62,4 +62,4 @@ typedef struct {
|
||||||
|
|
||||||
typedef u_int64_t airbag_time_t;
|
typedef u_int64_t airbag_time_t;
|
||||||
|
|
||||||
#endif /* GOOGLE_AIRBAG_TYPES_H__ */
|
#endif /* GOOGLE_AIRBAG_TYPES_H__ */
|
||||||
|
|
|
@ -44,7 +44,7 @@ class MinidumpProcessor {
|
||||||
public:
|
public:
|
||||||
// Initializes this MinidumpProcessor. supplier should be an
|
// Initializes this MinidumpProcessor. supplier should be an
|
||||||
// implementation of the SymbolSupplier abstract base class.
|
// implementation of the SymbolSupplier abstract base class.
|
||||||
MinidumpProcessor(SymbolSupplier *supplier);
|
explicit MinidumpProcessor(SymbolSupplier *supplier);
|
||||||
~MinidumpProcessor();
|
~MinidumpProcessor();
|
||||||
|
|
||||||
// Returns a new ProcessState object produced by processing the minidump
|
// Returns a new ProcessState object produced by processing the minidump
|
||||||
|
|
|
@ -87,7 +87,7 @@ class ContainedRangeMap {
|
||||||
bool StoreRange(const AddressType &base,
|
bool StoreRange(const AddressType &base,
|
||||||
const AddressType &size,
|
const AddressType &size,
|
||||||
const EntryType &entry);
|
const EntryType &entry);
|
||||||
|
|
||||||
// Retrieves the most specific (smallest) descendant range encompassing
|
// Retrieves the most specific (smallest) descendant range encompassing
|
||||||
// the specified address. This method will only return entries held by
|
// the specified address. This method will only return entries held by
|
||||||
// child ranges, and not the entry contained by |this|. This is necessary
|
// child ranges, and not the entry contained by |this|. This is necessary
|
||||||
|
|
|
@ -70,7 +70,7 @@ class MemoryRegion {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // namespace google_airbag
|
} // namespace google_airbag
|
||||||
|
|
||||||
|
|
||||||
#endif // PROCESSOR_MEMORY_REGION_H__
|
#endif // PROCESSOR_MEMORY_REGION_H__
|
||||||
|
|
|
@ -44,15 +44,16 @@ typedef SSIZE_T ssize_t;
|
||||||
#define open _open
|
#define open _open
|
||||||
#define read _read
|
#define read _read
|
||||||
#define lseek _lseek
|
#define lseek _lseek
|
||||||
#else // _WIN32
|
#else // _WIN32
|
||||||
#define O_BINARY 0
|
#define O_BINARY 0
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "processor/minidump.h"
|
|
||||||
#include "processor/range_map-inl.h"
|
#include "processor/range_map-inl.h"
|
||||||
|
|
||||||
|
#include "processor/minidump.h"
|
||||||
#include "processor/scoped_ptr.h"
|
#include "processor/scoped_ptr.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -649,7 +650,7 @@ const u_int8_t* MinidumpMemoryRegion::GetMemory() {
|
||||||
scoped_ptr< vector<u_int8_t> > memory(
|
scoped_ptr< vector<u_int8_t> > memory(
|
||||||
new vector<u_int8_t>(descriptor_->memory.data_size));
|
new vector<u_int8_t>(descriptor_->memory.data_size));
|
||||||
|
|
||||||
if (!minidump_->ReadBytes(&(*memory)[0], descriptor_->memory.data_size))
|
if (!minidump_->ReadBytes(&(*memory)[0], descriptor_->memory.data_size))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
memory_ = memory.release();
|
memory_ = memory.release();
|
||||||
|
@ -2126,7 +2127,7 @@ bool Minidump::Read() {
|
||||||
// Initialize the stream_map map, which speeds locating a stream by
|
// Initialize the stream_map map, which speeds locating a stream by
|
||||||
// type.
|
// type.
|
||||||
unsigned int stream_type = directory_entry->stream_type;
|
unsigned int stream_type = directory_entry->stream_type;
|
||||||
switch(stream_type) {
|
switch (stream_type) {
|
||||||
case THREAD_LIST_STREAM:
|
case THREAD_LIST_STREAM:
|
||||||
case MODULE_LIST_STREAM:
|
case MODULE_LIST_STREAM:
|
||||||
case MEMORY_LIST_STREAM:
|
case MEMORY_LIST_STREAM:
|
||||||
|
@ -2203,7 +2204,8 @@ void Minidump::Print() {
|
||||||
printf(" stream_count = %d\n", header_.stream_count);
|
printf(" stream_count = %d\n", header_.stream_count);
|
||||||
printf(" stream_directory_rva = 0x%x\n", header_.stream_directory_rva);
|
printf(" stream_directory_rva = 0x%x\n", header_.stream_directory_rva);
|
||||||
printf(" checksum = 0x%x\n", header_.checksum);
|
printf(" checksum = 0x%x\n", header_.checksum);
|
||||||
struct tm* timestruct = gmtime((time_t*)&header_.time_date_stamp);
|
struct tm* timestruct =
|
||||||
|
gmtime(reinterpret_cast<time_t*>(&header_.time_date_stamp));
|
||||||
char timestr[20];
|
char timestr[20];
|
||||||
strftime(timestr, 20, "%Y-%m-%d %H:%M:%S", timestruct);
|
strftime(timestr, 20, "%Y-%m-%d %H:%M:%S", timestruct);
|
||||||
printf(" time_date_stamp = 0x%x %s\n", header_.time_date_stamp,
|
printf(" time_date_stamp = 0x%x %s\n", header_.time_date_stamp,
|
||||||
|
@ -2365,4 +2367,4 @@ T* Minidump::GetStream(T** stream) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // namespace google_airbag
|
} // namespace google_airbag
|
||||||
|
|
|
@ -108,7 +108,7 @@ class MinidumpObject {
|
||||||
virtual ~MinidumpObject() {}
|
virtual ~MinidumpObject() {}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
MinidumpObject(Minidump* minidump);
|
explicit MinidumpObject(Minidump* minidump);
|
||||||
|
|
||||||
// Refers to the Minidump object that is the ultimate parent of this
|
// Refers to the Minidump object that is the ultimate parent of this
|
||||||
// Some MinidumpObjects are owned by other MinidumpObjects, but at the
|
// Some MinidumpObjects are owned by other MinidumpObjects, but at the
|
||||||
|
@ -137,7 +137,7 @@ class MinidumpStream : public MinidumpObject {
|
||||||
virtual ~MinidumpStream() {}
|
virtual ~MinidumpStream() {}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
MinidumpStream(Minidump* minidump);
|
explicit MinidumpStream(Minidump* minidump);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Populate (and validate) the MinidumpStream. minidump_ is expected
|
// Populate (and validate) the MinidumpStream. minidump_ is expected
|
||||||
|
@ -184,7 +184,7 @@ class MinidumpContext : public MinidumpStream {
|
||||||
friend class MinidumpThread;
|
friend class MinidumpThread;
|
||||||
friend class MinidumpException;
|
friend class MinidumpException;
|
||||||
|
|
||||||
MinidumpContext(Minidump* minidump);
|
explicit MinidumpContext(Minidump* minidump);
|
||||||
|
|
||||||
bool Read(u_int32_t expected_size);
|
bool Read(u_int32_t expected_size);
|
||||||
|
|
||||||
|
@ -247,7 +247,7 @@ class MinidumpMemoryRegion : public MinidumpObject,
|
||||||
friend class MinidumpThread;
|
friend class MinidumpThread;
|
||||||
friend class MinidumpMemoryList;
|
friend class MinidumpMemoryList;
|
||||||
|
|
||||||
MinidumpMemoryRegion(Minidump* minidump);
|
explicit MinidumpMemoryRegion(Minidump* minidump);
|
||||||
|
|
||||||
// Identify the base address and size of the memory region, and the
|
// Identify the base address and size of the memory region, and the
|
||||||
// location it may be found in the minidump file.
|
// location it may be found in the minidump file.
|
||||||
|
@ -291,7 +291,7 @@ class MinidumpThread : public MinidumpObject {
|
||||||
// These objects are managed by MinidumpThreadList.
|
// These objects are managed by MinidumpThreadList.
|
||||||
friend class MinidumpThreadList;
|
friend class MinidumpThreadList;
|
||||||
|
|
||||||
MinidumpThread(Minidump* minidump);
|
explicit MinidumpThread(Minidump* minidump);
|
||||||
|
|
||||||
// This works like MinidumpStream::Read, but is driven by
|
// This works like MinidumpStream::Read, but is driven by
|
||||||
// MinidumpThreadList. No size checking is done, because
|
// MinidumpThreadList. No size checking is done, because
|
||||||
|
@ -329,7 +329,7 @@ class MinidumpThreadList : public MinidumpStream {
|
||||||
|
|
||||||
static const u_int32_t kStreamType = THREAD_LIST_STREAM;
|
static const u_int32_t kStreamType = THREAD_LIST_STREAM;
|
||||||
|
|
||||||
MinidumpThreadList(Minidump* aMinidump);
|
explicit MinidumpThreadList(Minidump* aMinidump);
|
||||||
|
|
||||||
bool Read(u_int32_t aExpectedSize);
|
bool Read(u_int32_t aExpectedSize);
|
||||||
|
|
||||||
|
@ -384,7 +384,7 @@ class MinidumpModule : public MinidumpObject {
|
||||||
// These objects are managed by MinidumpModuleList.
|
// These objects are managed by MinidumpModuleList.
|
||||||
friend class MinidumpModuleList;
|
friend class MinidumpModuleList;
|
||||||
|
|
||||||
MinidumpModule(Minidump* minidump);
|
explicit MinidumpModule(Minidump* minidump);
|
||||||
|
|
||||||
// This works like MinidumpStream::Read, but is driven by
|
// This works like MinidumpStream::Read, but is driven by
|
||||||
// MinidumpModuleList. No size checking is done, because
|
// MinidumpModuleList. No size checking is done, because
|
||||||
|
@ -439,7 +439,7 @@ class MinidumpModuleList : public MinidumpStream {
|
||||||
|
|
||||||
static const u_int32_t kStreamType = MODULE_LIST_STREAM;
|
static const u_int32_t kStreamType = MODULE_LIST_STREAM;
|
||||||
|
|
||||||
MinidumpModuleList(Minidump* minidump);
|
explicit MinidumpModuleList(Minidump* minidump);
|
||||||
|
|
||||||
bool Read(u_int32_t expected_size);
|
bool Read(u_int32_t expected_size);
|
||||||
|
|
||||||
|
@ -484,7 +484,7 @@ class MinidumpMemoryList : public MinidumpStream {
|
||||||
|
|
||||||
static const u_int32_t kStreamType = MEMORY_LIST_STREAM;
|
static const u_int32_t kStreamType = MEMORY_LIST_STREAM;
|
||||||
|
|
||||||
MinidumpMemoryList(Minidump* minidump);
|
explicit MinidumpMemoryList(Minidump* minidump);
|
||||||
|
|
||||||
bool Read(u_int32_t expected_size);
|
bool Read(u_int32_t expected_size);
|
||||||
|
|
||||||
|
@ -531,7 +531,7 @@ class MinidumpException : public MinidumpStream {
|
||||||
|
|
||||||
static const u_int32_t kStreamType = EXCEPTION_STREAM;
|
static const u_int32_t kStreamType = EXCEPTION_STREAM;
|
||||||
|
|
||||||
MinidumpException(Minidump* minidump);
|
explicit MinidumpException(Minidump* minidump);
|
||||||
|
|
||||||
bool Read(u_int32_t expected_size);
|
bool Read(u_int32_t expected_size);
|
||||||
|
|
||||||
|
@ -568,7 +568,7 @@ class MinidumpSystemInfo : public MinidumpStream {
|
||||||
|
|
||||||
static const u_int32_t kStreamType = SYSTEM_INFO_STREAM;
|
static const u_int32_t kStreamType = SYSTEM_INFO_STREAM;
|
||||||
|
|
||||||
MinidumpSystemInfo(Minidump* minidump);
|
explicit MinidumpSystemInfo(Minidump* minidump);
|
||||||
|
|
||||||
bool Read(u_int32_t expected_size);
|
bool Read(u_int32_t expected_size);
|
||||||
|
|
||||||
|
@ -598,7 +598,7 @@ class MinidumpMiscInfo : public MinidumpStream {
|
||||||
|
|
||||||
static const u_int32_t kStreamType = MISC_INFO_STREAM;
|
static const u_int32_t kStreamType = MISC_INFO_STREAM;
|
||||||
|
|
||||||
MinidumpMiscInfo(Minidump* minidump_);
|
explicit MinidumpMiscInfo(Minidump* minidump_);
|
||||||
|
|
||||||
bool Read(u_int32_t expected_size_);
|
bool Read(u_int32_t expected_size_);
|
||||||
|
|
||||||
|
@ -611,7 +611,7 @@ class MinidumpMiscInfo : public MinidumpStream {
|
||||||
class Minidump {
|
class Minidump {
|
||||||
public:
|
public:
|
||||||
// path is the pathname of a file containing the minidump.
|
// path is the pathname of a file containing the minidump.
|
||||||
Minidump(const string& path);
|
explicit Minidump(const string& path);
|
||||||
|
|
||||||
~Minidump();
|
~Minidump();
|
||||||
|
|
||||||
|
@ -730,7 +730,7 @@ class Minidump {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // namespace google_airbag
|
} // namespace google_airbag
|
||||||
|
|
||||||
|
|
||||||
#endif // PROCESSOR_MINIDUMP_H__
|
#endif // PROCESSOR_MINIDUMP_H__
|
||||||
|
|
|
@ -483,7 +483,7 @@ typedef enum {
|
||||||
FUNCTION_TABLE_STREAM = 13,
|
FUNCTION_TABLE_STREAM = 13,
|
||||||
UNLOADED_MODULE_LIST_STREAM = 14,
|
UNLOADED_MODULE_LIST_STREAM = 14,
|
||||||
MISC_INFO_STREAM = 15, /* MDRawMiscInfo */
|
MISC_INFO_STREAM = 15, /* MDRawMiscInfo */
|
||||||
LAST_RESERVED_STREAM = 0x0000FFFF
|
LAST_RESERVED_STREAM = 0x0000ffff
|
||||||
} MDStreamType; /* MINIDUMP_STREAM_TYPE */
|
} MDStreamType; /* MINIDUMP_STREAM_TYPE */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -121,7 +121,7 @@ ProcessState* MinidumpProcessor::Process(const string &minidump_file) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the MDRawSystemInfo from a minidump, or NULL if system info is
|
// Returns the MDRawSystemInfo from a minidump, or NULL if system info is
|
||||||
// not available from the minidump. If system_info is non-NULL, it is used
|
// not available from the minidump. If system_info is non-NULL, it is used
|
||||||
// to pass back the MinidumpSystemInfo object.
|
// to pass back the MinidumpSystemInfo object.
|
||||||
static const MDRawSystemInfo* GetSystemInfo(Minidump *dump,
|
static const MDRawSystemInfo* GetSystemInfo(Minidump *dump,
|
||||||
MinidumpSystemInfo **system_info) {
|
MinidumpSystemInfo **system_info) {
|
||||||
|
@ -271,7 +271,7 @@ string MinidumpProcessor::GetCrashReason(Minidump *dump, u_int64_t *address) {
|
||||||
if (!raw_system_info)
|
if (!raw_system_info)
|
||||||
return reason;
|
return reason;
|
||||||
|
|
||||||
switch(raw_system_info->platform_id) {
|
switch (raw_system_info->platform_id) {
|
||||||
case MD_OS_WIN32_NT:
|
case MD_OS_WIN32_NT:
|
||||||
case MD_OS_WIN32_WINDOWS: {
|
case MD_OS_WIN32_WINDOWS: {
|
||||||
switch (raw_exception->exception_record.exception_code) {
|
switch (raw_exception->exception_record.exception_code) {
|
||||||
|
|
|
@ -74,7 +74,6 @@ string TestSymbolSupplier::GetSymbolFile(MinidumpModule *module) {
|
||||||
using google_airbag::TestSymbolSupplier;
|
using google_airbag::TestSymbolSupplier;
|
||||||
|
|
||||||
static bool RunTests() {
|
static bool RunTests() {
|
||||||
|
|
||||||
TestSymbolSupplier supplier;
|
TestSymbolSupplier supplier;
|
||||||
MinidumpProcessor processor(&supplier);
|
MinidumpProcessor processor(&supplier);
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,7 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
MinidumpThread *exception_thread =
|
MinidumpThread *exception_thread =
|
||||||
thread_list->GetThreadByID(exception->GetThreadID());
|
thread_list->GetThreadByID(exception->GetThreadID());
|
||||||
if (!exception_thread) {
|
if (!exception_thread) {
|
||||||
fprintf(stderr, "thread_list->GetThreadByID() failed\n");
|
fprintf(stderr, "thread_list->GetThreadByID() failed\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
|
@ -38,7 +38,7 @@ using std::ostringstream;
|
||||||
// before returning failure.
|
// before returning failure.
|
||||||
class AutoStackClearer {
|
class AutoStackClearer {
|
||||||
public:
|
public:
|
||||||
AutoStackClearer(vector<string> *stack) : stack_(stack) {}
|
explicit AutoStackClearer(vector<string> *stack) : stack_(stack) {}
|
||||||
~AutoStackClearer() { stack_->clear(); }
|
~AutoStackClearer() { stack_->clear(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -20,9 +20,10 @@
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#include "processor/postfix_evaluator-inl.h"
|
||||||
|
|
||||||
#include "google/airbag_types.h"
|
#include "google/airbag_types.h"
|
||||||
#include "processor/memory_region.h"
|
#include "processor/memory_region.h"
|
||||||
#include "processor/postfix_evaluator-inl.h"
|
|
||||||
|
|
||||||
|
|
||||||
using std::map;
|
using std::map;
|
||||||
|
@ -38,14 +39,22 @@ class FakeMemoryRegion : public MemoryRegion {
|
||||||
public:
|
public:
|
||||||
virtual u_int64_t GetBase() { return 0; }
|
virtual u_int64_t GetBase() { return 0; }
|
||||||
virtual u_int32_t GetSize() { return 0; }
|
virtual u_int32_t GetSize() { return 0; }
|
||||||
virtual bool GetMemoryAtAddress(u_int64_t address, u_int8_t *value)
|
virtual bool GetMemoryAtAddress(u_int64_t address, u_int8_t *value) {
|
||||||
{ *value = address + 1; return true; }
|
*value = address + 1;
|
||||||
virtual bool GetMemoryAtAddress(u_int64_t address, u_int16_t *value)
|
return true;
|
||||||
{ *value = address + 1; return true; }
|
}
|
||||||
virtual bool GetMemoryAtAddress(u_int64_t address, u_int32_t *value)
|
virtual bool GetMemoryAtAddress(u_int64_t address, u_int16_t *value) {
|
||||||
{ *value = address + 1; return true; }
|
*value = address + 1;
|
||||||
virtual bool GetMemoryAtAddress(u_int64_t address, u_int64_t *value)
|
return true;
|
||||||
{ *value = address + 1; return true; }
|
}
|
||||||
|
virtual bool GetMemoryAtAddress(u_int64_t address, u_int32_t *value) {
|
||||||
|
*value = address + 1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
virtual bool GetMemoryAtAddress(u_int64_t address, u_int64_t *value) {
|
||||||
|
*value = address + 1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -195,7 +204,7 @@ bool RunTests() {
|
||||||
const EvaluateTest *evaluate_test = &evaluate_tests[evaluate_test_index];
|
const EvaluateTest *evaluate_test = &evaluate_tests[evaluate_test_index];
|
||||||
|
|
||||||
// Do the test.
|
// Do the test.
|
||||||
bool result = postfix_evaluator.Evaluate(evaluate_test->expression,
|
bool result = postfix_evaluator.Evaluate(evaluate_test->expression,
|
||||||
&assigned);
|
&assigned);
|
||||||
if (result != evaluate_test->evaluable) {
|
if (result != evaluate_test->evaluable) {
|
||||||
fprintf(stderr, "FAIL: evaluate set %d/%d, test %d/%d, "
|
fprintf(stderr, "FAIL: evaluate set %d/%d, test %d/%d, "
|
||||||
|
@ -210,7 +219,7 @@ bool RunTests() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate the results.
|
// Validate the results.
|
||||||
for(map<string, unsigned int>::const_iterator validate_iterator =
|
for (map<string, unsigned int>::const_iterator validate_iterator =
|
||||||
evaluate_test_set->validate_data->begin();
|
evaluate_test_set->validate_data->begin();
|
||||||
validate_iterator != evaluate_test_set->validate_data->end();
|
validate_iterator != evaluate_test_set->validate_data->end();
|
||||||
++validate_iterator) {
|
++validate_iterator) {
|
||||||
|
|
|
@ -35,8 +35,9 @@
|
||||||
#include <climits>
|
#include <climits>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
|
||||||
#include "processor/linked_ptr.h"
|
|
||||||
#include "processor/range_map-inl.h"
|
#include "processor/range_map-inl.h"
|
||||||
|
|
||||||
|
#include "processor/linked_ptr.h"
|
||||||
#include "processor/scoped_ptr.h"
|
#include "processor/scoped_ptr.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -29,15 +29,18 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <vector>
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include "processor/source_line_resolver.h"
|
#include <vector>
|
||||||
#include "google/stack_frame.h"
|
|
||||||
#include "processor/linked_ptr.h"
|
|
||||||
#include "processor/address_map-inl.h"
|
#include "processor/address_map-inl.h"
|
||||||
#include "processor/contained_range_map-inl.h"
|
#include "processor/contained_range_map-inl.h"
|
||||||
#include "processor/range_map-inl.h"
|
#include "processor/range_map-inl.h"
|
||||||
|
|
||||||
|
#include "processor/source_line_resolver.h"
|
||||||
|
#include "google/stack_frame.h"
|
||||||
|
#include "processor/linked_ptr.h"
|
||||||
#include "processor/scoped_ptr.h"
|
#include "processor/scoped_ptr.h"
|
||||||
#include "processor/stack_frame_info.h"
|
#include "processor/stack_frame_info.h"
|
||||||
|
|
||||||
|
@ -543,4 +546,4 @@ size_t SourceLineResolver::HashString::operator()(const string &s) const {
|
||||||
return hash<const char*>()(s.c_str());
|
return hash<const char*>()(s.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace google_airbag
|
} // namespace google_airbag
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <ext/hash_map>
|
#include <ext/hash_map>
|
||||||
|
#include "google/airbag_types.h"
|
||||||
|
|
||||||
namespace google_airbag {
|
namespace google_airbag {
|
||||||
|
|
||||||
|
@ -47,7 +48,7 @@ struct StackFrameInfo;
|
||||||
|
|
||||||
class SourceLineResolver {
|
class SourceLineResolver {
|
||||||
public:
|
public:
|
||||||
typedef unsigned long long MemAddr;
|
typedef u_int64_t MemAddr;
|
||||||
|
|
||||||
SourceLineResolver();
|
SourceLineResolver();
|
||||||
~SourceLineResolver();
|
~SourceLineResolver();
|
||||||
|
@ -92,6 +93,6 @@ class SourceLineResolver {
|
||||||
void operator=(const SourceLineResolver&);
|
void operator=(const SourceLineResolver&);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace google_airbag
|
} // namespace google_airbag
|
||||||
|
|
||||||
#endif // PROCESSOR_SOURCE_LINE_RESOLVER_H__
|
#endif // PROCESSOR_SOURCE_LINE_RESOLVER_H__
|
||||||
|
|
|
@ -95,7 +95,10 @@ struct StackFrameInfo {
|
||||||
|
|
||||||
// Clears the StackFrameInfo object so that users will see it as though
|
// Clears the StackFrameInfo object so that users will see it as though
|
||||||
// it contains no information.
|
// it contains no information.
|
||||||
void Clear() { valid = VALID_NONE; program_string.erase(); }
|
void Clear() {
|
||||||
|
valid = VALID_NONE;
|
||||||
|
program_string.erase();
|
||||||
|
}
|
||||||
|
|
||||||
// Identifies which fields in the structure are valid. This is of
|
// Identifies which fields in the structure are valid. This is of
|
||||||
// type Validity, but it is defined as an int because it's not
|
// type Validity, but it is defined as an int because it's not
|
||||||
|
|
|
@ -135,4 +135,4 @@ Stackwalker* Stackwalker::StackwalkerForCPU(MinidumpContext *context,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // namespace google_airbag
|
} // namespace google_airbag
|
||||||
|
|
|
@ -117,7 +117,7 @@ class Stackwalker {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // namespace google_airbag
|
} // namespace google_airbag
|
||||||
|
|
||||||
|
|
||||||
#endif // PROCESSOR_STACKWALKER_H__
|
#endif // PROCESSOR_STACKWALKER_H__
|
||||||
|
|
|
@ -133,4 +133,4 @@ StackFrame* StackwalkerPPC::GetCallerFrame(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // namespace google_airbag
|
} // namespace google_airbag
|
||||||
|
|
|
@ -75,7 +75,7 @@ class StackwalkerPPC : public Stackwalker {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // namespace google_airbag
|
} // namespace google_airbag
|
||||||
|
|
||||||
|
|
||||||
#endif // PROCESSOR_STACKWALKER_PPC_H__
|
#endif // PROCESSOR_STACKWALKER_PPC_H__
|
||||||
|
|
|
@ -161,7 +161,7 @@ static u_int32_t GetEIP() {
|
||||||
|
|
||||||
// GetSP returns the current value of the %r1 register, which by convention,
|
// GetSP returns the current value of the %r1 register, which by convention,
|
||||||
// is the stack pointer on ppc. Because it's implemented as a function,
|
// is the stack pointer on ppc. Because it's implemented as a function,
|
||||||
// %r1 itself contains GetSP's own stack pointer and not the caller's stack
|
// %r1 itself contains GetSP's own stack pointer and not the caller's stack
|
||||||
// pointer. Dereference %r1 to obtain the caller's stack pointer, which the
|
// pointer. Dereference %r1 to obtain the caller's stack pointer, which the
|
||||||
// compiler-generated prolog stored on the stack. Because this function
|
// compiler-generated prolog stored on the stack. Because this function
|
||||||
// depends on the compiler-generated prolog, inlining is disabled.
|
// depends on the compiler-generated prolog, inlining is disabled.
|
||||||
|
@ -222,7 +222,7 @@ static unsigned int CountCallerFrames() {
|
||||||
|
|
||||||
#ifdef PRINT_STACKS
|
#ifdef PRINT_STACKS
|
||||||
printf("\n");
|
printf("\n");
|
||||||
for(unsigned int frame_index = 0;
|
for (unsigned int frame_index = 0;
|
||||||
frame_index < stack->frames()->size();
|
frame_index < stack->frames()->size();
|
||||||
++frame_index) {
|
++frame_index) {
|
||||||
StackFrame *frame = stack->frames()->at(frame_index);
|
StackFrame *frame = stack->frames()->at(frame_index);
|
||||||
|
|
|
@ -34,12 +34,13 @@
|
||||||
// Author: Mark Mentovai
|
// Author: Mark Mentovai
|
||||||
|
|
||||||
|
|
||||||
|
#include "processor/postfix_evaluator-inl.h"
|
||||||
|
|
||||||
#include "processor/stackwalker_x86.h"
|
#include "processor/stackwalker_x86.h"
|
||||||
#include "google/call_stack.h"
|
#include "google/call_stack.h"
|
||||||
#include "google/stack_frame_cpu.h"
|
#include "google/stack_frame_cpu.h"
|
||||||
#include "processor/linked_ptr.h"
|
#include "processor/linked_ptr.h"
|
||||||
#include "processor/minidump.h"
|
#include "processor/minidump.h"
|
||||||
#include "processor/postfix_evaluator-inl.h"
|
|
||||||
#include "processor/stack_frame_info.h"
|
#include "processor/stack_frame_info.h"
|
||||||
|
|
||||||
namespace google_airbag {
|
namespace google_airbag {
|
||||||
|
@ -309,4 +310,4 @@ StackFrame* StackwalkerX86::GetCallerFrame(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // namespace google_airbag
|
} // namespace google_airbag
|
||||||
|
|
|
@ -75,7 +75,7 @@ class StackwalkerX86 : public Stackwalker {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // namespace google_airbag
|
} // namespace google_airbag
|
||||||
|
|
||||||
|
|
||||||
#endif // PROCESSOR_STACKWALKER_X86_H__
|
#endif // PROCESSOR_STACKWALKER_X86_H__
|
||||||
|
|
Loading…
Reference in a new issue