Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

217 lines
7.4 KiB

  1. // MAPSYM.H
  2. //
  3. // MAPSYM.EXE header file
  4. //
  5. // History is too long and ancient to recount!
  6. #include <pshpack1.h> // All structures byte padded
  7. #define MAPSYM_VERSION 6 // Version 6.0 is ported to console
  8. #define MAPSYM_RELEASE 2
  9. #define FIELDOFFSET(type, field) offsetof(type,field)
  10. #define CBOFFSET sizeof(unsigned short) /* sym offset size */
  11. #define CBOFFSET_BIG 3 /* big sym offset */
  12. /*
  13. * Debug Symbol Table Structures (as written to a .sym file)
  14. * ---------------------------------------------------------
  15. *
  16. * For each symbol table (map): (MAPDEF)
  17. */
  18. struct mapdef_s {
  19. unsigned short md_spmap; /* 16 bit SEG ptr to next map (0 if end) */
  20. unsigned char md_abstype; /* 8 bit map/abs sym flags */
  21. unsigned char md_pad; /* 8 bit pad */
  22. unsigned short md_segentry; /* 16 bit entry point segment value */
  23. unsigned short md_cabs; /* 16 bit count of constants in map */
  24. unsigned short md_pabsoff; /* 16 bit ptr to constant offsets */
  25. unsigned short md_cseg; /* 16 bit count of segments in map */
  26. unsigned short md_spseg; /* 16 bit SEG ptr to segment chain */
  27. unsigned char md_cbnamemax; /* 8 bit maximum symbol name length */
  28. unsigned char md_cbname; /* 8 bit symbol table name length */
  29. unsigned char md_achname[1]; /* <n> name of symbol table (.sym ) */
  30. };
  31. #define CBMAPDEF FIELDOFFSET(struct mapdef_s, md_achname)
  32. struct endmap_s {
  33. unsigned short em_spmap; /* end of map chain (SEG ptr 0) */
  34. unsigned char em_rel; /* release */
  35. unsigned char em_ver; /* version */
  36. };
  37. #define CBENDMAP sizeof(struct endmap_s)
  38. /*
  39. * For each segment/group within a symbol table: (SEGDEF)
  40. */
  41. struct segdef_s {
  42. unsigned short gd_spsegnext; /* 16 bit SEG ptr to next segdef (0 if end),
  43. relative to mapdef */
  44. unsigned short gd_csym; /* 16 bit count of symbols in sym list */
  45. unsigned short gd_psymoff; /* 16 bit ptr to symbol offsets array,
  46. 16 bit SEG ptr if MSF_BIG_GROUP set,
  47. either relative to segdef */
  48. unsigned short gd_lsa; /* 16 bit Load Segment address */
  49. unsigned short gd_in0; /* 16 bit instance 0 physical address */
  50. unsigned short gd_in1; /* 16 bit instance 1 physical address */
  51. unsigned short gd_in2; /* 16 bit instance 2 physical address */
  52. unsigned char gd_type; /* 16 or 32 bit symbols in group */
  53. unsigned char gd_pad; /* pad byte to fill space for gd_in3 */
  54. unsigned short gd_spline; /* 16 bit SEG ptr to linedef,
  55. relative to mapdef */
  56. unsigned char gd_fload; /* 8 bit boolean 0 if seg not loaded */
  57. unsigned char gd_curin; /* 8 bit current instance */
  58. unsigned char gd_cbname; /* 8 bit Segment name length */
  59. unsigned char gd_achname[1]; /* <n> name of segment or group */
  60. };
  61. /* values for md_abstype, gd_type */
  62. #define MSF_32BITSYMS 0x01 /* 32-bit symbols */
  63. #define MSF_ALPHASYMS 0x02 /* symbols sorted alphabetically, too */
  64. /* values for gd_type only */
  65. #define MSF_BIGSYMDEF 0x04 /* bigger than 64K of symdefs */
  66. /* values for md_abstype only */
  67. #define MSF_ALIGN32 0x10 /* 2MEG max symbol file, 32 byte alignment */
  68. #define MSF_ALIGN64 0x20 /* 4MEG max symbol file, 64 byte alignment */
  69. #define MSF_ALIGN128 0x30 /* 8MEG max symbol file, 128 byte alignment */
  70. #define MSF_ALIGN_MASK 0x30
  71. #define CBSEGDEF FIELDOFFSET(struct segdef_s, gd_achname)
  72. /*
  73. * Followed by a list of SYMDEF's..
  74. * for each symbol within a segment/group: (SYMDEF)
  75. */
  76. struct symdef16_s {
  77. unsigned short sd16_val; /* 16 bit symbol addr or const */
  78. unsigned char sd16_cbname; /* 8 bit symbol name length */
  79. unsigned char sd16_achname[1]; /* <n> symbol name */
  80. };
  81. #define CBSYMDEF16 FIELDOFFSET(struct symdef16_s, sd16_achname)
  82. struct symdef_s {
  83. unsigned long sd_lval; /* 32 bit symbol addr or const */
  84. unsigned char sd_cbname; /* 8 bit symbol name length */
  85. unsigned char sd_achname[1]; /* <n> symbol name */
  86. };
  87. #define CBSYMDEF FIELDOFFSET(struct symdef_s, sd_achname)
  88. /*
  89. * Also followed by a list of LINDEF's..
  90. */
  91. struct linedef_s {
  92. unsigned short ld_splinenext; /* 16 bit SEG ptr to next (0 if last),
  93. relative to mapdef */
  94. unsigned short ld_pseg; /* 16 bit ptr to segdef_s (always 0) */
  95. unsigned short ld_plinerec; /* 16 bit ptr to linerecs,
  96. relative to linedef */
  97. unsigned short ld_itype; /* line rec type 0, 1, or 2 */
  98. unsigned short ld_cline; /* 16 bit count of line numbers */
  99. unsigned char ld_cbname; /* 8 bit file name length */
  100. unsigned char ld_achname[1]; /* <n> file name */
  101. };
  102. #define CBLINEDEF FIELDOFFSET(struct linedef_s, ld_achname)
  103. /* Normal line record (ld_itype == 0) */
  104. struct linerec0_s {
  105. unsigned short lr0_codeoffset; /* start offset for this linenumber */
  106. unsigned long lr0_fileoffset; /* file offset for this linenumber */
  107. };
  108. /* Special line record - 16 bit (ld_itype == 1) */
  109. struct linerec1_s {
  110. unsigned short lr1_codeoffset; /* start offset for this linenumber */
  111. unsigned short lr1_linenumber; /* linenumber */
  112. };
  113. /* Special line record - 32 bit (ld_itype == 2) */
  114. struct linerec2_s {
  115. unsigned long lr2_codeoffset; /* start offset for this linenumber */
  116. unsigned short lr2_linenumber; /* linenumber */
  117. };
  118. /* NOTE: the codeoffset should be the first item in all the linerecs */
  119. /* Union of line record types */
  120. union linerec_u {
  121. struct linerec0_s lr0;
  122. struct linerec1_s lr1;
  123. struct linerec2_s lr2;
  124. };
  125. #define FALSE 0
  126. #define TRUE 1
  127. #define MAXSEG 1024
  128. #define MAXLINENUMBER 100000
  129. #define MAXNAMELEN 32
  130. #define MAXSYMNAMELEN 127 /* sd_cbname is a char */
  131. #define MAXLINERECNAMELEN 255 /* ld_cbname is a char */
  132. #define MAPBUFLEN 512
  133. #define LPAREN '('
  134. #define RPAREN ')'
  135. #define _64K 0x10000L
  136. #define _1MEG 0x100000L
  137. #define _16MEG 0x1000000L
  138. /*
  139. * Debug Symbol Table Structures (as stored in memory)
  140. */
  141. struct sym_s {
  142. struct sym_s *sy_psynext; /* ptr to next sym_s record */
  143. struct symdef_s sy_symdef; /* symbol record */
  144. };
  145. struct line_s {
  146. struct line_s *li_plinext; /* ptr to line number list */
  147. union linerec_u *li_plru; /* pointer to line number offsets */
  148. unsigned long li_cblines; /* size of this linedef and it's linerecs */
  149. unsigned long li_offmin; /* smallest offset */
  150. unsigned long li_offmax; /* largest offset */
  151. struct linedef_s li_linedef; /* to line number record */
  152. };
  153. struct seg_s {
  154. unsigned short se_redefined; /* non0 if we have renamed this segment */
  155. /* to a group name */
  156. struct sym_s *se_psy; /* ptr to sym_s record chain */
  157. struct sym_s *se_psylast; /* ptr to last sym_s record in chain */
  158. struct line_s *se_pli; /* ptr to line number list */
  159. unsigned short se_cbsymlong; /* sizeof of long names ( > 8 bytes) COFF */
  160. unsigned long se_cbsyms; /* size of symdef records */
  161. unsigned long se_cblines; /* size of all linedefs and linerecs */
  162. unsigned long se_cbseg; /* size of segment */
  163. struct segdef_s se_segdef; /* segdef record */
  164. };
  165. struct map_s {
  166. unsigned short mp_cbsymlong; /* size of long names ( > 8 bytes) COFF */
  167. unsigned short mp_cbsyms; /* size of abs symdef records */
  168. struct mapdef_s mp_mapdef; /* mapdef record */
  169. };
  170. #define OURBUFSIZ 1024
  171. #define MT_NOEXE 0x0000 /* maptype values */
  172. #define MT_PE 0x0001
  173. #define MT_OLDPE 0x0002
  174. #define MT_SYMS 0x0080 /* coff symbols present */
  175. #define MT_CVSYMS 0x0040 /* CodeView symbols present */