diff options
author | jimblandy <jimblandy@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2010-01-14 19:17:36 +0000 |
---|---|---|
committer | jimblandy <jimblandy@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2010-01-14 19:17:36 +0000 |
commit | 2684b4dc196ca2da9466aa5391f5c0090739d2f6 (patch) | |
tree | 915b756348bebc378ba53e3137aa7ba09733b4b1 /src/google_breakpad/processor/stack_frame_cpu.h | |
parent | Breakpad Linux dumper: STABS reader incorrectly assumes a single compilation ... (diff) | |
download | breakpad-2684b4dc196ca2da9466aa5391f5c0090739d2f6.tar.xz |
Breakpad processor: Don't pass Windows stack walking information to all walkers.
At the moment, the StackWalker GetCallerFrame member function expects
a vector of WindowsFrameInfo structures, even though WindowsFrameInfo
is only used or useful on one one implementation (StackWalkerX86).
This patch changes StackWalker::GetCallerFrame to no longer expect the
WindowsFrameInfo structures, and changes all implementations to match.
In particular, StackWalkerX86 is changed to find the WindowsFrameInfo
data itself, and store a pointer to whatever it got in the StackFrame
object itself (which is really a StackFrameX86).
To allow GetCallerFrame implementations to look up stack walking data,
StackWalker::resolver_ needs to be made protected, not private.
a=jimblandy, r=mmentovai
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@491 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src/google_breakpad/processor/stack_frame_cpu.h')
-rw-r--r-- | src/google_breakpad/processor/stack_frame_cpu.h | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/google_breakpad/processor/stack_frame_cpu.h b/src/google_breakpad/processor/stack_frame_cpu.h index 1e414638..8963f6ff 100644 --- a/src/google_breakpad/processor/stack_frame_cpu.h +++ b/src/google_breakpad/processor/stack_frame_cpu.h @@ -44,6 +44,8 @@ namespace google_breakpad { +struct WindowsFrameInfo; + struct StackFrameX86 : public StackFrame { // ContextValidity has one entry for each relevant hardware pointer register // (%eip and %esp) and one entry for each nonvolatile (callee-save) register. @@ -74,7 +76,9 @@ struct StackFrameX86 : public StackFrame { StackFrameX86() : context(), context_validity(CONTEXT_VALID_NONE), - trust(FRAME_TRUST_NONE) {} + trust(FRAME_TRUST_NONE), + windows_frame_info(NULL) {} + ~StackFrameX86(); // Register state. This is only fully valid for the topmost frame in a // stack. In other frames, the values of nonvolatile registers may be @@ -90,6 +94,11 @@ struct StackFrameX86 : public StackFrame { // Amount of trust the stack walker has in the instruction pointer // of this frame. FrameTrust trust; + + // Any stack walking information we found describing + // this.instruction. These may be NULL if we couldn't find the + // appropriate information. + WindowsFrameInfo *windows_frame_info; }; struct StackFramePPC : public StackFrame { |