Commit 4872747b authored by Hans Leidekker's avatar Hans Leidekker Committed by Alexandre Julliard

ntdll: Fix breakpoint exception address on 64-bit Linux.

parent f2503a3e
......@@ -638,7 +638,15 @@ static void test_debug_loop(int argc, char **argv)
if (!ret) break;
if (ev.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT) break;
#if defined(__i386__) || defined(__x86_64__)
if (ev.dwDebugEventCode == EXCEPTION_DEBUG_EVENT &&
ev.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_BREAKPOINT)
{
BYTE byte = 0;
NtReadVirtualMemory(pi.hProcess, ev.u.Exception.ExceptionRecord.ExceptionAddress, &byte, 1, NULL);
ok(byte == 0xcc, "got %02x\n", byte);
}
#endif
ret = ContinueDebugEvent(ev.dwProcessId, ev.dwThreadId, DBG_CONTINUE);
ok(ret, "ContinueDebugEvent failed, last error %#x.\n", GetLastError());
if (!ret) break;
......
......@@ -3134,7 +3134,10 @@ static void trap_handler( int signal, siginfo_t *siginfo, void *sigcontext )
rec->ExceptionCode = EXCEPTION_SINGLE_STEP;
break;
case TRAP_BRKPT: /* Breakpoint exception */
/* Check if this is actuallly icebp instruction */
#ifdef SI_KERNEL
case SI_KERNEL:
#endif
/* Check if this is actually icebp instruction */
if (((unsigned char *)rec->ExceptionAddress)[-1] == 0xF1)
{
rec->ExceptionCode = EXCEPTION_SINGLE_STEP;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment