aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/amd64-windows-tdep.c15
2 files changed, 19 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 380177a..f5ba7d3 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,4 +1,10 @@
2013-12-05 Joel Brobecker <brobecker@adacore.com>
+ Tristan Gingold <gingold@adacore.com>
+
+ * amd64-windows-tdep.c (amd64_windows_frame_decode_insns):
+ Accept version 2. Ignore operations using opcode 6.
+
+2013-12-05 Joel Brobecker <brobecker@adacore.com>
* ada-lex.l (find_dot_all): Fix coding style violations.
diff --git a/gdb/amd64-windows-tdep.c b/gdb/amd64-windows-tdep.c
index 359173a..6891e16 100644
--- a/gdb/amd64-windows-tdep.c
+++ b/gdb/amd64-windows-tdep.c
@@ -649,7 +649,8 @@ amd64_windows_frame_decode_insns (struct frame_info *this_frame,
ex_ui.CountOfCodes, ex_ui.FrameRegisterOffset);
/* Check version. */
- if (PEX64_UWI_VERSION (ex_ui.Version_Flags) != 1)
+ if (PEX64_UWI_VERSION (ex_ui.Version_Flags) != 1
+ && PEX64_UWI_VERSION (ex_ui.Version_Flags) != 2)
return;
if (j == 0
@@ -696,7 +697,17 @@ amd64_windows_frame_decode_insns (struct frame_info *this_frame,
return;
end_insns = &insns[codes_count * 2];
- for (p = insns; p < end_insns; p += 2)
+ p = insns;
+
+ /* Skip opcodes 6 of version 2. This opcode is not documented. */
+ if (PEX64_UWI_VERSION (ex_ui.Version_Flags) == 2)
+ {
+ for (; p < end_insns; p += 2)
+ if (PEX64_UNWCODE_CODE (p[1]) != 6)
+ break;
+ }
+
+ for (; p < end_insns; p += 2)
{
int reg;