home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / sd386v50.zip / sd386src.zip / EXE.H < prev    next >
Text File  |  1996-04-04  |  19KB  |  534 lines

  1. /*****************************************************************************/
  2. /* File:                                                                     */
  3. /*   exe.h                                                                   */
  4. /*                                                                           */
  5. /* Description:                                                              */
  6. /*                                                                           */
  7. /*   EXE  include stuff                                                      */
  8. /*                                                                           */
  9. /* History:                                                                  */
  10. /*                                                                           */
  11. /*   04/06/95 Updated.                                                       */
  12. /*                                                                           */
  13. /*****************************************************************************/
  14.  
  15. #define    LFO_OF_EXE_HEADER_LFO 0x3C   /* Offset of where to find the       */
  16.                                         /* offset of the start of the exe    */
  17.                                         /* header.                           */
  18.  
  19. /*****************************************************************************/
  20. /* Executable type flags.                                                    */
  21. /*****************************************************************************/
  22. #define    NE     1                     /* 16 bit executable OS/2 1.x        */
  23. #define    LX     2                     /* 32 bit executable OS/2 2.x        */
  24.  
  25. /*****************************************************************************/
  26. /* - Some general bitness flags.                                             */
  27. /*****************************************************************************/
  28. #define    BITUNKNOWN  0
  29. #define    BIT16       1
  30. #define    BIT32       2
  31.  
  32. /*****************************************************************************/
  33. /* Flags for the NBxx debug information signature.                           */
  34. /*****************************************************************************/
  35. #define    NB00     1
  36. #define    NB02     2
  37. #define    NB04     3
  38.  
  39. /*****************************************************************************/
  40. /* - HLL signature in the FileName records.                                  */
  41. /*****************************************************************************/
  42. #define    HLL    0x4C48                /* debug style value "HL"            */
  43.  
  44. /*****************************************************************************/
  45. /* - Directory subsection types.                                             */
  46. /*****************************************************************************/
  47. #define    SSTMODULES   0x0101          /* File Name.                        */
  48. #define    SSTPUBLICS   0x0102          /* Public Symbols.                   */
  49. #define    SSTTYPES     0x0103          /* Types.                            */
  50. #define    SSTSYMBOLS   0x0104          /* Symbols.                          */
  51. #define    SSTLIBRARIES 0x0106          /* Libraries.                        */
  52. #define    SSTSRCLINES  0x0105          /* Line Numbers - (IBM C/2 1.1)      */
  53. #define    SSTSRCLNSEG  0x0109          /* Line Numbers - (MSC 6.00)         */
  54. #define    SSTIBMSRC    0x010B          /* Line Numbers - IBM HLL            */
  55.  
  56. /*****************************************************************************/
  57. /* - Public symbol types                                                     */
  58. /*****************************************************************************/
  59. #define    TYPE_PUB_16  1
  60. #define    TYPE_PUB_32  2
  61.  
  62. /*****************************************************************************/
  63. /* Flags for the line number sections.                                       */
  64. /*****************************************************************************/
  65. #define    TYPE109_16     1             /* 16 bit MS/(C211 linked link386)   */
  66. #define    TYPE109_32     2             /* 32 bit MSC.                       */
  67. #define    TYPE105        3             /* IBM C211                          */
  68. #define    TYPE10B_HL01   4             /* IBM HLL Level 1                   */
  69. #define    TYPE10B_HL02   5             /* IBM HLL Level 2                   */
  70. #define    TYPE10B_HL03   6             /* IBM HLL Level 3                   */
  71. #define    TYPE10B_HL04   7             /* IBM HLL Level 4                   */
  72.  
  73. /*****************************************************************************/
  74. /* Flags for the symbols sections.                                           */
  75. /*****************************************************************************/
  76. #define    TYPE104_C211   1
  77. #define    TYPE104_C600   2
  78. #define    TYPE104_HL01   3
  79. #define    TYPE104_HL02   4
  80. #define    TYPE104_CL386  5
  81. #define    TYPE104_HL03   6
  82. #define    TYPE104_HL04   7
  83.  
  84. /*****************************************************************************/
  85. /* Flags for the types sections.                                             */
  86. /*****************************************************************************/
  87. #define    TYPE103_C211   1
  88. #define    TYPE103_C600   2
  89. #define    TYPE103_HL01   3
  90. #define    TYPE103_HL02   4
  91. #define    TYPE103_CL386  5
  92. #define    TYPE103_HL03   6
  93. #define    TYPE103_HL04   7
  94.  
  95. /*****************************************************************************/
  96. /* - Structures defining the entries in the debug information directory.     */
  97. /*****************************************************************************/
  98. typedef struct _hdrentry
  99. {
  100.  USHORT  SubSectType;
  101.  USHORT  ModIndex;
  102.  ULONG   SubSectOff;
  103.  USHORT  SubSectLen;
  104. }HDRENTRY;
  105.  
  106. typedef struct _hdrentryhll
  107. {
  108.  USHORT  SubSectType;
  109.  USHORT  ModIndex;
  110.  ULONG   SubSectOff;
  111.  ULONG   SubSectLen;
  112. }HDRENTRYHLL;
  113.  
  114. /*****************************************************************************/
  115. /* - Structures defining the entries in the filename records/linked modules. */
  116. /*****************************************************************************/
  117. typedef struct _frec_nb00_lx
  118. {
  119.  USHORT  SegNum;                        /* containing segment number         */
  120.  ULONG   ImOff;                         /* offset into the load image        */
  121.  ULONG   ImLen;                         /* length of load image              */
  122.  USHORT  overlay;                       /* not used                          */
  123.  USHORT  LibNum;                        /* what library it came from         */
  124.  char    NoSegs;                        /* Number of segments                */
  125.  char    Reserved;                      /* 1 byte pad                        */
  126. /* char   *fnlength;*/                  /* filename length                   */
  127. /* char    fname[]; */                  /* filename                          */
  128. }FREC_NB00_LX;
  129.  
  130. typedef struct _frec_nb04_segobject
  131. {
  132.  USHORT  SegNum;                        /* containing segment number         */
  133.  ULONG   ImOff;                         /* offset into the load image        */
  134.  ULONG   ImLen;                         /* length of load image              */
  135. }FREC_NB04_SEGOBJECT;
  136.  
  137. typedef struct _frec_nb04
  138. {
  139.  FREC_NB04_SEGOBJECT SegObject;         /* description of a segment object.  */
  140.  USHORT              overlay;           /* not used                          */
  141.  USHORT              LibNum;            /* what library it came from         */
  142.  UCHAR               NoSegs;            /* Number of segments.               */
  143.  char                reserved;          /* 1 byte pad                        */
  144.  USHORT              DebugStyle;        /* debug style                       */
  145.  UCHAR               version[2];        /* version (debug)                   */
  146.  UCHAR               fnlength;          /* filename length                   */
  147. /* char              fname[]; */        /* filename                          */
  148. }FREC_NB04;
  149.  
  150. typedef struct _frec_ne_segobject
  151. {
  152.  USHORT  SegNum;                        /* containing segment number         */
  153.  USHORT  ImOff;                         /* offset into the load image        */
  154.  USHORT  ImLen;                         /* length of load image              */
  155. }FREC_NE_SEGOBJECT;
  156.  
  157. typedef struct _frec_ne
  158. {
  159.  FREC_NE_SEGOBJECT SegObject;           /* description of a segment object.  */
  160.  USHORT            overlay;             /* not used                          */
  161.  USHORT            LibNum;              /* what library it came from         */
  162.  UCHAR             NoSegs;              /* Number of segments                */
  163.  char              Reserved;            /* 1 byte pad                        */
  164.  UCHAR             fnlength;            /* filename length                   */
  165. /* char    fname[]; */                  /* filename                          */
  166. }FREC_NE;
  167.  
  168. /*****************************************************************************/
  169. /* - Public symbol records.                                                  */
  170. /*****************************************************************************/
  171. typedef struct
  172. {
  173.  ULONG   Offset;
  174.  USHORT  ObjNum;
  175.  USHORT  Typeid;
  176.  UCHAR   Namelen;
  177. }PUBREC32;
  178.  
  179. typedef struct
  180. {
  181.  union
  182.  {
  183.   ULONG FlatAddr;
  184.   struct
  185.   {
  186.    USHORT Offset;
  187.    USHORT ObjNum;
  188.   }RawAddr;
  189.  }Pub16Addr;
  190.  USHORT  Typeid;
  191.  UCHAR   Namelen;
  192. }PUBREC16;
  193.  
  194. #define NextPubRec16(p) ( (UCHAR *)(p)+sizeof(PUBREC16)-1 + *((UCHAR *)(p)+sizeof(PUBREC16)-1) + 1)
  195. #define NextPubRec32(p) ( (UCHAR *)(p)+sizeof(PUBREC32)-1 + *((UCHAR *)(p)+sizeof(PUBREC32)-1) + 1)
  196.  
  197. /*****************************************************************************/
  198. /* - Line number records.                                                    */
  199. /*****************************************************************************/
  200.  
  201. /*****************************************************************************/
  202. /* - First Entry record entry types. There are others but they're not        */
  203. /*   supported.                                                              */
  204. /*****************************************************************************/
  205. #define FILE_NAMES_TABLE_ENTRY_TYPE_HL04  0x03
  206.  
  207. #define LINE_NUMBER_TABLE_ENTRY_TYPE_HL01 0x00
  208. #define LINE_NUMBER_TABLE_ENTRY_TYPE_HL02 LINE_NUMBER_TABLE_ENTRY_TYPE_HL01
  209. #define LINE_NUMBER_TABLE_ENTRY_TYPE_HL03 LINE_NUMBER_TABLE_ENTRY_TYPE_HL01
  210. #define LINE_NUMBER_TABLE_ENTRY_TYPE_HL04 LINE_NUMBER_TABLE_ENTRY_TYPE_HL01
  211.  
  212. /*****************************************************************************/
  213. /* - Line number data structures.                                            */
  214. /*****************************************************************************/
  215. typedef struct _sourcefilenametype105
  216. {
  217.  UCHAR   SourceFileNameLength;
  218. }SOURCE_FILE_NAME_TYPE105;
  219.  
  220. typedef struct _109_16tableheader
  221. {
  222.  USHORT SegNum;
  223.  USHORT NumEntries;
  224. }FIRST_ENTRY_109_16;
  225.  
  226. typedef struct _109_16tableentry
  227. {
  228.  USHORT LineNumber;
  229.  USHORT Offset;
  230. }LINE_NUMBER_TABLE_ENTRY_109_16;
  231.  
  232. typedef struct _105tableheader
  233. {
  234.  USHORT NumEntries;
  235. }FIRST_ENTRY_105;
  236.  
  237. typedef struct _105tableentry
  238. {
  239.  USHORT LineNumber;
  240.  USHORT Offset;
  241. }LINE_NUMBER_TABLE_ENTRY_105;
  242.  
  243. typedef struct _109_32tableheader
  244. {
  245.  USHORT SegNum;
  246.  USHORT NumEntries;
  247. }FIRST_ENTRY_109_32;
  248.  
  249. typedef struct _109_32tableentry
  250. {
  251.  USHORT LineNumber;
  252.  ULONG  Offset;
  253. }LINE_NUMBER_TABLE_ENTRY_109_32;
  254.  
  255. /*****************************************************************************/
  256. /* - Pertinent HL01 structures                                               */
  257. /*****************************************************************************/
  258. typedef struct _firstentryhl01
  259. {
  260.  USHORT LineNumber;
  261.  UCHAR  EntryType;
  262.  UCHAR  Reserved;
  263.  USHORT NumEntries;
  264.  USHORT PathTableEntries;
  265. }FIRST_ENTRY_HL01;
  266.  
  267. typedef struct _filenametableentryhl01
  268. {
  269.  ULONG  StartOfSource;
  270.  ULONG  NumberOfSourceRecords;
  271.  ULONG  NumberOfSourceFiles;
  272.  UCHAR  SourceFileNameLength;           /* first source file name.           */
  273. }FILE_NAME_TABLE_ENTRY_HL01;
  274.  
  275. typedef struct _linenumbertableentryhl01
  276. {
  277.  USHORT  LineNumber;
  278.  UCHAR   SourceFileIndex;
  279.  UCHAR   Flags;
  280.  ULONG   Offset;
  281. }LINE_NUMBER_TABLE_ENTRY_HL01;
  282.  
  283. typedef struct _pathtableeentryhl01
  284. {
  285.  ULONG  Offset;
  286.  USHORT PathCode;
  287. }PATH_TABLE_ENTRY_HL01;
  288.  
  289. /*****************************************************************************/
  290. /* - Pertinent HL03 structures.(HL02 was never released.)                    */
  291. /*****************************************************************************/
  292.  
  293. typedef struct _firstentryhl03
  294. {
  295.  USHORT LineNumber;
  296.  UCHAR  EntryType;
  297.  UCHAR  Reserved;
  298.  USHORT NumEntries;
  299.  USHORT SegNum;
  300.  ULONG  FileNameTableSize;
  301. }FIRST_ENTRY_HL03;
  302.  
  303. typedef struct _filenametableentryhl03
  304. {
  305.  ULONG  StartOfSource;
  306.  ULONG  NumberOfSourceRecords;
  307.  ULONG  NumberOfSourceFiles;
  308.  UCHAR  SourceFileNameLength;           /* first source file name.           */
  309. }FILE_NAME_TABLE_ENTRY_HL03;
  310.  
  311. typedef struct _linenumbertableentryhl03
  312. {
  313.  USHORT LineNumber;
  314.  USHORT SourceFileIndex;
  315.  ULONG  Offset;
  316. }LINE_NUMBER_TABLE_ENTRY_HL03;
  317.  
  318. /*****************************************************************************/
  319. /* - Pertinent HL04 structures.                                              */
  320. /*****************************************************************************/
  321. typedef struct _headerhl04
  322. {
  323.  char   junk[8];
  324.  ULONG  FileNameTableSize;
  325. }HEADER_HL04;
  326.  
  327. typedef struct _firstentryhl04
  328. {
  329.  USHORT LineNumber;
  330.  UCHAR  EntryType;
  331.  UCHAR  Reserved;
  332.  USHORT NumEntries;
  333.  USHORT SegNum;
  334.  ULONG  BaseOffset;
  335. }FIRST_ENTRY_HL04;
  336.  
  337. #define FILE_NAME_TABLE_ENTRY_HL04 FILE_NAME_TABLE_ENTRY_HL01
  338.  
  339. typedef struct _linenumbertableentryhl04
  340. {
  341.  USHORT  LineNumber;
  342.  USHORT  SourceFileIndex;
  343.  ULONG   Offset;
  344. }LINE_NUMBER_TABLE_ENTRY_HL04;
  345.  
  346. typedef struct _csectmap
  347. {
  348.  struct _csectmap *next;
  349.  struct _csect    *pCsect;
  350.  void             *pFirstEntry;
  351.  USHORT            NumEntries;
  352.  int               mssfi;               /* sfi index contrived for ms types. */
  353.  BOOL              IsFileUnique;
  354. }CSECTMAP;
  355.  
  356. typedef struct _filenametablemap
  357. {
  358.  struct _filenametablemap *next;
  359.  void                     *pFirstEntry;
  360. }FILE_NAME_TABLE_MAP;
  361.  
  362. /*****************************************************************************/
  363. /* - Internal Table Entry.                                                   */
  364. /*****************************************************************************/
  365. typedef struct
  366. {
  367.  int    sfi;
  368.  USHORT lno;
  369.  ULONG  off;
  370. }LINNUM_ENTRY;
  371.  
  372. typedef struct _filename
  373. {
  374.  struct _filename *next;
  375.  int               sfi;
  376.  char              FileName[1];         /* length prefixed z-string.         */
  377. }FILENAME;
  378.  
  379. #define LNOTAB LINNUM_ENTRY
  380.  
  381. typedef struct
  382. {
  383.  USHORT  lno;
  384.  USHORT  off;
  385. }LNOTAB16;
  386.  
  387. typedef struct
  388. {
  389.  USHORT  lno;
  390.  UCHAR   srcfileind;
  391.  UCHAR   flags;
  392.  ULONG  off;
  393. }LNOTABHLL;
  394.  
  395. typedef struct _sring
  396. {
  397.  struct _sring *next;
  398.  ULONG          mid;
  399.  ULONG          symlen;
  400.  SSRec         *symptr;
  401. }SYMNODE;
  402.  
  403. typedef struct _typenode
  404. {
  405.  struct _typenode *next;
  406.  ULONG             mid;
  407.  ULONG             typlen;
  408.  UCHAR            *typptr;
  409. }TYPENODE;
  410.  
  411. typedef struct _lring
  412. {
  413.  struct _lring *next;
  414.  ULONG          mid;
  415.  ULONG          tablents;
  416.  UINT          *ltabptr;
  417. }LNONODE;
  418.  
  419. typedef struct _pubnode
  420. {
  421.  struct _pubnode *next;
  422.  ULONG            mid;
  423.  ULONG            publen;
  424.  UCHAR           *pubptr;
  425. }PUBNODE;
  426.  
  427. /*****************************************************************************/
  428. /* - Structure(s) and constants defining a linked module(.obj).              */
  429. /*****************************************************************************/
  430. #define    FAKEMID    0xffff
  431.  
  432. typedef struct _csect
  433. {
  434.  struct _csect *next;
  435.  struct  MOD   *pModule;                /* -> to parent module.              */
  436.  USHORT         SegNum;
  437.  ULONG          SegFlatAddr;
  438.  ULONG          CsectLo;
  439.  ULONG          CsectHi;
  440.  ULONG          CsectSize;
  441.  ULONG          NumEntries;             /* lnotab entries.                   */
  442.  LNOTAB        *pLnoTab;
  443. }CSECT;
  444.  
  445. typedef struct _modflags
  446. {
  447.  int   LnoTabLoaded :1;                 /* line number tables are loaded.    */
  448.  int   reserved     :31;
  449. }MOD_FLAGS;
  450.  
  451. typedef struct MOD
  452. {
  453.  struct  MOD       *NextMod;
  454.  struct _DEBFILE   *pdf;                /* -> back to owning exe/dll.        */
  455.  ULONG              mid;
  456.  MOD_FLAGS          modflags;
  457.  ULONG              FileName;
  458.  ULONG              FileNameLen;
  459.  ULONG              Publics;
  460.  ULONG              PubLen;
  461.  ULONG              TypeDefs;
  462.  ULONG              TypeLen;
  463.  ULONG              Symbols;
  464.  ULONG              SymLen;
  465.  ULONG              LineNums;
  466.  ULONG              LineNumsLen;
  467.  CSECT             *pCsects;
  468.  FILENAME          *pFiles;
  469.  struct
  470.  {
  471.   UCHAR  Pubs;
  472.   UCHAR  Syms;
  473.   UCHAR  Lins;
  474.   UCHAR  Typs;
  475.  } DbgFormatFlags;
  476. }MODULE;
  477.  
  478. /*****************************************************************************/
  479. /* - Structure(s) defining an executable(EXE/DLL).                           */
  480. /*****************************************************************************/
  481. typedef struct _exeflags
  482. {
  483.  int   ExeType   :2;        /* flag indicating NE(16-bit) or LX(32-bit)       */
  484.  int   NBxxType  :2;        /* NB00, NB02, or NB04.                           */
  485. }EXE_FLAGS;
  486.  
  487. typedef struct
  488. {
  489.  HFILE fh;
  490.  char *fn;
  491. }MFILE;
  492.  
  493. #define SOURCE_LEVEL 0
  494. #define ASM_LEVEL    1
  495. typedef struct _DEBFILE
  496. {
  497.  struct   _DEBFILE *next;
  498.  MFILE    *DebFilePtr;
  499.  UINT      pid;
  500.  UINT      mte;
  501.  UCHAR     SrcOrAsm;                    /* source level = 0; asm level = 1   */
  502.  ULONG     DebugOff;                    /* lfo of debug info.                */
  503.  MODULE   *MidAnchor;
  504.  SYMNODE  *psyms;
  505.  TYPENODE *ptyps;
  506.  PUBNODE  *ppubs;
  507.  UINT     *CodeObjs;
  508.  ULONG     EntryExitPt;
  509.  EXE_FLAGS ExeFlags;
  510. }DEBFILE;
  511.  
  512. typedef DEBFILE EXEFILE;
  513.  
  514. /*****************************************************************************/
  515. /* - structure defining a process.                                           */
  516. /*****************************************************************************/
  517. typedef struct _process_node
  518. {
  519.  UINT              pid;
  520.  UINT              sid;
  521.  struct _DEBFILE  *ExeStruct;
  522.  struct BRKstruct *allbrks;
  523. }PROCESS_NODE;
  524.  
  525. /*****************************************************************************/
  526. /* - some defines/structures used to support the alloc_text pragma.          */
  527. /*****************************************************************************/
  528. typedef struct
  529. {
  530.  USHORT  SegNum;
  531.  USHORT  ImOff;
  532.  USHORT  ImLen;
  533. }SEGREC16;
  534.