aboutsummaryrefslogtreecommitdiff
path: root/src/processor/windows_frame_info.h
diff options
context:
space:
mode:
authorivan.penkov@gmail.com <ivan.penkov@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e>2012-06-12 21:18:45 +0000
committerivan.penkov@gmail.com <ivan.penkov@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e>2012-06-12 21:18:45 +0000
commit1208a8e369e459ec42b94ec1760eb7c80839864a (patch)
tree817e0e14d99c047e489842c76a62a14644c4b239 /src/processor/windows_frame_info.h
parentCrashGenerationServer's state machine can be invoked from both the application (diff)
downloadbreakpad-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.h16
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