Commit 745ec84c authored by Alexandre Julliard's avatar Alexandre Julliard

Export the CallFrom16xxx functions from kernel32. Renamed them

__wine_call_from_16 to follow the naming convention.
parent 3570bfd4
......@@ -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;
......
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