diff options
author | mmentovai <mmentovai@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2006-09-25 18:29:48 +0000 |
---|---|---|
committer | mmentovai <mmentovai@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2006-09-25 18:29:48 +0000 |
commit | 960e5277ee489960c40c50c6222606200419302a (patch) | |
tree | 33a3b8a0ecba5cd6c961966d93f6270acc7a40d9 /src/processor/minidump_stackwalk.cc | |
parent | Add ppc support to minidump reader (#27). r=bryner. (diff) | |
download | breakpad-960e5277ee489960c40c50c6222606200419302a.tar.xz |
ppc stackwalker (#30). r=bryner
- Implementation of PowerPC stackwalker. Tested using stackwalker_selftest
(#18).
- Hook up processor-side multi-CPU support in MinidumpProcessor and
minidump_stackwalk using the new Stackwalker::StackwalkerForCPU method.
http://groups.google.com/group/airbag-dev/browse_thread/thread/1c2fa7c5182a77a9
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@34 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src/processor/minidump_stackwalk.cc')
-rw-r--r-- | src/processor/minidump_stackwalk.cc | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/src/processor/minidump_stackwalk.cc b/src/processor/minidump_stackwalk.cc index 0fe7b153..3620e30c 100644 --- a/src/processor/minidump_stackwalk.cc +++ b/src/processor/minidump_stackwalk.cc @@ -35,17 +35,28 @@ #include <stdlib.h> #include <stdio.h> +#include <memory> #include <string> #include "processor/minidump.h" #include "processor/stackwalker_x86.h" +using std::auto_ptr; using std::string; -using namespace google_airbag; - - -int main(int argc, char** argv) { +using google_airbag::MemoryRegion; +using google_airbag::Minidump; +using google_airbag::MinidumpContext; +using google_airbag::MinidumpException; +using google_airbag::MinidumpModuleList; +using google_airbag::MinidumpThread; +using google_airbag::MinidumpThreadList; +using google_airbag::StackFrame; +using google_airbag::StackFrames; +using google_airbag::Stackwalker; + + +int main(int argc, char **argv) { if (argc != 2) { fprintf(stderr, "usage: %s <file>\n", argv[0]); exit(1); @@ -57,48 +68,52 @@ int main(int argc, char** argv) { exit(1); } - MinidumpException* exception = minidump.GetException(); + MinidumpException *exception = minidump.GetException(); if (!exception) { fprintf(stderr, "minidump.GetException() failed\n"); exit(1); } - MinidumpThreadList* thread_list = minidump.GetThreadList(); + MinidumpThreadList *thread_list = minidump.GetThreadList(); if (!thread_list) { fprintf(stderr, "minidump.GetThreadList() failed\n"); exit(1); } - MinidumpThread* exception_thread = + MinidumpThread *exception_thread = thread_list->GetThreadByID(exception->GetThreadID()); if (!exception_thread) { fprintf(stderr, "thread_list->GetThreadByID() failed\n"); exit(1); } - MemoryRegion* stack_memory = exception_thread->GetMemory(); + MemoryRegion *stack_memory = exception_thread->GetMemory(); if (!stack_memory) { fprintf(stderr, "exception_thread->GetStackMemory() failed\n"); exit(1); } - MinidumpContext* context = exception->GetContext(); + MinidumpContext *context = exception->GetContext(); if (!context) { fprintf(stderr, "exception->GetContext() failed\n"); exit(1); } - MinidumpModuleList* modules = minidump.GetModuleList(); + MinidumpModuleList *modules = minidump.GetModuleList(); if (!modules) { fprintf(stderr, "minidump.GetModuleList() failed\n"); exit(1); } - StackwalkerX86 stackwalker = StackwalkerX86(context, stack_memory, - modules, NULL); + auto_ptr<Stackwalker> stackwalker( + Stackwalker::StackwalkerForCPU(context, stack_memory, modules, NULL)); + if (!stackwalker.get()) { + fprintf(stderr, "Stackwalker::StackwalkerForCPU failed\n"); + exit(1); + } StackFrames stack; - stackwalker.Walk(&stack); + stackwalker->Walk(&stack); unsigned int index; for (index = 0 ; index < stack.size() ; index++) { |