2020-09-30 17:12:29 +02:00

163 lines
3.4 KiB
C++

// shinit
//
// Copyright <C> 1990-94, Microsoft Corporation
//
// [00] 31-dec-91 DavidGra
// Add SHFindSymbol API for assembler symbol handling.
//
// 10-Nov-94 BryanT
// Merge in NT changes.
// Remove SHF ifdef's, remove non-Win32 hosting, remove FAR/NEAR/PASCAL.
// Replace SHCritxxx calls with native CritSec calls.
// Initialize the SymCvt pointers.
// Use the DBG version macros if NT_BUILD
// Add the background symbol support, but leave it under if 0 for now.
#include "shinc.hpp"
#pragma hdrstop
#include "version.h"
CRITICAL_SECTION csSh; // Global CritSec used for MT safe.
KNF knf; // Kernel functions (init to zero by the loader)
HMODULE hLib; // Handle returned from LoadLibrary on symcvt symcvt
CONVERTPROC pfConvertSymbolsForImage; // Symcvt ptr.
#if 0
HANDLE hEventLoaded;
CRITICAL_SECTION CsSymbolLoad;
CRITICAL_SECTION CsSymbolProcess;
#endif
static SHF shf = {
sizeof(SHF),
SHCreateProcess,
SHSetHpid,
SHDeleteProcess,
SHChangeProcess,
SHAddDll,
SHAddDllsToProcess,
SHLoadDll,
SHUnloadDll,
SHGetDebugStart,
SHGetSymName,
SHAddrFromHsym,
SHHmodGetNextGlobal,
SHModelFromAddr,
SHPublicNameToAddr,
SHGetSymbol,
PHGetAddr,
SHIsLabel,
SHSetDebuggeeDir,
SHAddrToLabel,
SHGetSymLoc,
SHFIsAddrNonVirtual,
SHIsFarProc,
SHGetNextExe,
SHHexeFromHmod,
SHGetNextMod,
SHGetCxtFromHmod,
SHSetCxt,
SHSetCxtMod,
SHFindNameInGlobal,
SHFindNameInContext,
SHGoToParent,
SHHsymFromPcxt,
SHNextHsym,
NULL, // SHGetFuncCXF
SHGetModName,
SHGetExeName,
SHGethExeFromName,
SHGetNearestHsym,
SHIsInProlog,
SHIsAddrInCxt,
SHCompareRE, // SHCompareRE
SHFindSymbol,
PHGetNearestHsym,
PHFindNameInPublics,
THGetTypeFromIndex,
THGetNextType,
SHLpGSNGetTable,
SHCanDisplay,
// Source Line Handler API
SLLineFromAddr,
SLFLineToAddr,
SLNameFromHsf,
SLNameFromHmod,
SLFQueryModSrc,
NULL,
SLHsfFromPcxt,
SLHsfFromFile,
SLCAddrFromLine,
SHFree,
SHUnloadSymbolHandler,
SHGetExeTimeStamp,
SHPdbNameFromExe,
SHGetDebugData,
SHIsThunk,
SHFindSymInExe,
SHFindSLink32,
SHIsEmiLoaded,
// Entries added for NT work.
SHGetModule,
SHGetCxtFromHexe,
SHGetModNameFromHexe,
SHGetSymFName,
SHGethExeFromModuleName,
SHLszGetErrorText,
SHWantSymbols,
SHFindNameInTypes
};
VOID
SHFree(
LPV lpv
)
{
MHFree (lpv);
}
BOOL
SHInit(
LPSHF *lplpshf,
LPKNF lpknf
)
{
knf = *lpknf;
*lplpshf = &shf;
// Initialize symbol convert pointers.
hLib = (HMODULE) LoadLibrary( "symcvt.dll" );
if (hLib != NULL) {
pfConvertSymbolsForImage = (CONVERTPROC) GetProcAddress( hLib, "ConvertSymbolsForImage" );
}
InitializeCriticalSection(&csSh);
#if 0
// initialize synchronization objects used by background sym loader.
InitializeCriticalSection( &CsSymbolLoad );
InitializeCriticalSection( &CsSymbolProcess );
hEventLoaded = CreateEvent( NULL, FALSE, FALSE, NULL );
#endif
return FInitLists();
}
#if defined(DEBUGVER)
DEBUG_VERSION('S','H',"Debug Symbolics handler")
#else
RELEASE_VERSION('S','H',"Debug Symbolics handler")
#endif
DBGVERSIONCHECK();