// SAPI.H - Private header file for SAPI // // DESCRIPTION // This file contains types that are private to the SAPI project. #ifndef _SAPI_INCLUDED_ #define _SAPI_INCLUDED_ typedef HIND HEXR; // A handle to an EXR (exe reference) typedef HIND HEXG; // A handle to an EXG (exe structure global) typedef HVOID HST; // A handle to source module table typedef HVOID HSL; // A handle to source line table typedef HVOID HFL; // A handle to an instance of a file #define hmodNull ((HMOD)NULL) #define hexgNull ((HEXG)NULL) #define hexrNull ((HEXR)NULL) #define hexeNull ((HEXE)NULL) #define hpdsNull ((HPDS)NULL) #define MDS_INDEX 1L // The following are defs stolen from CVDEF #include #define _MAX_CVPATH _MAX_PATH // max. length of full pathname #define _MAX_CVDRIVE _MAX_DRIVE // max. length of drive component #define _MAX_CVDIR _MAX_DIR // max. length of path component #define _MAX_CVFNAME _MAX_FNAME // max. length of file name component #define _MAX_CVEXT _MAX_EXT // max. length of extension component typedef SYMTYPE *SYMPTR; typedef CFLAGSYM *CFLAGPTR; typedef CONSTSYM *CONSTPTR; typedef REGSYM *REGPTR; typedef UDTSYM *UDTPTR; typedef SEARCHSYM *SEARCHPTR; typedef BLOCKSYM16 *BLOCKPTR16; typedef DATASYM16 *DATAPTR16; typedef PUBSYM16 *PUBPTR16; typedef LABELSYM16 *LABELPTR16; typedef BPRELSYM16 *BPRELPTR16; typedef PROCSYM16 *PROCPTR16; typedef THUNKSYM16 *THUNKPTR16; typedef CEXMSYM16 *CEXMPTR16; typedef VPATHSYM16 *VPATHPTR16; typedef WITHSYM16 *WITHPTR16; typedef BLOCKSYM32 *BLOCKPTR32; typedef DATASYM32 *DATAPTR32; typedef PUBSYM32 *PUBPTR32; typedef LABELSYM32 *LABELPTR32; typedef BPRELSYM32 *BPRELPTR32; typedef PROCSYM32 *PROCPTR32; typedef PROCSYMMIPS *PROCPTRMIPS; typedef THUNKSYM32 *THUNKPTR32; typedef CEXMSYM32 *CEXMPTR32; typedef WITHSYM32 *WITHPTR32; typedef VPATHSYM32 *VPATHPTR32; typedef BLOCKSYM *BLOCKPTR; typedef PROCSYM *PROCPTR; typedef THUNKSYM *THUNKPTR; typedef WITHSYM *WITHPTR; // End of CVDEF defines typedef struct _PDS { HLLI hlliExe; HPID hpid; } PDS; // PiD Struct typedef PDS * PPDS; typedef PDS * LPPDS; typedef union _UFOP { DWORD lfo; PVOID lpv; } UFOP; // Union of long File Offset & Pointer typedef UFOP *LPUFOP; typedef struct _ALM { BOOL fSeq; WORD btAlign; WORD cbBlock; DWORD cb; LPB pbData; UFOP rgufop [1]; // WORD cbLast; // After a null terminator, there is a field // containing the cb of the last align block } ALM; // ALigned Map typedef ALM *LPALM; typedef struct _ULP { DWORD ib; // Byte offset into the symbol table DWORD ulId; // Identified (either a uoff or a checksum) } ULP; // ULong Pair typedef ULP *LPULP; typedef struct _SHT { WORD HashIndex; WORD ccib; DWORD * rgcib; DWORD * rgib; LPALM lpalm; } SHT; // Symbol Hash Table typedef SHT *LPSHT; typedef struct _GST { LPALM lpalm; SHT shtName; SHT shtAddr; } GST; // Global Symbol Table -- Globals, Publics, or Statics typedef GST *LPGST; typedef struct _SGC { WORD seg; DWORD off; DWORD cb; } SGC; // SeGment Contributer typedef SGC *LPSGC; typedef struct _SGE { SGC sgc; HMOD hmod; } SGE; // SeGment directory Entry typedef SGE *LPSGE; typedef struct _SGD { WORD csge; LPSGE lpsge; } SGD; // SeGment Directory typedef SGD *LPSGD; typedef struct _MDS { HEXG hexg; // EXG parent of MDS list WORD imds; DWORD cbSymbols; LPB symbols; HST hst; LSZ name; DWORD ulhst; DWORD cbhst; DWORD ulsym; WORD csgc; LPSGC lpsgc; Mod* pmod; // NB10 } MDS; // MoDule Information typedef MDS *PMDS; typedef MDS *LPMDS; struct STAB; typedef struct STAB STAB; typedef struct _EXG { BOOL fOmfLoaded; BOOL fOmfMissing; BOOL fOmfSkipped; BOOL fOmfDefered; BOOL fOmfLoading; BOOL fIsPE; BOOL fIsRisc; BOOL fSymConverted; LSZ lszName; // File name of exe LSZ lszModule; // Module name of exe LSZ lszDebug; // File name for debug info LSZ lszPdbName; // File name of pdb LSZ lszAltName; // Alternate name (for KD debugging) LPB lpbData; // Pointer to raw data for this image (non-PDB) LPB lpgsi; // GSN Info table PVOID pvSymMappedBase; PDB * ppdb; DBI * pdbi; TPI * ptpi; GSI * pgsiPubs; // public symbols GSI * pgsiGlobs; // globals LPALM lpalmTypes; // Types table DWORD citd; // Number of types DWORD * rgitd; // Array of pointers to types GST gstPublics; GST gstGlobals; GST gstStatics; STAB * pstabUDTSym; WORD csgd; // Segment Directory LPSGD lpsgd; LPSGE lpsge; DWORD cMod; // Count of modules (count of sstModule should = sstFileIndex.cmodules) LPB lpefi; // Pointer to raw file index (for freeing) WORD * rgiulFile; // List of beginning index of module // file lists. WORD * rgculFile; // List of counts of module file lists DWORD * rgichFile; // Index into string table of file names DWORD cbFileNames; // Number of bytes in string table of file // names (lpchFileNames) LPCH lpchFileNames; // String table of file names DEBUGDATA debugData; // OSDEBUG4 information pdata/omap/fpo WORD cRef; // Reference count on this image LPMDS rgMod; // Array of module contributions. DWORD LoadAddress; // Bass address for this image DWORD ulTimeStamp; // Timestamp from the image DWORD ulCheckSum; // Checksum from the image } EXG; // EXe structure Global typedef EXG *PEXG; typedef EXG * LPEXG; typedef struct _EXE { HPDS hpds; // PID of process HEXG hexg; DWORD timestamp; DWORD TargetMachine; BOOL fIsLoaded; DWORD LoadAddress; LPDEBUGDATA pDebugData; } EXE; // EXE struct typedef EXE *PEXE; typedef EXE *LPEXE; typedef struct _LBS { ADDR addr; HMOD tagMod; SYMPTR tagLoc; SYMPTR tagLab; SYMPTR tagProc; SYMPTR tagThunk; CEXMPTR16 tagModelMin; CEXMPTR16 tagModelMax; } LBS; // LaBel Structure ??? typedef LBS *PLBS; typedef LBS *LPLBS; #define NEXTSYM(a,b) ((a) (((LPB) (b)) + ((SYMPTR) (b))->reclen + 2)) // New Source Line table handling and maintenance typedef struct _OFP { UOFFSET offStart; UOFFSET offEnd; } OFP; // OFset Pair -- used to maintain start/end offset pairs typedef OFP *LPOFP; typedef struct OPT { UOFFSET offStart; LPOFP lpofp; } OPT; // Offset Pair Table -- used to maintain start/end offset pairs typedef OPT *LPOPT; typedef char * (* CONVERTPROC) (HANDLE, char *); // Structure to cross-check validity of the .dbg file typedef struct _VLDCHK { DWORD TimeDateStamp; DWORD CheckSum; } VLDCHK; typedef VLDCHK *LPVLDCHK; typedef struct _LINECACHE { HSF hsf; WORD wLine; ADDR addr; SHOFF cbLn; WORD rgw[2]; BOOL fRet; WORD rgiLn[2]; } LINECACHE; extern LINECACHE LineCache; // hexe <--> hmod map cache typedef struct _MODCACHE { HMOD hmod; HEXE hexe; HPDS hpds; } MODCACHE; extern MODCACHE ModCache; typedef struct _HSFCACHE { HSF Hsf; HMOD Hmod; } HSFCACHE; extern HSFCACHE HsfCache; typedef struct _CXTCACHE { HMOD hmod; HEXE hexe; HPDS hpds; WORD seg; UOFFSET uoffBase; UOFFSET uoffLim; } CXTCACHE; extern CXTCACHE CxtCache; typedef struct _SLCACHE { char szFile[ _MAX_CVPATH ]; HEXE hexe; HMOD hmod; WORD line; LPSLP lpslp; int cslp; } SLCACHE; extern SLCACHE SlCache; typedef struct _ADDRCACHE { ADDR addr; WORD wLine; int cb; } ADDRCACHE; extern ADDRCACHE AddrCache; // // Matching criteria for DLL list // typedef enum _MATCH_CRIT { MATCH_FULLPATH, // Match full path MATCH_FILENAME, // Match filename MATCH_BASENAME // Match base name (no extension) } MATCH_CRIT; #if 0 INT FHOpen (LSZ); #define FHRead(fh,lpb,cb) (SYReadFar(fh, lpb, cb)) #define FHClose(fh) #define FHSeek(fh,ib) (SYSeek(fh, ib, SEEK_SET)) #define SYError() assert(FALSE) #endif #define cbAlign 0x1000 #define cbAlignType 0xC000 #endif // _SAPI_INCLUDED_