From 85d666aef1ff98fc570e73a95c98277c7489c3f6 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 12 Dec 2000 00:49:45 +0000 Subject: [PATCH] Use __ASM_GLOBAL_FUNC directly in i386-only code. --- relay32/relay386.c | 8 ++++---- relay32/snoop.c | 14 ++++++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/relay32/relay386.c b/relay32/relay386.c index e302fecca35..8851b123102 100644 --- a/relay32/relay386.c +++ b/relay32/relay386.c @@ -14,7 +14,6 @@ #include "selectors.h" #include "stackframe.h" #include "syslevel.h" -#include "main.h" #include "module.h" #include "debugtools.h" @@ -304,9 +303,6 @@ static LONGLONG RELAY_CallFrom32( int ret_addr, ... ) * (esp-8) ptr to relay entry code for RELAY_CallFrom32Regs * ... >128 bytes space free to be modified (ensured by the assembly glue) */ - -void WINAPI RELAY_DoCallFrom32Regs( CONTEXT86 *context ); -DEFINE_REGS_ENTRYPOINT_0( RELAY_CallFrom32Regs, RELAY_DoCallFrom32Regs ) void WINAPI RELAY_DoCallFrom32Regs( CONTEXT86 *context ) { char buffer[80]; @@ -390,6 +386,10 @@ void WINAPI RELAY_DoCallFrom32Regs( CONTEXT86 *context ) SYSLEVEL_CheckNotLevel( 2 ); } +void WINAPI RELAY_CallFrom32Regs(void); +__ASM_GLOBAL_FUNC( RELAY_CallFrom32Regs, + "call " __ASM_NAME("CALL32_Regs") "\n\t" + ".long " __ASM_NAME("RELAY_DoCallFrom32Regs") ",0" ); /*********************************************************************** * RELAY_SetupDLL diff --git a/relay32/snoop.c b/relay32/snoop.c index 37b978e6ce0..80f96aa04f7 100644 --- a/relay32/snoop.c +++ b/relay32/snoop.c @@ -258,8 +258,6 @@ SNOOP_PrintArg(DWORD x) { #define CALLER1REF (*(DWORD*)context->Esp) -void WINAPI SNOOP_DoEntry( CONTEXT86 *context ); -DEFINE_REGS_ENTRYPOINT_0( SNOOP_Entry, SNOOP_DoEntry ); void WINAPI SNOOP_DoEntry( CONTEXT86 *context ) { DWORD ordinal=0,entry = context->Eip - 5; @@ -340,8 +338,7 @@ void WINAPI SNOOP_DoEntry( CONTEXT86 *context ) DPRINTF(") ret=%08lx fs=%04lx\n",(DWORD)ret->origreturn,context->SegFs); } -void WINAPI SNOOP_DoReturn( CONTEXT86 *context ); -DEFINE_REGS_ENTRYPOINT_0( SNOOP_Return, SNOOP_DoReturn ); + void WINAPI SNOOP_DoReturn( CONTEXT86 *context ) { SNOOP_RETURNENTRY *ret = (SNOOP_RETURNENTRY*)(context->Eip - 5); @@ -373,6 +370,15 @@ void WINAPI SNOOP_DoReturn( CONTEXT86 *context ) context->Eax,(DWORD)ret->origreturn,context->SegFs ); ret->origreturn = NULL; /* mark as empty */ } + +/* assembly wrappers that save the context */ +__ASM_GLOBAL_FUNC( SNOOP_Entry, + "call " __ASM_NAME("CALL32_Regs") "\n\t" + ".long " __ASM_NAME("SNOOP_DoEntry") ",0" ); +__ASM_GLOBAL_FUNC( SNOOP_Return, + "call " __ASM_NAME("CALL32_Regs") "\n\t" + ".long " __ASM_NAME("SNOOP_DoReturn") ",0" ); + #else /* !__i386__ */ void SNOOP_RegisterDLL(HMODULE hmod,LPCSTR name,DWORD nrofordinals) { FIXME("snooping works only on i386 for now.\n");