From d30821a0ff988ce2336fdc2ebc397faaa80da970 Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Sun, 23 May 1999 09:19:52 +0000 Subject: [PATCH] Added _DebugOutput (KERNEL.328), LogApiThk (KERNEL.423), LogApiThkLSF (KERNEL32.42), LogApiThkSL (KERNEL32.44), LogCBThkSL (KERNEL32.47), and SSConfirmSmallStack (KERNEL.704). --- if1632/kernel.spec | 6 +++--- misc/wsprintf.c | 44 ++++++++++++++++++++++++++++++++++++++++++ relay32/kernel32.spec | 6 +++--- win32/kernel32.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 103 insertions(+), 6 deletions(-) diff --git a/if1632/kernel.spec b/if1632/kernel.spec index a4e62a4aeda..1c8de60573a 100644 --- a/if1632/kernel.spec +++ b/if1632/kernel.spec @@ -269,7 +269,7 @@ file krnl386.exe 325 pascal16 LogParamError(word ptr ptr) LogParamError16 326 return IsRomFile 2 0 327 register K327() HandleParamError -328 stub _DebugOutput +328 pascal16 _DebugOutput() _DebugOutput 329 pascal16 K329(str word) DebugFillBuffer 332 long THHOOK(0 0 0 0 0 0 0 0) 334 pascal16 IsBadReadPtr(segptr word) IsBadReadPtr16 @@ -335,7 +335,7 @@ file krnl386.exe 420 pascal GetFileAttributes(ptr) GetFileAttributes16 421 pascal16 SetFileAttributes(ptr long) SetFileAttributes16 422 pascal16 GetDiskFreeSpace(ptr ptr ptr ptr ptr) GetDiskFreeSpace16 -423 stub LogApiThk +423 pascal16 LogApiThk(str) LogApiThk 431 pascal16 IsPeFormat(str word) IsPeFormat16 432 stub FileTimeToLocalFileTime 434 pascal16 UnicodeToAnsi(ptr ptr word) UnicodeToAnsi16 @@ -510,7 +510,7 @@ file krnl386.exe 701 stub SSOnBigStack 702 stub SSCall 703 stub CallProc32WFix -704 stub SSConfirmSmallStack +704 register SSConfirmSmallStack() SSConfirmSmallStack # Win95 krnl386.exe also exports ordinals 802-864, diff --git a/misc/wsprintf.c b/misc/wsprintf.c index e429971a085..bf6852859d6 100644 --- a/misc/wsprintf.c +++ b/misc/wsprintf.c @@ -10,6 +10,8 @@ #include "winuser.h" #include "ldt.h" #include "stackframe.h" +#include "module.h" +#include "global.h" #include "debug.h" DEFAULT_DEBUG_CHANNEL(string) @@ -666,3 +668,45 @@ INT WINAPIV wsnprintfW( LPWSTR buffer, UINT maxlen, LPCWSTR spec, ... ) va_end( valist ); return res; } + +/*********************************************************************** + * _DebugOutput (KERNEL.328) + */ +void WINAPIV _DebugOutput( void ) +{ + VA_LIST16 valist; + WORD flags; + SEGPTR spec; + int i, nSeg = 0; + NE_MODULE *pModule; + char caller[101], temp[512]; + + /* Decode caller address */ + pModule = NE_GetPtr( CURRENT_STACK16->cs ); + if ( pModule ) + { + SEGTABLEENTRY *pSeg = NE_SEG_TABLE( pModule ); + for ( i = 0; i < pModule->seg_count; i++, pSeg++ ) + if ( GlobalHandleToSel16( pSeg->hSeg ) == CURRENT_STACK16->cs ) + { + nSeg = i+1; + break; + } + } + if ( nSeg ) + sprintf( caller, "%s %02X:%04X", NE_MODULE_NAME( pModule ), + nSeg, CURRENT_STACK16->ip ); + else + sprintf( caller, "%04X:%04X", CURRENT_STACK16->cs, CURRENT_STACK16->ip ); + + /* Build debug message string */ + VA_START16( valist ); + flags = VA_ARG16( valist, WORD ); + spec = VA_ARG16( valist, SEGPTR ); + wvsnprintf16( temp, sizeof(temp), (LPCSTR)PTR_SEG_TO_LIN(spec), valist ); + + /* Output */ + DPRINTF( "_DebugOutput: %s %04X %s\n", + caller, flags, debugstr_an(temp, sizeof(temp)) ); +} + diff --git a/relay32/kernel32.spec b/relay32/kernel32.spec index d3df4e9e6ea..403667ef96c 100644 --- a/relay32/kernel32.spec +++ b/relay32/kernel32.spec @@ -56,12 +56,12 @@ import ntdll.dll 39 register FreeMappedBuffer() FreeMappedBuffer 40 register OT_32ThkLSF() OT_32ThkLSF 41 stdcall ThunkInitLSF(long str long str str) ThunkInitLSF - 42 stub LogApiThkLSF + 42 register LogApiThkLSF() LogApiThkLSF 43 stdcall ThunkInitLS(long str long str str) ThunkInitLS - 44 stub LogApiThkSL + 44 register LogApiThkSL() LogApiThkSL 45 register Common32ThkLS() Common32ThkLS 46 stdcall ThunkInitSL(long str long str str) ThunkInitSL - 47 stub LogCBThkSL + 47 register LogCBThkSL() LogCBThkSL 48 stdcall ReleaseThunkLock(ptr) ReleaseThunkLock 49 stdcall RestoreThunkLock(long) RestoreThunkLock 50 stdcall AddAtomA(str) AddAtomA diff --git a/win32/kernel32.c b/win32/kernel32.c index 50a38e639fc..b566a042d64 100644 --- a/win32/kernel32.c +++ b/win32/kernel32.c @@ -40,6 +40,47 @@ DECLARE_DEBUG_CHANNEL(win32) ***********************************************************************/ /*********************************************************************** + * LogApiThk (KERNEL.423) + */ +void WINAPI LogApiThk( LPSTR func ) +{ + TRACE_(thunk)( "%s\n", func ); +} + +/*********************************************************************** + * LogApiThkLSF (KERNEL32.42) + * + * NOTE: needs to preserve all registers! + */ +void WINAPI REGS_FUNC(LogApiThkLSF)( CONTEXT *context ) +{ + LPSTR func = (LPSTR)STACK32_POP( context ); + TRACE_(thunk)( "%s\n", func ); +} + +/*********************************************************************** + * LogApiThkSL (KERNEL32.44) + * + * NOTE: needs to preserve all registers! + */ +void WINAPI REGS_FUNC(LogApiThkSL)( CONTEXT *context ) +{ + LPSTR func = (LPSTR)STACK32_POP( context ); + TRACE_(thunk)( "%s\n", func ); +} + +/*********************************************************************** + * LogCBThkSL (KERNEL32.47) + * + * NOTE: needs to preserve all registers! + */ +void WINAPI REGS_FUNC(LogCBThkSL)( CONTEXT *context ) +{ + LPSTR func = (LPSTR)STACK32_POP( context ); + TRACE_(thunk)( "%s\n", func ); +} + +/*********************************************************************** * Generates a FT_Prolog call. * * 0FB6D1 movzbl edx,cl @@ -812,6 +853,18 @@ BOOL WINAPI SSOnBigStack() } /********************************************************************** + * SSConfirmSmallStack KERNEL.704 + * + * Abort if not on small stack. + * + * This must be a register routine as it has to preserve *all* registers. + */ +void WINAPI SSConfirmSmallStack( CONTEXT *context ) +{ + /* We are always on the small stack while in 16-bit code ... */ +} + +/********************************************************************** * SSCall * One of the real thunking functions. This one seems to be for 32<->32 * thunks. It should probably be capable of crossing processboundaries. -- 2.11.4.GIT