diff options
author | ivan.penkov@gmail.com <ivan.penkov@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2012-06-12 21:18:45 +0000 |
---|---|---|
committer | ivan.penkov@gmail.com <ivan.penkov@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2012-06-12 21:18:45 +0000 |
commit | 1208a8e369e459ec42b94ec1760eb7c80839864a (patch) | |
tree | 817e0e14d99c047e489842c76a62a14644c4b239 /src/processor/windows_frame_info.h | |
parent | CrashGenerationServer's state machine can be invoked from both the application (diff) | |
download | breakpad-1208a8e369e459ec42b94ec1760eb7c80839864a.tar.xz |
This is a fix for a stackwalker_x86 issue which has to
do with FPO (frame-pointer-omission) optimized context
frames where the context frame represents a Windows
System call stub.
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@971 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src/processor/windows_frame_info.h')
-rw-r--r-- | src/processor/windows_frame_info.h | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/processor/windows_frame_info.h b/src/processor/windows_frame_info.h index 067f3cfd..3aa7b3f6 100644 --- a/src/processor/windows_frame_info.h +++ b/src/processor/windows_frame_info.h @@ -72,7 +72,8 @@ struct WindowsFrameInfo { STACK_INFO_UNKNOWN = -1 }; - WindowsFrameInfo() : valid(VALID_NONE), + WindowsFrameInfo() : type_(STACK_INFO_UNKNOWN), + valid(VALID_NONE), prolog_size(0), epilog_size(0), parameter_size(0), @@ -82,7 +83,8 @@ struct WindowsFrameInfo { allocates_base_pointer(0), program_string() {} - WindowsFrameInfo(u_int32_t set_prolog_size, + WindowsFrameInfo(StackInfoTypes type, + u_int32_t set_prolog_size, u_int32_t set_epilog_size, u_int32_t set_parameter_size, u_int32_t set_saved_register_size, @@ -90,7 +92,8 @@ struct WindowsFrameInfo { u_int32_t set_max_stack_size, int set_allocates_base_pointer, const std::string set_program_string) - : valid(VALID_ALL), + : type_(type), + valid(VALID_ALL), prolog_size(set_prolog_size), epilog_size(set_epilog_size), parameter_size(set_parameter_size), @@ -140,7 +143,8 @@ struct WindowsFrameInfo { allocates_base_pointer = strtoul(tokens[10], NULL, 16); } - return new WindowsFrameInfo(prolog_size, + return new WindowsFrameInfo(static_cast<StackInfoTypes>(type), + prolog_size, epilog_size, parameter_size, saved_register_size, @@ -152,6 +156,7 @@ struct WindowsFrameInfo { // CopyFrom makes "this" WindowsFrameInfo object identical to "that". void CopyFrom(const WindowsFrameInfo &that) { + type_ = that.type_; valid = that.valid; prolog_size = that.prolog_size; epilog_size = that.epilog_size; @@ -166,10 +171,13 @@ struct WindowsFrameInfo { // Clears the WindowsFrameInfo object so that users will see it as though // it contains no information. void Clear() { + type_ = STACK_INFO_UNKNOWN; valid = VALID_NONE; program_string.erase(); } + StackInfoTypes type_; + // Identifies which fields in the structure are valid. This is of // type Validity, but it is defined as an int because it's not // possible to OR values into an enumerated type. Users must check |