Use __ASM_GLOBAL_FUNC directly in i386-only code.

This commit is contained in:
Alexandre Julliard 2000-12-12 00:49:45 +00:00
parent a67369ea00
commit 85d666aef1
2 changed files with 14 additions and 8 deletions

View File

@ -14,7 +14,6 @@
#include "selectors.h" #include "selectors.h"
#include "stackframe.h" #include "stackframe.h"
#include "syslevel.h" #include "syslevel.h"
#include "main.h"
#include "module.h" #include "module.h"
#include "debugtools.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 * (esp-8) ptr to relay entry code for RELAY_CallFrom32Regs
* ... >128 bytes space free to be modified (ensured by the assembly glue) * ... >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 ) void WINAPI RELAY_DoCallFrom32Regs( CONTEXT86 *context )
{ {
char buffer[80]; char buffer[80];
@ -390,6 +386,10 @@ void WINAPI RELAY_DoCallFrom32Regs( CONTEXT86 *context )
SYSLEVEL_CheckNotLevel( 2 ); 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 * RELAY_SetupDLL

View File

@ -258,8 +258,6 @@ SNOOP_PrintArg(DWORD x) {
#define CALLER1REF (*(DWORD*)context->Esp) #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 ) void WINAPI SNOOP_DoEntry( CONTEXT86 *context )
{ {
DWORD ordinal=0,entry = context->Eip - 5; 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); 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 ) void WINAPI SNOOP_DoReturn( CONTEXT86 *context )
{ {
SNOOP_RETURNENTRY *ret = (SNOOP_RETURNENTRY*)(context->Eip - 5); 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 ); context->Eax,(DWORD)ret->origreturn,context->SegFs );
ret->origreturn = NULL; /* mark as empty */ 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__ */ #else /* !__i386__ */
void SNOOP_RegisterDLL(HMODULE hmod,LPCSTR name,DWORD nrofordinals) { void SNOOP_RegisterDLL(HMODULE hmod,LPCSTR name,DWORD nrofordinals) {
FIXME("snooping works only on i386 for now.\n"); FIXME("snooping works only on i386 for now.\n");