Eric Pouech : winedbg: In x86_64 backend, now recognize 'rep ret' as a valid function return instruction.
Alexandre Julliard
julliard at winehq.org
Tue Jan 3 12:52:53 CST 2012
Module: wine
Branch: master
Commit: c047d6ddbd550d8e73e6289a11a2d89c72ab1ee5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c047d6ddbd550d8e73e6289a11a2d89c72ab1ee5
Author: Eric Pouech <eric.pouech at orange.fr>
Date: Mon Jan 2 20:58:23 2012 +0100
winedbg: In x86_64 backend, now recognize 'rep ret' as a valid function return instruction.
---
programs/winedbg/be_x86_64.c | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/programs/winedbg/be_x86_64.c b/programs/winedbg/be_x86_64.c
index 253b4ac..7dbd301 100644
--- a/programs/winedbg/be_x86_64.c
+++ b/programs/winedbg/be_x86_64.c
@@ -300,7 +300,15 @@ static unsigned be_x86_64_is_step_over_insn(const void* insn)
static unsigned be_x86_64_is_function_return(const void* insn)
{
BYTE c;
- return dbg_read_memory(insn, &c, sizeof(c)) && ((c == 0xC2) || (c == 0xC3));
+
+ /* sigh... amd64 for prefetch optimization requires 'rep ret' in some cases */
+ if (!dbg_read_memory(insn, &c, sizeof(c))) return FALSE;
+ if (c == 0xF3) /* REP */
+ {
+ insn = (const char*)insn + 1;
+ if (!dbg_read_memory(insn, &c, sizeof(c))) return FALSE;
+ }
+ return c == 0xC2 /* ret */ || c == 0xC3 /* ret NN */;
}
static unsigned be_x86_64_is_break_insn(const void* insn)
More information about the wine-cvs
mailing list