diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/amd64-windows-tdep.c | 15 |
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; |