1
0
Fork 0
mirror of synced 2025-03-07 03:53:26 +01:00

ntdll: Use a .seh handler for the process breakpoint.

This commit is contained in:
Alexandre Julliard 2024-01-23 15:55:47 +01:00
parent 1414adfa46
commit 6085ab8822
4 changed files with 48 additions and 26 deletions

View file

@ -1619,6 +1619,19 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, ULONG_PTR unk2, ULONG_PTR unk3
/***********************************************************************
* process_breakpoint
*/
#ifdef __WINE_PE_BUILD
__ASM_GLOBAL_FUNC( process_breakpoint,
".seh_endprologue\n\t"
".seh_handler process_breakpoint_handler, %except\n\t"
"udf #0xfe\n\t"
"bx lr\n"
"process_breakpoint_handler:\n\t"
"ldr r0, [r2, #0x40]\n\t" /* context->Pc */
"add r0, r0, #2\n\t"
"str r0, [r2, #0x40]\n\t"
"mov r0, #0\n\t" /* ExceptionContinueExecution */
"bx lr" )
#else
void WINAPI process_breakpoint(void)
{
__TRY
@ -1631,6 +1644,7 @@ void WINAPI process_breakpoint(void)
}
__ENDTRY
}
#endif
/**********************************************************************
* DbgBreakPoint (NTDLL.@)

View file

@ -1589,19 +1589,17 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, ULONG_PTR unk2, ULONG_PTR unk3
/***********************************************************************
* process_breakpoint
*/
void WINAPI process_breakpoint(void)
{
__TRY
{
DbgBreakPoint();
}
__EXCEPT_ALL
{
/* do nothing */
}
__ENDTRY
}
__ASM_GLOBAL_FUNC( process_breakpoint,
".seh_endprologue\n\t"
".seh_handler process_breakpoint_handler, @except\n\t"
"brk #0xf000\n\t"
"ret\n"
"process_breakpoint_handler:\n\t"
"ldr x4, [x2, #0x108]\n\t" /* context->Pc */
"add x4, x4, #4\n\t"
"str x4, [x2, #0x108]\n\t"
"mov w0, #0\n\t" /* ExceptionContinueExecution */
"ret" )
/**********************************************************************
* DbgBreakPoint (NTDLL.@)

View file

@ -2004,19 +2004,17 @@ void WINAPI LdrInitializeThunk( CONTEXT *arm_context, ULONG_PTR unk2, ULONG_PTR
/***********************************************************************
* process_breakpoint
*/
void WINAPI process_breakpoint(void)
{
__TRY
{
DbgBreakPoint();
}
__EXCEPT_ALL
{
/* do nothing */
}
__ENDTRY
}
__ASM_GLOBAL_FUNC( "#process_breakpoint",
".seh_endprologue\n\t"
".seh_handler process_breakpoint_handler, @except\n\t"
"brk #0xf000\n\t"
"ret\n"
"process_breakpoint_handler:\n\t"
"ldr x4, [x2, #0x108]\n\t" /* context->Pc */
"add x4, x4, #4\n\t"
"str x4, [x2, #0x108]\n\t"
"mov w0, #0\n\t" /* ExceptionContinueExecution */
"ret" )
/**********************************************************************
* DbgBreakPoint (NTDLL.@)

View file

@ -1728,6 +1728,17 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, ULONG_PTR unk2, ULONG_PTR unk3
/***********************************************************************
* process_breakpoint
*/
#ifdef __WINE_PE_BUILD
__ASM_GLOBAL_FUNC( process_breakpoint,
".seh_endprologue\n\t"
".seh_handler process_breakpoint_handler, @except\n\t"
"int $3\n\t"
"ret\n"
"process_breakpoint_handler:\n\t"
"incq 0xf8(%r8)\n\t" /* context->Rip */
"xorl %eax,%eax\n\t" /* ExceptionContinueExecution */
"ret" )
#else
void WINAPI process_breakpoint(void)
{
__TRY
@ -1740,6 +1751,7 @@ void WINAPI process_breakpoint(void)
}
__ENDTRY
}
#endif
/**********************************************************************