/* SCCSID = @(#)newdeb.h 4.1 86/03/11 */ /* * Copyright Microsoft Corporation 1985 * * This Module contains Proprietary Information of Microsoft * Corporation and should be treated as Confidential. * * newdeb.h: File format for symbolic debug information. */ #if CVVERSION == 0 typedef struct /* Section Table */ { long d_lfaMod; /* File offset of MODULES */ long d_lfaPub; /* File offset of PUBLICS */ long d_lfaTyp; /* File offset of TYPES */ long d_lfaSym; /* File offset of SMBOLS */ long d_lfaSrc; /* File offset of SRCLINES */ char d_ver; /* Version number */ char d_flags; /* Flags */ } SECTABTYPE; #define CBDEBHDRTYPE 22 typedef struct /* Module Entry */ { struct { short sa; /* Code seg base */ short ra; /* Offset in code seg */ short cb; } dm_code; long dm_raPub; /* offset in PUBLICS */ long dm_raTyp; /* offset in TYPES */ long dm_raSym; /* offset in SYMBOLS */ long dm_raSrc; /* offset in SRCLINES */ short dm_cbPub; /* length in PUBLICS */ short dm_cbTyp; /* length in TYPES */ short dm_cbSym; /* length in SYMBOLS */ short dm_cbSrc; /* length in SCRLINES */ } DEBMODTYPE; #define CBDEBMODTYPE 30 typedef struct debPub /* PUBLICS entry */ { short dp_ra; /* Segment offset */ short dp_sa; /* Segment address */ short dp_type; /* Type index */ } DEBPUBTYPE; #define CBDEBPUBTYPE 6 #endif #if CVVERSION > 0 // New CV EXE format structures and definitions // Valid for CV 2.0 and 3.0 struct sstModules { unsigned short segCode; unsigned short raCode; unsigned short cbCode; unsigned short iov; unsigned short ilib; unsigned short flags; }; #define CBSSTMODULES (sizeof(sstModules)) // CV 4.0 sstModule format - object file description #pragma pack(1) typedef struct sstmod4 { unsigned short ovlNo; // Overlay number this module was allocated in unsigned short iLib; // Index to sstLibraries if this module was linked from library unsigned short cSeg; // Number of physical code segments this module contributes to char style[2]; // Debugging style for this module } SSTMOD4; typedef struct codeinfo { unsigned short seg; // Logical segment of the contribution unsigned short pad; // Padding to maintain aligment unsigned long off; // Offset in the logical segment where the this contribution starts unsigned long cbOnt; // Size of the contribution in bytes } CODEINFO; // Subsection types #define SSTMODULES 0x101 #define SSTPUBLICS 0x102 #define SSTTYPES 0x103 #define SSTSYMBOLS 0x104 #define SSTSRCLINES 0x105 #define SSTNSRCLINES 0x109 // New format - first implemented in link 5.05 #define SSTLIBRARIES 0x106 #define SSTIMPORTS 0x107 // New subsection types introduced in CV 4.0 #define SSTMODULES4 0x120 #define SSTTYPES4 0x121 #define SSTPUBLICS4 0x122 #define SSTPUBLICSYM 0x123 #define SSTSYMBOLS4 0x124 #define SSTALIGNSYM 0x125 #define SSTSRCLNSEG 0x126 #define SSTSRCMODULE 0x127 #define SSTLIBRARIES4 0x128 #define SSTGLOBALSYM 0x129 #define SSTGLOBALPUB 0x12a #define SSTGLOBALTYPES 0x12b #define SSTMPC 0x12c #define SSTSEGMAP 0x12d #define SSTSEGNAME 0x12e #define SSTPRETYPES 0x12f // Subsection directory header - intorduced in CV 4.0 typedef struct dnthdr { unsigned short cbDirHeader;// Size of the header unsigned short cbDirEntry; // Size of directory entry unsigned long cDir; // Number of directory entries long lfoDirNext; // Offset from lfoBase of the next directory unsigned long flags; // Flags describing directory and subsection tables } DNTHDR; typedef struct dnt // SubDirectory entry type { short sst; // Subsection type short iMod; // Module index number long lfo; // LFO of start of section long cb; // Size of section in bytes (for CV 3.0 // this was short) } DNT; typedef struct pubinfo16 { unsigned short len; // Length of record, excluding the length field unsigned short idx; // Type of symbol unsigned short off; // Symbol offset unsigned short seg; // Symbol segment unsigned short type; // CodeView type index } PUB16; typedef struct pubinfo32 { unsigned short len; // Length of record, excluding the length field unsigned short idx; // Type of symbol unsigned long off; // Symbol offset unsigned short seg; // Symbol segment unsigned short type; // CodeView type index } PUB32; #define S_PUB16 0x103 #define S_PUB32 0x203 #define T_ABS 0x001 typedef struct { union { struct { unsigned short fRead :1; unsigned short fWrite :1; unsigned short fExecute:1; unsigned short f32Bit :1; unsigned short res1 :4; unsigned short fSel :1; unsigned short fAbs :1; unsigned short res2 :2; unsigned short fGroup :1; unsigned short res3 :3; }; struct { unsigned short segAttr :8; unsigned short saAttr :4; unsigned short misc :4; }; }; } SEGFLG; typedef struct seginfo { SEGFLG flags; // Segment attributes unsigned short ovlNbr; // Overlay number unsigned short ggr; // Group index unsigned short sa; // Physical segment index unsigned short isegName; // Index to segment name unsigned short iclassName; // Index to segment class name unsigned long phyOff; // Starting offset inside physical segment unsigned long cbSeg; // Logical segment size } SEGINFO; #define CVLINEMAX 64 typedef struct _CVSRC { struct _CVSRC FAR *next; // Next source file descriptor BYTE FAR *fname; // Source file name WORD cLines; // Number of source lines from this file WORD cSegs; // Number of code segemtns this source file contributes to struct _CVGSN FAR *pGsnFirst; // Code segment list struct _CVGSN FAR *pGsnLast; // Tail of the code segment list } CVSRC; typedef struct _CVGSN { struct _CVGSN FAR *next; // Next segment struct _CVGSN FAR *prev; // Previous segment WORD seg; // Logical segment index WORD cLines; // Number of source lines in this code segment WORD flags; // Flags DWORD raStart; // Starting logical offset of the contribution DWORD raEnd; // Ending logical offset of the contribution struct _CVLINE FAR *pLineFirst;// List of offset/line pairs struct _CVLINE FAR *pLineLast; // Tail of the offset/line pairs list } CVGSN; /* * Format flags * * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - bit no * | * +--- Fake segment for explicitly allocated COMDATs */ #define SPLIT_GSN 0x1 typedef struct _CVLINE { struct _CVLINE FAR *next; // Next bucket WORD cPair; // Number of offset/line pairs in this bucket DWORD rgOff[CVLINEMAX]; WORD rgLn[CVLINEMAX]; } CVLINE; #pragma pack() #endif