Export the CallFrom16xxx functions from kernel32. Renamed them
__wine_call_from_16 to follow the naming convention.
This commit is contained in:
parent
3570bfd41f
commit
745ec84c8b
|
@ -937,3 +937,16 @@ debug_channels (comm debugstr dll int resource stress thunk toolhelp win32)
|
|||
@ stdcall InitializeCriticalSectionAndSpinCount(ptr long) InitializeCriticalSectionAndSpinCount
|
||||
@ stdcall SetCriticalSectionSpinCount(ptr long) SetCriticalSectionSpinCount
|
||||
@ stdcall ProcessIdToSessionId(long ptr) ProcessIdToSessionId
|
||||
|
||||
##################
|
||||
# Wine extensions
|
||||
#
|
||||
# All functions must be prefixed with '__wine_' (for internal functions)
|
||||
# or 'wine_' (for user-visible functions) to avoid namespace conflicts.
|
||||
|
||||
# 16-bit relays
|
||||
@ cdecl __wine_register_dll_16(ptr) __wine_register_dll_16
|
||||
@ varargs __wine_call_from_16_word() __wine_call_from_16_word
|
||||
@ varargs __wine_call_from_16_long() __wine_call_from_16_word
|
||||
@ varargs __wine_call_from_16_regs() __wine_call_from_16_word
|
||||
@ varargs __wine_call_from_16_thunk() __wine_call_from_16_word
|
||||
|
|
|
@ -1302,7 +1302,7 @@ void WINAPI C16ThkSL(CONTEXT86 *context)
|
|||
* push edx
|
||||
* push dx
|
||||
* push edx
|
||||
* call __FLATCS:CallFrom16Thunk
|
||||
* call __FLATCS:__wine_call_from_16_thunk
|
||||
*/
|
||||
|
||||
*x++ = 0xB8; *((WORD *)x)++ = ds;
|
||||
|
@ -1315,7 +1315,7 @@ void WINAPI C16ThkSL(CONTEXT86 *context)
|
|||
*x++ = 0x66; *x++ = 0x52;
|
||||
*x++ = 0x52;
|
||||
*x++ = 0x66; *x++ = 0x52;
|
||||
*x++ = 0x66; *x++ = 0x9A; *((DWORD *)x)++ = (DWORD)CallFrom16Thunk;
|
||||
*x++ = 0x66; *x++ = 0x9A; *((DWORD *)x)++ = (DWORD)__wine_call_from_16_thunk;
|
||||
*((WORD *)x)++ = cs;
|
||||
|
||||
/* Jump to the stub code just created */
|
||||
|
@ -1361,7 +1361,7 @@ void WINAPI C16ThkSL01(CONTEXT86 *context)
|
|||
* push edx
|
||||
* push dx
|
||||
* push edx
|
||||
* call __FLATCS:CallFrom16Thunk
|
||||
* call __FLATCS:__wine_call_from_16_thunk
|
||||
*/
|
||||
|
||||
*x++ = 0x66; *x++ = 0x33; *x++ = 0xC0;
|
||||
|
@ -1372,7 +1372,7 @@ void WINAPI C16ThkSL01(CONTEXT86 *context)
|
|||
*x++ = 0x66; *x++ = 0x52;
|
||||
*x++ = 0x52;
|
||||
*x++ = 0x66; *x++ = 0x52;
|
||||
*x++ = 0x66; *x++ = 0x9A; *((DWORD *)x)++ = (DWORD)CallFrom16Thunk;
|
||||
*x++ = 0x66; *x++ = 0x9A; *((DWORD *)x)++ = (DWORD)__wine_call_from_16_thunk;
|
||||
*((WORD *)x)++ = cs;
|
||||
|
||||
/* Jump to the stub code just created */
|
||||
|
|
|
@ -209,11 +209,11 @@ LPCSTR BUILTIN_GetEntryPoint16( STACK16FRAME *frame, LPSTR name, WORD *pOrd )
|
|||
|
||||
|
||||
/***********************************************************************
|
||||
* BUILTIN_RegisterDLL
|
||||
* __wine_register_dll_16
|
||||
*
|
||||
* Register a built-in DLL descriptor.
|
||||
*/
|
||||
void BUILTIN_RegisterDLL( const BUILTIN16_DESCRIPTOR *descr )
|
||||
void __wine_register_dll_16( const BUILTIN16_DESCRIPTOR *descr )
|
||||
{
|
||||
assert( nb_dlls < MAX_DLLS );
|
||||
builtin_dlls[nb_dlls++] = descr;
|
||||
|
|
|
@ -75,17 +75,10 @@ void CALLBACK CallTo16RegisterShort( CONTEXT86 *context, INT nArgs )
|
|||
void CALLBACK CallTo16RegisterLong ( CONTEXT86 *context, INT nArgs )
|
||||
{ assert( FALSE ); }
|
||||
|
||||
WORD CallFrom16Word( void )
|
||||
{ assert( FALSE ); }
|
||||
|
||||
LONG CallFrom16Long( void )
|
||||
{ assert( FALSE ); }
|
||||
|
||||
void CallFrom16Register( void )
|
||||
{ assert( FALSE ); }
|
||||
|
||||
void CallFrom16Thunk( void )
|
||||
{ assert( FALSE ); }
|
||||
WORD __wine_call_from_16_word() { assert( FALSE ); }
|
||||
LONG __wine_call_from_16_long() { assert( FALSE ); }
|
||||
void __wine_call_from_16_regs() { assert( FALSE ); }
|
||||
void __wine_call_from_16_thunk() { assert( FALSE ); }
|
||||
|
||||
DWORD WINAPI CALL32_CBClient( FARPROC proc, LPWORD args, DWORD *esi )
|
||||
{ assert( FALSE ); }
|
||||
|
|
|
@ -99,7 +99,7 @@ SNOOP16_RegisterDLL(NE_MODULE *pModule,LPCSTR name) {
|
|||
snr[0].pushl = 0x68;
|
||||
snr[0].realfun = (DWORD)SNOOP16_Entry;
|
||||
snr[0].lcall = 0x9a;
|
||||
snr[0].callfromregs = (DWORD)CallFrom16Register;
|
||||
snr[0].callfromregs = (DWORD)__wine_call_from_16_regs;
|
||||
snr[0].seg = __get_cs();
|
||||
snr[0].lret = 0xcb66;
|
||||
|
||||
|
@ -109,7 +109,7 @@ SNOOP16_RegisterDLL(NE_MODULE *pModule,LPCSTR name) {
|
|||
snr[1].pushl = 0x68;
|
||||
snr[1].realfun = (DWORD)SNOOP16_Return;
|
||||
snr[1].lcall = 0x9a;
|
||||
snr[1].callfromregs = (DWORD)CallFrom16Register;
|
||||
snr[1].callfromregs = (DWORD)__wine_call_from_16_regs;
|
||||
snr[1].seg = __get_cs();
|
||||
snr[1].lret = 0xcb66;
|
||||
}
|
||||
|
|
|
@ -14,11 +14,6 @@
|
|||
struct _CONTEXT86;
|
||||
struct _STACK16FRAME;
|
||||
|
||||
extern WORD CallFrom16Word();
|
||||
extern LONG CallFrom16Long();
|
||||
extern void CallFrom16Register();
|
||||
extern void CallFrom16Thunk();
|
||||
|
||||
extern WORD CALLBACK CallTo16Word( FARPROC16 target, INT nArgs );
|
||||
extern LONG CALLBACK CallTo16Long( FARPROC16 target, INT nArgs );
|
||||
extern void CALLBACK CallTo16RegisterShort( struct _CONTEXT86 *context, INT nArgs );
|
||||
|
@ -63,6 +58,11 @@ typedef struct
|
|||
|
||||
extern HMODULE16 BUILTIN_LoadModule( LPCSTR name );
|
||||
extern LPCSTR BUILTIN_GetEntryPoint16( struct _STACK16FRAME *frame, LPSTR name, WORD *pOrd );
|
||||
extern void BUILTIN_RegisterDLL( const BUILTIN16_DESCRIPTOR *descr );
|
||||
|
||||
extern void __wine_register_dll_16( const BUILTIN16_DESCRIPTOR *descr );
|
||||
extern WORD __wine_call_from_16_word();
|
||||
extern LONG __wine_call_from_16_long();
|
||||
extern void __wine_call_from_16_regs();
|
||||
extern void __wine_call_from_16_thunk();
|
||||
|
||||
#endif /* __WINE_BUILTIN16_H */
|
||||
|
|
|
@ -87,17 +87,16 @@
|
|||
*/
|
||||
static void BuildCallFrom16Core( FILE *outfile, int reg_func, int thunk, int short_ret )
|
||||
{
|
||||
char *name = thunk? "Thunk" : reg_func? "Register" : short_ret? "Word" : "Long";
|
||||
char *name = thunk? "thunk" : reg_func? "regs" : short_ret? "word" : "long";
|
||||
|
||||
/* Function header */
|
||||
fprintf( outfile, "\n\t.align 4\n" );
|
||||
#ifdef USE_STABS
|
||||
fprintf( outfile, ".stabs \"CallFrom16%s:F1\",36,0,0," PREFIX "CallFrom16%s\n",
|
||||
name, name);
|
||||
fprintf( outfile, ".stabs \"__wine_call_from_16_%s:F1\",36,0,0," PREFIX "__wine_call_from_16_%s\n", name, name);
|
||||
#endif
|
||||
fprintf( outfile, "\t.type " PREFIX "CallFrom16%s,@function\n", name );
|
||||
fprintf( outfile, "\t.globl " PREFIX "CallFrom16%s\n", name );
|
||||
fprintf( outfile, PREFIX "CallFrom16%s:\n", name );
|
||||
fprintf( outfile, "\t.type " PREFIX "__wine_call_from_16_%s,@function\n", name );
|
||||
fprintf( outfile, "\t.globl " PREFIX "__wine_call_from_16_%s\n", name );
|
||||
fprintf( outfile, PREFIX "__wine_call_from_16_%s:\n", name );
|
||||
|
||||
/* Create STACK16FRAME (except STACK32FRAME link) */
|
||||
fprintf( outfile, "\tpushw %%gs\n" );
|
||||
|
@ -114,10 +113,10 @@ static void BuildCallFrom16Core( FILE *outfile, int reg_func, int thunk, int sho
|
|||
if ( UsePIC )
|
||||
{
|
||||
/* Get Global Offset Table into %ecx */
|
||||
fprintf( outfile, "\tcall .LCallFrom16%s.getgot1\n", name );
|
||||
fprintf( outfile, ".LCallFrom16%s.getgot1:\n", name );
|
||||
fprintf( outfile, "\tcall .L__wine_call_from_16_%s.getgot1\n", name );
|
||||
fprintf( outfile, ".L__wine_call_from_16_%s.getgot1:\n", name );
|
||||
fprintf( outfile, "\tpopl %%ecx\n" );
|
||||
fprintf( outfile, "\taddl $_GLOBAL_OFFSET_TABLE_+[.-.LCallFrom16%s.getgot1], %%ecx\n", name );
|
||||
fprintf( outfile, "\taddl $_GLOBAL_OFFSET_TABLE_+[.-.L__wine_call_from_16_%s.getgot1], %%ecx\n", name );
|
||||
}
|
||||
|
||||
if (UsePIC)
|
||||
|
@ -278,10 +277,10 @@ static void BuildCallFrom16Core( FILE *outfile, int reg_func, int thunk, int sho
|
|||
fprintf( outfile, "\tpushl %%ebx\n" );
|
||||
|
||||
/* Get Global Offset Table into %ebx (for PLT call) */
|
||||
fprintf( outfile, "\tcall .LCallFrom16%s.getgot2\n", name );
|
||||
fprintf( outfile, ".LCallFrom16%s.getgot2:\n", name );
|
||||
fprintf( outfile, "\tcall .L__wine_call_from_16_%s.getgot2\n", name );
|
||||
fprintf( outfile, ".L__wine_call_from_16_%s.getgot2:\n", name );
|
||||
fprintf( outfile, "\tpopl %%ebx\n" );
|
||||
fprintf( outfile, "\taddl $_GLOBAL_OFFSET_TABLE_+[.-.LCallFrom16%s.getgot2], %%ebx\n", name );
|
||||
fprintf( outfile, "\taddl $_GLOBAL_OFFSET_TABLE_+[.-.L__wine_call_from_16_%s.getgot2], %%ebx\n", name );
|
||||
}
|
||||
|
||||
fprintf( outfile, "\tpushl %%edx\n" );
|
||||
|
@ -317,10 +316,10 @@ static void BuildCallFrom16Core( FILE *outfile, int reg_func, int thunk, int sho
|
|||
fprintf( outfile, "\tpushl %%ebx\n" );
|
||||
|
||||
/* Get Global Offset Table into %ebx (for PLT call) */
|
||||
fprintf( outfile, "\tcall .LCallFrom16%s.getgot3\n", name );
|
||||
fprintf( outfile, ".LCallFrom16%s.getgot3:\n", name );
|
||||
fprintf( outfile, "\tcall .L__wine_call_from_16_%s.getgot3\n", name );
|
||||
fprintf( outfile, ".L__wine_call_from_16_%s.getgot3:\n", name );
|
||||
fprintf( outfile, "\tpopl %%ebx\n" );
|
||||
fprintf( outfile, "\taddl $_GLOBAL_OFFSET_TABLE_+[.-.LCallFrom16%s.getgot3], %%ebx\n", name );
|
||||
fprintf( outfile, "\taddl $_GLOBAL_OFFSET_TABLE_+[.-.L__wine_call_from_16_%s.getgot3], %%ebx\n", name );
|
||||
}
|
||||
|
||||
fprintf( outfile, "\tpushl %%eax\n" );
|
||||
|
|
|
@ -682,11 +682,11 @@ void BuildSpec16File( FILE *outfile )
|
|||
if ( typelist[i]->type == TYPE_INTERRUPT )
|
||||
argsize += 2;
|
||||
|
||||
fprintf( outfile, " { 0x68, %s_CallFrom16_%s, 0x9a, CallFrom16%s,\n",
|
||||
fprintf( outfile, " { 0x68, %s_CallFrom16_%s, 0x9a, __wine_call_from_16_%s,\n",
|
||||
DLLName, profile,
|
||||
(typelist[i]->type == TYPE_REGISTER
|
||||
|| typelist[i]->type == TYPE_INTERRUPT)? "Register":
|
||||
typelist[i]->type == TYPE_PASCAL_16? "Word" : "Long" );
|
||||
|| typelist[i]->type == TYPE_INTERRUPT)? "regs":
|
||||
typelist[i]->type == TYPE_PASCAL_16? "word" : "long" );
|
||||
if (argsize)
|
||||
fprintf( outfile, " 0x%04x, 0x66, 0xca, %d, \"%s\" },\n",
|
||||
code_selector, argsize, profile );
|
||||
|
@ -787,7 +787,7 @@ void BuildSpec16File( FILE *outfile )
|
|||
fprintf( outfile, " \"\\t.previous\\n\");\n" );
|
||||
fprintf( outfile, "}\n" );
|
||||
fprintf( outfile, "#endif /* defined(__GNUC__) */\n" );
|
||||
fprintf( outfile, "static void %s_init(void) { BUILTIN_RegisterDLL( &descriptor ); }\n",
|
||||
fprintf( outfile, "static void %s_init(void) { __wine_register_dll_16( &descriptor ); }\n",
|
||||
DLLName );
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ typedef struct
|
|||
BYTE pushl_relay; /* pushl $relay */
|
||||
void (*relay)(); /* WINPROC_Thunk16To32A/W() */
|
||||
BYTE lcall; /* lcall cs:glue */
|
||||
void (*glue)(); /* CallFrom16Long */
|
||||
void (*glue)(); /* __wine_call_from_16_long */
|
||||
WORD cs; /* __FLATCS */
|
||||
WORD lret; /* lret $10 */
|
||||
WORD nArgs;
|
||||
|
@ -335,7 +335,7 @@ static WINDOWPROC *WINPROC_AllocWinProc( WNDPROC16 func, WINDOWPROCTYPE type,
|
|||
(void(*)())WINPROC_Thunk16To32A :
|
||||
(void(*)())WINPROC_Thunk16To32W;
|
||||
proc->thunk.t_from16.lcall = 0x9a; /* lcall cs:glue */
|
||||
proc->thunk.t_from16.glue = (void*)CallFrom16Long;
|
||||
proc->thunk.t_from16.glue = (void*)__wine_call_from_16_long;
|
||||
proc->thunk.t_from16.cs = __get_cs();
|
||||
proc->thunk.t_from16.lret = 0xca66;
|
||||
proc->thunk.t_from16.nArgs = 10;
|
||||
|
|
Loading…
Reference in New Issue