CVINFO.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:80k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /***    cvinfo.h - Generic CodeView information definitions
  2.  *
  3.  *      Structures, constants, etc. for accessing and interpreting
  4.  *      CodeView information.
  5.  *
  6.  */
  7. /***    The master copy of this file resides in the CodeView project.
  8.  *      All Microsoft projects are required to use the master copy without
  9.  *      modification.  Modification of the master version or a copy
  10.  *      without consultation with all parties concerned is extremely
  11.  *      risky.
  12.  *
  13.  *      The projects known to use this version (4.00.00) are:
  14.  *
  15.  *          Codeview
  16.  *          Sequoia
  17.  *          C7.00 (all passes)
  18.  *          Cvpack
  19.  *          Cvdump
  20.  */
  21. #ifndef _CV_INFO_INCLUDED
  22. #define _CV_INFO_INCLUDED
  23. #pragma pack(1)
  24. typedef unsigned long   CV_uoff32_t;
  25. typedef          long   CV_off32_t;
  26. typedef unsigned short  CV_uoff16_t;
  27. typedef          short  CV_off16_t;
  28. typedef unsigned short  CV_typ_t;
  29. #ifdef _REAL10
  30. typedef struct {
  31.     char b[10];
  32. } REAL10;
  33. #endif
  34. #define CV_SIGNATURE_C6         0L /* Actual signature is >64K */
  35. #define CV_SIGNATURE_C7         1L /* First explicit signature */
  36. #define CV_SIGNATURE_RESERVED   2L /* All signatures from 2 to 64K are reserved */
  37. #define CV_MAXOFFSET   0xffffffff
  38. /**     CodeView Symbol and Type OMF type information is broken up into two
  39.  *      ranges.  Type indices less than 0x1000 describe frequently used
  40.  *      type information that is frequently used.  Type indices above
  41.  *      0x1000 are used to describe more complex features such as function,
  42.  *      arrays and structures.
  43.  */
  44. /**     Primitive types have predefined meaning that is encoded in the
  45.  *      values of the various bit fields in the value.
  46.  *
  47.  *      A CodeView primitive type is defined as:
  48.  *
  49.  *      1 1
  50.  *      1 089  7654  3  210
  51.  *      r mode type  r  sub
  52.  *
  53.  *      Where
  54.  *          mode is the pointer mode
  55.  *          type is a type indicator
  56.  *          sub  is a subtype enumeration
  57.  *          r    is a reserved field
  58.  *
  59.  *      See Microsoft Symbol and Type OMF (Version 4.0) for more
  60.  *      information.
  61.  */
  62. #define CV_MMASK        0x700   /* mode mask */
  63. #define CV_TMASK        0x0f0   /* type mask */
  64. #define CV_SMASK        0x007   /* subtype mask */
  65. #define CV_MSHIFT       8       /* primitive mode right shift count */
  66. #define CV_TSHIFT       4       /* primitive type right shift count */
  67. #define CV_SSHIFT       0       /* primitive subtype right shift count */
  68. /*
  69.  *      macros to extract primitive mode, type and size
  70.  */
  71. #define CV_MODE(typ)    (((typ) & CV_MMASK) >> CV_MSHIFT)
  72. #define CV_TYPE(typ)    (((typ) & CV_TMASK) >> CV_TSHIFT)
  73. #define CV_SUBT(typ)    (((typ) & CV_SMASK) >> CV_SSHIFT)
  74. /*
  75.  *      macros to insert new primitive mode, type and size
  76.  */
  77. #define CV_NEWMODE(typ, nm)     (((typ) & ~CV_MMASK) | ((nm) << CV_MSHIFT))
  78. #define CV_NEWTYPE(typ, nt)     (((typ) & ~CV_TMASK) | ((nt) << CV_TSHIFT))
  79. #define CV_NEWSUBT(typ, ns)     (((typ) & ~CV_SMASK) | ((ns) << CV_SSHIFT))
  80. /*
  81.  *      pointer mode enumeration values
  82.  */
  83. typedef enum CV_prmode_e {
  84.     CV_TM_DIRECT = 0,           /* mode is not a pointer */
  85.     CV_TM_NPTR   = 1,           /* mode is a near pointer */
  86.     CV_TM_FPTR   = 2,           /* mode is a far pointer */
  87.     CV_TM_HPTR   = 3,           /* mode is a huge pointer */
  88.     CV_TM_NPTR32 = 4,           /* mode is a 32 bit near pointer */
  89.     CV_TM_FPTR32 = 5,           /* mode is a 32 bit far pointer */
  90.     CV_TM_NPTR64 = 6            /* mode is a 64 bit near pointer */
  91. } CV_prmode_e;
  92. /*
  93.  *      type enumeration values
  94.  */
  95. typedef enum CV_type_e {
  96.     CV_SPECIAL      = 0x00,     /* special type size values */
  97.     CV_SIGNED       = 0x01,     /* signed integral size values */
  98.     CV_UNSIGNED     = 0x02,     /* unsigned integral size values */
  99.     CV_BOOLEAN      = 0x03,     /* Boolean size values */
  100.     CV_REAL         = 0x04,     /* real number size values */
  101.     CV_COMPLEX      = 0x05,     /* complex number size values */
  102.     CV_SPECIAL2     = 0x06,     /* second set of special types */
  103.     CV_INT          = 0x07,     /* integral (int) values */
  104.     CV_CVRESERVED   = 0x0f
  105. } CV_type_e;
  106. /*
  107.  *      subtype enumeration values for CV_SPECIAL
  108.  */
  109. typedef enum CV_special_e {
  110.     CV_SP_NOTYPE    = 0x00,
  111.     CV_SP_ABS       = 0x01,
  112.     CV_SP_SEGMENT   = 0x02,
  113.     CV_SP_VOID      = 0x03,
  114.     CV_SP_CURRENCY  = 0x04,
  115.     CV_SP_NBASICSTR = 0x05,
  116.     CV_SP_FBASICSTR = 0x06,
  117.     CV_SP_NOTTRANS  = 0x07
  118. } CV_special_e;
  119. /*
  120.  *      subtype enumeration values for CV_SPECIAL2
  121.  */
  122. typedef enum CV_special2_e {
  123.     CV_S2_BIT       = 0x00,
  124.     CV_S2_PASCHAR   = 0x01      /* Pascal CHAR */
  125. } CV_special2_e;
  126. /*
  127.  *      subtype enumeration values for CV_SIGNED, CV_UNSIGNED and CV_BOOLEAN
  128.  */
  129. typedef enum CV_integral_e {
  130.     CV_IN_1BYTE     = 0x00,
  131.     CV_IN_2BYTE     = 0x01,
  132.     CV_IN_4BYTE     = 0x02,
  133.     CV_IN_8BYTE     = 0x03
  134. } CV_integral_e;
  135. /*
  136.  *      subtype enumeration values for CV_REAL and CV_COMPLEX
  137.  */
  138. typedef enum CV_real_e {
  139.     CV_RC_REAL32    = 0x00,
  140.     CV_RC_REAL64    = 0x01,
  141.     CV_RC_REAL80    = 0x02,
  142.     CV_RC_REAL128   = 0x03,
  143.     CV_RC_REAL48    = 0x04
  144. } CV_real_e;
  145. /*
  146.  *      subtype enumeration values for CV_INT (really int)
  147.  */
  148. typedef enum CV_int_e {
  149.     CV_RI_CHAR      = 0x00,
  150.     CV_RI_WCHAR     = 0x01,
  151.     CV_RI_INT2      = 0x02,
  152.     CV_RI_UINT2     = 0x03,
  153.     CV_RI_INT4      = 0x04,
  154.     CV_RI_UINT4     = 0x05,
  155.     CV_RI_INT8      = 0x06,
  156.     CV_RI_UINT8     = 0x07
  157. } CV_int_e;
  158. /*
  159.  *      macros to check the type of a primitive
  160.  */
  161. #define CV_TYP_IS_DIRECT(typ)   (CV_MODE(typ) == CV_TM_DIRECT)
  162. #define CV_TYP_IS_PTR(typ)      (CV_MODE(typ) != CV_TM_DIRECT)
  163. #define CV_TYP_IS_NPTR(typ)     (CV_MODE(typ) == CV_TM_NPTR)
  164. #define CV_TYP_IS_FPTR(typ)     (CV_MODE(typ) == CV_TM_FPTR)
  165. #define CV_TYP_IS_HPTR(typ)     (CV_MODE(typ) == CV_TM_HPTR)
  166. #define CV_TYP_IS_NPTR32(typ)   (CV_MODE(typ) == CV_TM_NPTR32)
  167. #define CV_TYP_IS_FPTR32(typ)   (CV_MODE(typ) == CV_TM_FPTR32)
  168. #define CV_TYP_IS_SIGNED(typ) (((CV_TYPE(typ) == CV_SIGNED)  && 
  169.                                         CV_TYP_IS_DIRECT(typ)) || 
  170.                                         (typ == T_INT2)        || 
  171.                                         (typ == T_INT4)        || 
  172.                                         (typ == T_INT8)        || 
  173.                                         (typ == T_RCHAR))
  174. #define CV_TYP_IS_UNSIGNED(typ) (((CV_TYPE(typ) == CV_UNSIGNED) && 
  175.                                          CV_TYP_IS_DIRECT(typ)) || 
  176.                                          (typ == T_UINT2)       || 
  177.                                          (typ == T_UINT4)       || 
  178.                                          (typ == T_UINT8)       || 
  179.                                          (typ == T_RCHAR))
  180. #define CV_TYP_IS_REAL(typ)     ((CV_TYPE(typ) == CV_REAL)  && CV_TYP_IS_DIRECT(typ))
  181. #define CV_FIRST_NONPRIM 0x1000
  182. #define CV_IS_PRIMITIVE(typ)       ((typ) < CV_FIRST_NONPRIM)
  183. /*
  184.  *      selected values for type_index - for a more complete definition, see
  185.  *      Microsoft Symbol and Type OMF document
  186.  */
  187. /*
  188.  *      Special Types
  189.  */
  190. #define T_NOTYPE        0x0000  /* uncharacterized type (no type) */
  191. #define T_ABS           0x0001  /* absolute symbol */
  192. #define T_SEGMENT       0x0002  /* segment type */
  193. #define T_VOID          0x0003  /* void */
  194. #define T_PVOID         0x0103  /* near pointer to void */
  195. #define T_PFVOID        0x0203  /* far pointer to void */
  196. #define T_PHVOID        0x0303  /* huge pointer to void */
  197. #define T_32PVOID       0x0403  /* 16:32 near pointer to void */
  198. #define T_32PFVOID      0x0503  /* 16:32 far pointer to void */
  199. #define T_CURRENCY      0x0004  /* BASIC 8 byte currency value */
  200. #define T_NBASICSTR     0x0005  /* Near BASIC string */
  201. #define T_FBASICSTR     0x0006  /* Far BASIC string */
  202. #define T_NOTTRANS      0x0007  /* type not translated by cvpack */
  203. #define T_BIT           0x0060  /* bit */
  204. #define T_PASCHAR       0x0061  /* Pascal CHAR */
  205. /*
  206.  *      Character types
  207.  */
  208. #define T_CHAR          0x0010  /* 8 bit signed */
  209. #define T_UCHAR         0x0020  /* 8 bit unsigned */
  210. #define T_PCHAR         0x0110  /* near pointer to 8 bit signed */
  211. #define T_PUCHAR        0x0120  /* near pointer to 8 bit unsigned */
  212. #define T_PFCHAR        0x0210  /* far pointer to 8 bit signed */
  213. #define T_PFUCHAR       0x0220  /* far pointer to 8 bit unsigned */
  214. #define T_PHCHAR        0x0310  /* huge pointer to 8 bit signed */
  215. #define T_PHUCHAR       0x0320  /* huge pointer to 8 bit unsigned */
  216. #define T_32PCHAR       0x0410  /* 16:32 near pointer to 8 bit signed */
  217. #define T_32PUCHAR      0x0420  /* 16:32 near pointer to 8 bit unsigned */
  218. #define T_32PFCHAR      0x0510  /* 16:32 far pointer to 8 bit signed */
  219. #define T_32PFUCHAR     0x0520  /* 16:32 far pointer to 8 bit unsigned */
  220. /*
  221.  *      really a character types
  222.  */
  223. #define T_RCHAR         0x0070  /* really a char */
  224. #define T_PRCHAR        0x0170  /* 16:16 near pointer to a real char */
  225. #define T_PFRCHAR       0x0270  /* 16:16 far pointer to a real char */
  226. #define T_PHRCHAR       0x0370  /* 16:16 huge pointer to a real char */
  227. #define T_32PRCHAR      0x0470  /* 16:32 near pointer to a real char */
  228. #define T_32PFRCHAR     0x0570  /* 16:32 far pointer to a real char */
  229. /*
  230.  *      really a wide character types (UNICODE)
  231.  */
  232. #define T_WCHAR         0x0071  /* wide char */
  233. #define T_PWCHAR        0x0171  /* 16:16 near pointer to a wide char */
  234. #define T_PFWCHAR       0x0271  /* 16:16 far pointer to a wide char */
  235. #define T_PHWCHAR       0x0371  /* 16:16 huge pointer to a wide char */
  236. #define T_32PWCHAR      0x0471  /* 16:32 near pointer to a wide char */
  237. #define T_32PFWCHAR     0x0571  /* 16:32 far pointer to a wide char */
  238. /*
  239.  *      16 bit short types
  240.  */
  241. #define T_SHORT         0x0011  /* 16 bit signed */
  242. #define T_USHORT        0x0021  /* 16 bit unsigned */
  243. #define T_PSHORT        0x0111  /* near pointer to 16 bit signed */
  244. #define T_PUSHORT       0x0121  /* near pointer to 16 bit unsigned */
  245. #define T_PFSHORT       0x0211  /* far pointer to 16 bit signed */
  246. #define T_PFUSHORT      0x0221  /* far pointer to 16 bit unsigned */
  247. #define T_PHSHORT       0x0311  /* huge pointer to 16 bit signed */
  248. #define T_PHUSHORT      0x0321  /* huge pointer to 16 bit unsigned */
  249. #define T_32PSHORT      0x0411  /* 16:32 near pointer to 16 bit signed */
  250. #define T_32PUSHORT     0x0421  /* 16:32 near pointer to 16 bit unsigned */
  251. #define T_32PFSHORT     0x0511  /* 16:32 far pointer to 16 bit signed */
  252. #define T_32PFUSHORT    0x0521  /* 16:32 far pointer to 16 bit unsigned */
  253. /*
  254.  *      16 bit int types
  255.  */
  256. #define T_INT2          0x0072  /* 16 bit signed int */
  257. #define T_UINT2         0x0073  /* 16 bit unsigned int */
  258. #define T_PINT2         0x0172  /* near pointer to 16 bit signed int */
  259. #define T_PUINT2        0x0173  /* near pointer to 16 bit unsigned int */
  260. #define T_PFINT2        0x0272  /* far pointer to 16 bit signed int */
  261. #define T_PFUINT2       0x0273  /* far pointer to 16 bit unsigned int */
  262. #define T_PHINT2        0x0372  /* huge pointer to 16 bit signed int */
  263. #define T_PHUINT2       0x0373  /* huge pointer to 16 bit unsigned int */
  264. #define T_32PINT2       0x0472  /* 16:32 near pointer to 16 bit signed int */
  265. #define T_32PUINT2      0x0473  /* 16:32 near pointer to 16 bit unsigned int */
  266. #define T_32PFINT2      0x0572  /* 16:32 far pointer to 16 bit signed int */
  267. #define T_32PFUINT2     0x0573  /* 16:32 far pointer to 16 bit unsigned int */
  268. /*
  269.  *      32 bit long types
  270.  */
  271. #define T_LONG          0x0012  /* 32 bit signed */
  272. #define T_ULONG         0x0022  /* 32 bit unsigned */
  273. #define T_PLONG         0x0112  /* near pointer to 32 bit signed */
  274. #define T_PLONG         0x0112  /* near pointer to 32 bit signed */
  275. #define T_PULONG        0x0122  /* near pointer to 32 bit unsigned */
  276. #define T_PFLONG        0x0212  /* far pointer to 32 bit signed */
  277. #define T_PFULONG       0x0222  /* far pointer to 32 bit unsigned */
  278. #define T_PHLONG        0x0312  /* huge pointer to 32 bit signed */
  279. #define T_PHULONG       0x0322  /* huge pointer to 32 bit unsigned */
  280. #define T_32PLONG       0x0412  /* 16:32 near pointer to 32 bit signed */
  281. #define T_32PULONG      0x0422  /* 16:32 near pointer to 32 bit unsigned */
  282. #define T_32PFLONG      0x0512  /* 16:32 far pointer to 32 bit signed */
  283. #define T_32PFULONG     0x0522  /* 16:32 far pointer to 32 bit unsigned */
  284. /*
  285.  *      32 bit int types
  286.  */
  287. #define T_INT4          0x0074  /* 32 bit signed int */
  288. #define T_UINT4         0x0075  /* 32 bit unsigned int */
  289. #define T_PINT4         0x0174  /* near pointer to 32 bit signed int */
  290. #define T_PUINT4        0x0175  /* near pointer to 32 bit unsigned int */
  291. #define T_PFINT4        0x0274  /* far pointer to 32 bit signed int */
  292. #define T_PFUINT4       0x0275  /* far pointer to 32 bit unsigned int */
  293. #define T_PHINT4        0x0374  /* huge pointer to 32 bit signed int */
  294. #define T_PHUINT4       0x0375  /* huge pointer to 32 bit unsigned int */
  295. #define T_32PINT4       0x0474  /* 16:32 near pointer to 32 bit signed int */
  296. #define T_32PUINT4      0x0475  /* 16:32 near pointer to 32 bit unsigned int */
  297. #define T_32PFINT4      0x0574  /* 16:32 far pointer to 32 bit signed int */
  298. #define T_32PFUINT4     0x0575  /* 16:32 far pointer to 32 bit unsigned int */
  299. /*
  300.  *      64 bit quad types
  301.  */
  302. #define T_QUAD          0x0013  /* 64 bit signed */
  303. #define T_UQUAD         0x0023  /* 64 bit unsigned */
  304. #define T_PQUAD         0x0113  /* near pointer to 64 bit signed */
  305. #define T_PUQUAD        0x0123  /* near pointer to 64 bit unsigned */
  306. #define T_PFQUAD        0x0213  /* far pointer to 64 bit signed */
  307. #define T_PFUQUAD       0x0223  /* far pointer to 64 bit unsigned */
  308. #define T_PHQUAD        0x0313  /* huge pointer to 64 bit signed */
  309. #define T_PHUQUAD       0x0323  /* huge pointer to 64 bit unsigned */
  310. /*
  311.  *      64 bit int types
  312.  */
  313. #define T_INT8          0x0076  /* 64 bit signed int */
  314. #define T_UINT8         0x0077  /* 64 bit unsigned int */
  315. #define T_PINT8         0x0176  /* near pointer to 64 bit signed int */
  316. #define T_PUINT8        0x0177  /* near pointer to 64 bit unsigned int */
  317. #define T_PFINT8        0x0276  /* far pointer to 64 bit signed int */
  318. #define T_PFUINT8       0x0277  /* far pointer to 64 bit unsigned int */
  319. #define T_PHINT8        0x0376  /* huge pointer to 64 bit signed int */
  320. #define T_PHUINT8       0x0377  /* huge pointer to 64 bit unsigned int */
  321. #define T_32PINT8       0x0476  /* 16:32 near pointer to 64 bit signed int */
  322. #define T_32PUINT8      0x0477  /* 16:32 near pointer to 64 bit unsigned int */
  323. #define T_32PFINT8      0x0576  /* 16:32 far pointer to 64 bit signed int */
  324. #define T_32PFUINT8     0x0577  /* 16:32 far pointer to 64 bit unsigned int */
  325. /*
  326.  *      32 bit real types
  327.  */
  328. #define T_REAL32        0x0040  /* 32 bit real */
  329. #define T_PREAL32       0x0140  /* near pointer to 32 bit real */
  330. #define T_PFREAL32      0x0240  /* far pointer to 32 bit real */
  331. #define T_PHREAL32      0x0340  /* huge pointer to 32 bit real */
  332. #define T_32PREAL32     0x0440  /* 16:32 near pointer to 32 bit real */
  333. #define T_32PFREAL32    0x0540  /* 16:32 far pointer to 32 bit real */
  334. /*
  335.  *      48 bit real types
  336.  */
  337. #define T_REAL48        0x0044  /* 48 bit real */
  338. #define T_PREAL48       0x0144  /* near pointer to 48 bit real */
  339. #define T_PFREAL48      0x0244  /* far pointer to 48 bit real */
  340. #define T_PHREAL48      0x0344  /* huge pointer to 48 bit real */
  341. #define T_32PREAL48     0x0444  /* 16:32 near pointer to 48 bit real */
  342. #define T_32PFREAL48    0x0544  /* 16:32 far pointer to 48 bit real */
  343. /*
  344.  *      64 bit real types
  345.  */
  346. #define T_REAL64        0x0041  /* 64 bit real */
  347. #define T_PREAL64       0x0141  /* near pointer to 64 bit real */
  348. #define T_PFREAL64      0x0241  /* far pointer to 64 bit real */
  349. #define T_PHREAL64      0x0341  /* huge pointer to 64 bit real */
  350. #define T_32PREAL64     0x0441  /* 16:32 near pointer to 64 bit real */
  351. #define T_32PFREAL64    0x0541  /* 16:32 far pointer to 64 bit real */
  352. /*
  353.  *      80 bit real types
  354.  */
  355. #define T_REAL80        0x0042  /* 80 bit real */
  356. #define T_PREAL80       0x0142  /* near pointer to 80 bit real */
  357. #define T_PFREAL80      0x0242  /* far pointer to 80 bit real */
  358. #define T_PHREAL80      0x0342  /* huge pointer to 80 bit real */
  359. #define T_32PREAL80     0x0442  /* 16:32 near pointer to 80 bit real */
  360. #define T_32PFREAL80    0x0542  /* 16:32 far pointer to 80 bit real */
  361. /*
  362.  *      128 bit real types
  363.  */
  364. #define T_REAL128       0x0043  /* 128 bit real */
  365. #define T_PREAL128      0x0143  /* near pointer to 128 bit real */
  366. #define T_PFREAL128     0x0243  /* far pointer to 128 bit real */
  367. #define T_PHREAL128     0x0343  /* huge pointer to 128 bit real */
  368. #define T_32PREAL128    0x0443  /* 16:32 near pointer to 128 bit real */
  369. #define T_32PFREAL128   0x0543  /* 16:32 far pointer to 128 bit real */
  370. /*
  371.  *      32 bit complex types
  372.  */
  373. #define T_CPLX32        0x0050  /* 32 bit complex */
  374. #define T_PCPLX32       0x0150  /* near pointer to 32 bit complex */
  375. #define T_PFCPLX32      0x0250  /* far pointer to 32 bit complex */
  376. #define T_PHCPLX32      0x0350  /* huge pointer to 32 bit complex */
  377. #define T_32PCPLX32     0x0450  /* 16:32 near pointer to 32 bit complex */
  378. #define T_32PFCPLX32    0x0550  /* 16:32 far pointer to 32 bit complex */
  379. /*
  380.  *      48 bit complex types
  381.  */
  382. #define T_CPLX48        0x0054  /* 48 bit complex */
  383. #define T_PCPLX48       0x0154  /* near pointer to 48 bit complex */
  384. #define T_PFCPLX48      0x0254  /* far pointer to 48 bit complex */
  385. #define T_PHCPLX48      0x0354  /* huge pointer to 48 bit complex */
  386. #define T_32PCPLX48     0x0454  /* 16:32 near pointer to 48 bit complex */
  387. #define T_32PFCPLX48    0x0554  /* 16:32 far pointer to 48 bit complex */
  388. /*
  389.  *      64 bit complex types
  390.  */
  391. #define T_CPLX64        0x0051  /* 64 bit complex */
  392. #define T_PCPLX64       0x0151  /* near pointer to 64 bit complex */
  393. #define T_PFCPLX64      0x0251  /* far pointer to 64 bit complex */
  394. #define T_PHCPLX64      0x0351  /* huge pointer to 64 bit complex */
  395. #define T_32PCPLX64     0x0451  /* 16:32 near pointer to 64 bit complex */
  396. #define T_32PFCPLX64    0x0551  /* 16:32 far pointer to 64 bit complex */
  397. /*
  398.  *      80 bit complex types
  399.  */
  400. #define T_CPLX80        0x0052  /* 80 bit complex */
  401. #define T_PCPLX80       0x0152  /* near pointer to 80 bit complex */
  402. #define T_PFCPLX80      0x0252  /* far pointer to 80 bit complex */
  403. #define T_PHCPLX80      0x0352  /* huge pointer to 80 bit complex */
  404. #define T_32PCPLX80     0x0452  /* 16:32 near pointer to 80 bit complex */
  405. #define T_32PFCPLX80    0x0552  /* 16:32 far pointer to 80 bit complex */
  406. /*
  407.  *      128 bit complex types
  408.  */
  409. #define T_CPLX128       0x0053  /* 128 bit complex */
  410. #define T_PCPLX128      0x0153  /* near pointer to 128 bit complex */
  411. #define T_PFCPLX128     0x0253  /* far pointer to 128 bit complex */
  412. #define T_PHCPLX128     0x0353  /* huge pointer to 128 bit real */
  413. #define T_32PCPLX128    0x0453  /* 16:32 near pointer to 128 bit complex */
  414. #define T_32PFCPLX128   0x0553  /* 16:32 far pointer to 128 bit complex */
  415. /*
  416.  *      boolean types
  417.  */
  418. #define T_BOOL08        0x0030  /* 8 bit boolean */
  419. #define T_BOOL16        0x0031  /* 16 bit boolean */
  420. #define T_BOOL32        0x0032  /* 32 bit boolean */
  421. #define T_PBOOL08       0x0130  /* near pointer to  8 bit boolean */
  422. #define T_PBOOL16       0x0131  /* near pointer to 16 bit boolean */
  423. #define T_PBOOL32       0x0132  /* near pointer to 32 bit boolean */
  424. #define T_PFBOOL08      0x0230  /* far pointer to  8 bit boolean */
  425. #define T_PFBOOL16      0x0231  /* far pointer to 16 bit boolean */
  426. #define T_PFBOOL32      0x0232  /* far pointer to 32 bit boolean */
  427. #define T_PHBOOL08      0x0330  /* huge pointer to  8 bit boolean */
  428. #define T_PHBOOL16      0x0331  /* huge pointer to 16 bit boolean */
  429. #define T_PHBOOL32      0x0332  /* huge pointer to 32 bit boolean */
  430. #define T_32PBOOL08     0x0430  /* 16:32 near pointer to 8 bit boolean */
  431. #define T_32PFBOOL08    0x0530  /* 16:32 far pointer to 8 bit boolean */
  432. #define T_32PBOOL16     0x0431  /* 16:32 near pointer to 18 bit boolean */
  433. #define T_32PFBOOL16    0x0531  /* 16:32 far pointer to 16 bit boolean */
  434. #define T_32PBOOL32     0x0432  /* 16:32 near pointer to 32 bit boolean */
  435. #define T_32PFBOOL32    0x0532  /* 16:32 far pointer to 32 bit boolean */
  436. #define T_NCVPTR        0x01f0  /* CV Internal type for created near pointers */
  437. #define T_FCVPTR        0x02f0  /* CV Internal type for created far pointers */
  438. #define T_HCVPTR        0x03f0  /* CV Internal type for created huge pointers */
  439. /**     No leaf index can have a value of 0x0000.  The leaf indices are
  440.  *      separated into ranges depending upon the use of the type record.
  441.  *      The second range is for the type records that are directly referenced
  442.  *      in symbols. The first range is for type records that are not
  443.  *      referenced by symbols but instead are referenced by other type
  444.  *      records.  All type records must have a starting leaf index in these
  445.  *      first two ranges.  The third range of leaf indices are used to build
  446.  *      up complex lists such as the field list of a class type record.  No
  447.  *      type record can begin with one of the leaf indices. The fourth ranges
  448.  *      of type indices are used to represent numeric data in a symbol or
  449.  *      type record. These leaf indices are greater than 0x8000.  At the
  450.  *      point that type or symbol processor is expecting a numeric field, the
  451.  *      next two bytes in the type record are examined.  If the value is less
  452.  *      than 0x8000, then the two bytes contain the numeric value.  If the
  453.  *      value is greater than 0x8000, then the data follows the leaf index in
  454.  *      a format specified by the leaf index. The final range of leaf indices
  455.  *      are used to force alignment of subfields within a complex type record..
  456.  */
  457. /*
  458.  *      leaf indices starting records but referenced from symbol records
  459.  */
  460. #define LF_MODIFIER     0x0001
  461. #define LF_POINTER      0x0002
  462. #define LF_ARRAY        0x0003
  463. #define LF_CLASS        0x0004
  464. #define LF_STRUCTURE    0x0005
  465. #define LF_UNION        0x0006
  466. #define LF_ENUM         0x0007
  467. #define LF_PROCEDURE    0x0008
  468. #define LF_MFUNCTION    0x0009
  469. #define LF_VTSHAPE      0x000a
  470. #define LF_COBOL0       0x000b
  471. #define LF_COBOL1       0x000c
  472. #define LF_BARRAY       0x000d
  473. #define LF_LABEL        0x000e
  474. #define LF_NULL         0x000f
  475. #define LF_NOTTRAN      0x0010
  476. #define LF_DIMARRAY     0x0011
  477. #define LF_VFTPATH      0x0012
  478. #define LF_PRECOMP      0x0013  /* not refereced from symbol */
  479. #define LF_ENDPRECOMP   0x0014  /* not refereced from symbol */
  480. #define LF_OEM          0x0015
  481. #define LF_TYPESERVER   0x0016
  482. /*
  483.  * leaf indices starting records but referenced only from type records
  484.  */
  485. #define LF_SKIP         0x0200
  486. #define LF_ARGLIST      0x0201
  487. #define LF_DEFARG       0x0202
  488. #define LF_LIST         0x0203
  489. #define LF_FIELDLIST    0x0204
  490. #define LF_DERIVED      0x0205
  491. #define LF_BITFIELD     0x0206
  492. #define LF_METHODLIST   0x0207
  493. #define LF_DIMCONU      0x0208
  494. #define LF_DIMCONLU     0x0209
  495. #define LF_DIMVARU      0x020a
  496. #define LF_DIMVARLU     0x020b
  497. #define LF_REFSYM       0x020c
  498. #define LF_BCLASS       0x0400
  499. #define LF_VBCLASS      0x0401
  500. #define LF_IVBCLASS     0x0402
  501. #define LF_ENUMERATE    0x0403
  502. #define LF_FRIENDFCN    0x0404
  503. #define LF_INDEX        0x0405
  504. #define LF_MEMBER       0x0406
  505. #define LF_STMEMBER     0x0407
  506. #define LF_METHOD       0x0408
  507. #define LF_NESTTYPE     0x0409
  508. #define LF_VFUNCTAB     0x040a
  509. #define LF_FRIENDCLS    0x040b
  510. #define LF_NUMERIC      0x8000
  511. #define LF_CHAR         0x8000
  512. #define LF_SHORT        0x8001
  513. #define LF_USHORT       0x8002
  514. #define LF_LONG         0x8003
  515. #define LF_ULONG        0x8004
  516. #define LF_REAL32       0x8005
  517. #define LF_REAL64       0x8006
  518. #define LF_REAL80       0x8007
  519. #define LF_REAL128      0x8008
  520. #define LF_QUADWORD     0x8009
  521. #define LF_UQUADWORD    0x800a
  522. #define LF_REAL48       0x800b
  523. #define LF_PAD0         0xf0
  524. #define LF_PAD1         0xf1
  525. #define LF_PAD2         0xf2
  526. #define LF_PAD3         0xf3
  527. #define LF_PAD4         0xf4
  528. #define LF_PAD5         0xf5
  529. #define LF_PAD6         0xf6
  530. #define LF_PAD7         0xf7
  531. #define LF_PAD8         0xf8
  532. #define LF_PAD9         0xf9
  533. #define LF_PAD10        0xfa
  534. #define LF_PAD11        0xfb
  535. #define LF_PAD12        0xfc
  536. #define LF_PAD13        0xfd
  537. #define LF_PAD14        0xfe
  538. #define LF_PAD15        0xff
  539. /*
  540.  * end of leaf indices
  541.  */
  542. /*
  543.  *      Type enum for pointer records
  544.  *      Pointers can be one of the following types
  545.  */
  546. typedef enum CV_ptrtype_e {
  547.     CV_PTR_NEAR         = 0x00, /* near pointer */
  548.     CV_PTR_FAR          = 0x01, /* far pointer */
  549.     CV_PTR_HUGE         = 0x02, /* huge pointer */
  550.     CV_PTR_BASE_SEG     = 0x03, /* based on segment */
  551.     CV_PTR_BASE_VAL     = 0x04, /* based on value of base */
  552.     CV_PTR_BASE_SEGVAL  = 0x05, /* based on segment value of base */
  553.     CV_PTR_BASE_ADDR    = 0x06, /* based on address of base */
  554.     CV_PTR_BASE_SEGADDR = 0x07, /* based on segment address of base */
  555.     CV_PTR_BASE_TYPE    = 0x08, /* based on type */
  556.     CV_PTR_BASE_SELF    = 0x09, /* based on self */
  557.     CV_PTR_NEAR32       = 0x0a, /* 16:32 near pointer */
  558.     CV_PTR_FAR32        = 0x0b, /* 16:32 far pointer */
  559.     CV_PTR_UNUSEDPTR    = 0x0c  /* first unused pointer type */
  560. } CV_ptrtype_e;
  561. /*
  562.  *      Mode enum for pointers
  563.  *      Pointers can have one of the following modes
  564.  */
  565. typedef enum CV_ptrmode_e {
  566.     CV_PTR_MODE_PTR     = 0x00, /* "normal" pointer */
  567.     CV_PTR_MODE_REF     = 0x01, /* reference */
  568.     CV_PTR_MODE_PMEM    = 0x02, /* pointer to data member */
  569.     CV_PTR_MODE_PMFUNC  = 0x03, /* pointer to member function */
  570.     CV_PTR_MODE_RESERVED= 0x04  /* first unused pointer mode */
  571. } CV_ptrmode_e;
  572. /*
  573.  *      Enumeration for function call type
  574.  */
  575. typedef enum CV_call_e {
  576.     CV_CALL_NEAR_C      = 0x00, /* near right to left push, caller pops stack */
  577.     CV_CALL_FAR_C       = 0x01, /* far right to left push, caller pops stack */
  578.     CV_CALL_NEAR_PASCAL = 0x02, /* near left to right push, callee pops stack */
  579.     CV_CALL_FAR_PASCAL  = 0x03, /* far left to right push, callee pops stack */
  580.     CV_CALL_NEAR_FAST   = 0x04, /* near left to right push with regs, callee pops stack */
  581.     CV_CALL_FAR_FAST    = 0x05, /* far left to right push with regs, callee pops stack */
  582.     CV_CALL_PCODE       = 0x06, /* pcode */
  583.     CV_CALL_NEAR_STD    = 0x07, /* near standard call */
  584.     CV_CALL_FAR_STD     = 0x08, /* far standard call */
  585.     CV_CALL_NEAR_SYS    = 0x09, /* near sys call */
  586.     CV_CALL_FAR_SYS     = 0x0a, /* far sys call */
  587.     CV_CALL_THISCALL    = 0x0b, /* this call (this passed in register) */
  588.     CV_CALL_MIPSCALL    = 0x0c, /* Mips call */
  589.     CV_CALL_GENERIC     = 0x0d, // Generic call sequence
  590. CV_CALL_ALPHACALL = 0x0e, // Alpha call
  591. CV_CALL_RESERVED = 0x0f // first unused call enumeration
  592. } CV_call_e;
  593. /*
  594.  *      Values for the access protection of class attributes
  595.  */
  596. typedef enum CV_access_e {
  597.     CV_private   = 1,
  598.     CV_protected = 2,
  599.     CV_public    = 3
  600. } CV_access_e;
  601. /*
  602.  *      enumeration for method properties
  603.  */
  604. typedef enum CV_methodprop_e {
  605.     CV_MTvanilla        = 0x00,
  606.     CV_MTvirtual        = 0x01,
  607.     CV_MTstatic         = 0x02,
  608.     CV_MTfriend         = 0x03,
  609.     CV_MTintro          = 0x04,
  610.     CV_MTpurevirt       = 0x05,
  611.     CV_MTpureintro      = 0x06
  612. } CV_methodprop_e;
  613. /*
  614.  *      enumeration for virtual shape table entries
  615.  */
  616. typedef enum CV_VTS_desc_e {
  617.     CV_VTS_near         = 0x00,
  618.     CV_VTS_far          = 0x01,
  619.     CV_VTS_thin         = 0x02,
  620.     CV_VTS_outer        = 0x03,
  621.     CV_VTS_meta         = 0x04,
  622.     CV_VTS_near32       = 0x05,
  623.     CV_VTS_far32        = 0x06,
  624.     CV_VTS_unused       = 0x07
  625. } CV_VTS_desc_e;
  626. /*
  627.  *      enumeration for LF_LABEL address modes
  628.  */
  629. typedef enum CV_LABEL_TYPE_e {
  630.     CV_LABEL_NEAR = 0,          /* near return */
  631.     CV_LABEL_FAR  = 4           /* far return */
  632. } CV_LABEL_TYPE_e;
  633. /*
  634.  *      enumeration for LF_MODIFIER values
  635.  */
  636. typedef struct CV_modifier_t {
  637.     unsigned short  MOD_const       :1;
  638.     unsigned short  MOD_volatile    :1;
  639.     unsigned short  MOD_unused      :14;
  640. } CV_modifier_t;
  641. /*
  642.  *  bit field structure describing class/struct/union/enum properties
  643.  */
  644. typedef struct CV_prop_t {
  645.     unsigned short  packed      :1; /* structure is packed */
  646.     unsigned short  ctor        :1; /* constructors or destructors present */
  647.     unsigned short  ovlops      :1; /* overloaded operators present */
  648.     unsigned short  isnested    :1; /* this is a nested class */
  649.     unsigned short  cnested     :1; /* this class contains nested types */
  650.     unsigned short  opassign    :1; /* overloaded assignment (=) */
  651.     unsigned short  opcast      :1; /* casting methods */
  652.     unsigned short  fwdref      :1; /* forward reference (incomplete defn) */
  653.     unsigned short  scoped      :1; /* scoped definition */
  654.     unsigned short  reserved    :7;
  655. } CV_prop_t;
  656. /*
  657.  *  class field attribute
  658.  */
  659. typedef struct CV_fldattr_t {
  660.     unsigned short  access      :2; /* access protection CV_access_t */
  661.     unsigned short  mprop       :3; /* method properties CV_methodprop_t */
  662.     unsigned short  pseudo      :1; /* compiler generated fcn and does not exist */
  663.     unsigned short  noinherit   :1; /* true if class cannot be inherited */
  664.     unsigned short  noconstruct :1; /* true if class cannot be constructed */
  665.     unsigned short  unused      :8; /* unused */
  666. } CV_fldattr_t;
  667. /*
  668.  *  Structures to access to the type records
  669.  */
  670. typedef struct TYPTYPE {
  671.     unsigned short  len;
  672.     unsigned short  leaf;
  673. #ifdef CV
  674.     unsigned char   data[];
  675. #else
  676.     unsigned char   data[1];
  677. #endif
  678. } TYPTYPE;                      /* general types record */
  679. typedef enum CV_PMEMBER {
  680.     CV_PDM16_NONVIRT    = 0x00, /* 16:16 data no virtual fcn or base (null = -1) */
  681.     CV_PDM16_VFCN       = 0x01, /* 16:16 data with virtual functions null = 0 */
  682.     CV_PDM16_VBASE      = 0x02, /* 16:16 data with virtual bases null = (,,-1) */
  683.     CV_PDM32_NVVFCN     = 0x03, /* 16:32 data w/wo virtual functions null = 0x80000000 */
  684.     CV_PDM32_VBASE      = 0x04, /* 16:32 data with virtual bases (,,-1L) */
  685.     CV_PMF16_NEARNVSA   = 0x05, /* 16:16 near method nonvirtual single address point */
  686.     CV_PMF16_NEARNVMA   = 0x06, /* 16:16 near method nonvirtual multiple address points */
  687.     CV_PMF16_NEARVBASE  = 0x07, /* 16:16 near method virtual bases */
  688.     CV_PMF16_FARNVSA    = 0x08, /* 16:16 far method nonvirtual single address point */
  689.     CV_PMF16_FARNVMA    = 0x09, /* 16:16 far method nonvirtual multiple address points */
  690.     CV_PMF16_FARVBASE   = 0x0a, /* 16:16 far method virtual bases */
  691.     CV_PMF32_NVSA       = 0x0b, /* 16:32 method nonvirtual single address point */
  692.     CV_PMF32_NVMA       = 0x0c, /* 16:32 method nonvirtual multiple address point */
  693.     CV_PMF32_VBASE      = 0x0d  /* 16:32 method virtual bases */
  694. } CV_PMEMBER;
  695. /*
  696.  *  memory representation of pointer to member.  These representations are
  697.  *  indexed by the enumeration above in the LF_POINTER record
  698.  */
  699. /*  representation of a 16:16 pointer to data for a class with no
  700.  *  virtual functions or virtual bases
  701.  */
  702. struct CV_PDMR16_NONVIRT {
  703.     CV_off16_t      mdisp;      /* displacement to data (NULL = -1) */
  704. };
  705. /*
  706.  *  representation of a 16:16 pointer to data for a class with virtual
  707.  *  functions
  708.  */
  709. struct CV_PMDR16_VFCN {
  710.     CV_off16_t      mdisp;      /* displacement to data ( NULL = 0) */
  711. };
  712. /*
  713.  *  representation of a 16:16 pointer to data for a class with
  714.  *  virtual bases
  715.  */
  716. struct CV_PDMR16_VBASE {
  717.     CV_off16_t      mdisp;      /* displacement to data */
  718.     CV_off16_t      pdisp;      /* this pointer displacement to vbptr */
  719.     CV_off16_t      vdisp;      /* displacement within vbase table */
  720. };
  721. /*
  722.  *  representation of a 16:32 near pointer to data for a class with
  723.  *  or without virtual functions and no virtual bases
  724.  */
  725. struct CV_PDMR32_NVVFCN {
  726.     CV_off32_t      mdisp;      /* displacement to data (NULL = 0x80000000) */
  727. };
  728. /*
  729.  *  representation of a 16:32 near pointer to data for a class
  730.  *  with virtual bases
  731.  */
  732. struct CV_PDMR32_VBASE {
  733.     CV_off32_t      mdisp;      /* displacement to data */
  734.     CV_off32_t      pdisp;      /* this pointer displacement */
  735.     CV_off32_t      vdisp;      /* vbase table displacement */
  736. };
  737. /*
  738.  *  representation of a 16:16 pointer to near member function for a
  739.  *  class with no virtual functions or bases and a single address point
  740.  */
  741. struct CV_PMFR16_NEARNVSA {
  742.     CV_uoff16_t     off;        /* near address of function (NULL = 0) */
  743. };
  744. /*
  745.  *  representation of a 16:16 pointer to far member function for a
  746.  *  class with no virtual bases and a single address point
  747.  */
  748. struct CV_PMFR16_FARNVSA {
  749.     CV_uoff16_t     off;        /* offset of function (NULL = 0:0) */
  750.     unsigned short  seg;        /* segment of function */
  751. };
  752. /*
  753.  *  representation of a 16:16 near pointer to member functions of an
  754.  *  class with no virtual bases and multiple address points
  755.  */
  756. struct CV_PMFR16_NEARNVMA {
  757.     CV_uoff16_t     off;        /* offset of function (NULL = 0,x) */
  758.     signed short    disp;
  759. };
  760. /*
  761.  *  representation of a 16:16 far pointer to member functions of a
  762.  *  class with no virtual bases and multiple address points
  763.  */
  764. struct CV_PMFR16_FARNVMA {
  765.     CV_uoff16_t     off;        /* offset of function (NULL = 0:0,x) */
  766.     unsigned short  seg;
  767.     signed short    disp;
  768. };
  769. /*
  770.  *  representation of a 16:16 near pointer to member function of a
  771.  *  class with virtual bases
  772.  */
  773. struct CV_PMFR16_NEARVBASE {
  774.     CV_uoff16_t     off;        /* offset of function (NULL = 0,x,x,x) */
  775.     CV_off16_t      mdisp;      /* displacement to data */
  776.     CV_off16_t      pdisp;      /* this pointer displacement */
  777.     CV_off16_t      vdisp;      /* vbase table displacement */
  778. };
  779. /*
  780.  *  representation of a 16:16 far pointer to member function of a
  781.  *  class with virtual bases
  782.  */
  783. struct CV_PMFR16_FARVBASE {
  784.     CV_uoff16_t     off;        /* offset of function (NULL = 0:0,x,x,x) */
  785.     unsigned short  seg;
  786.     CV_off16_t      mdisp;      /* displacement to data */
  787.     CV_off16_t      pdisp;      /* this pointer displacement */
  788.     CV_off16_t      vdisp;      /* vbase table displacement */
  789. };
  790. /*
  791.  *  representation of a 16:32 near pointer to member function for a
  792.  *  class with no virtual bases and a single address point
  793.  */
  794. struct CV_PMFR32_NVSA {
  795.     CV_uoff32_t      off;       /* near address of function (NULL = 0L) */
  796. };
  797. /*
  798.  *  representation of a 16:32 near pointer to member function for a
  799.  *  class with no virtual bases and multiple address points
  800.  */
  801. struct CV_PMFR32_NVMA {
  802.     CV_uoff32_t     off;        /* near address of function (NULL = 0L,x) */
  803.     CV_off32_t      disp;
  804. };
  805. /*
  806.  *  representation of a 16:32 near pointer to member function for a
  807.  *  class with virtual bases
  808.  */
  809. struct CV_PMFR32_VBASE {
  810.     CV_uoff32_t     off;        /* near address of function (NULL = 0L,x,x,x) */
  811.     CV_off32_t      mdisp;      /* displacement to data */
  812.     CV_off32_t      pdisp;      /* this pointer displacement */
  813.     CV_off32_t      vdisp;      /* vbase table displacement */
  814. };
  815. /*
  816.  *  Easy leaf - used for generic casting to reference leaf field
  817.  *  of a subfield of a complex list
  818.  */
  819. typedef struct lfEasy {
  820.     unsigned short  leaf;       /* LF_... */
  821. } lfEasy;
  822. /*      The following type records are basically variant records of the
  823.  *      above structure.  The "unsigned short leaf" of the above structure and
  824.  *      the "unsigned short leaf" of the following type definitions are the
  825.  *      same symbol.  When the OMF record is locked via the MHOMFLock API
  826.  *      call, the address of the "unsigned short leaf" is returned
  827.  */
  828. /*
  829.  *      Type record for LF_MODIFIER
  830.  */
  831. typedef struct lfModifier {
  832.     unsigned short  leaf;       /* LF_MODIFIER */
  833.     CV_modifier_t   attr;       /* modifier attribute modifier_t */
  834.     CV_typ_t        type;       /* modified type */
  835. } lfModifier;
  836. /*
  837.  *      type record for LF_POINTER
  838.  */
  839. typedef struct lfPointer {
  840.     struct lfPointerBody {
  841.         unsigned short      leaf; /* LF_POINTER */
  842.         struct {
  843.             unsigned char   ptrtype     :5; /* ordinal specifying pointer type (ptrtype-t) */
  844.             unsigned char   ptrmode     :3; /* ordinal specifying pointer mode (ptrmode_t) */
  845.             unsigned char   isflat32    :1; /* true if 0:32 pointer */
  846.             unsigned char   isvolatile  :1; /* TRUE if volatile pointer */
  847.             unsigned char   isconst     :1; /* TRUE if const pointer */
  848.             unsigned char   unused      :5;
  849.         } attr;
  850.         CV_typ_t    utype;      /* type index of the underlying type */
  851.     } u;
  852.     union  {
  853.         struct {
  854.             CV_typ_t        pmclass; /* index of containing class for pointer to member */
  855.             unsigned short  pmenum; /* enumeration specifying pm format */
  856.         } pm;
  857.         unsigned short      bseg; /* base segment if PTR_BASE_SEG */
  858.         unsigned char       Sym[1]; /* copy of base symbol record (including length) */
  859.         struct  {
  860.             unsigned short  index; /* type index if CV_PTR_BASE_TYPE */
  861.             unsigned char   name[1]; /* name of base type */
  862.         } btype;
  863.     } pbase;
  864. } lfPointer;
  865. /*
  866.  *      type record for LF_ARRAY
  867.  */
  868. typedef struct lfArray {
  869.     unsigned short  leaf;       /* LF_ARRAY */
  870.     CV_typ_t        elemtype;   /* type index of element type */
  871.     CV_typ_t        idxtype;    /* type index of indexing type */
  872.     unsigned char   data[];     /* variable length data specifying */
  873.                                 /* size in bytes and name */
  874. } lfArray;
  875. /*
  876.  *      type record for LF_CLASS, LF_STRUCTURE
  877.  */
  878. typedef struct lfClass {
  879.     unsigned short  leaf;       /* LF_CLASS, LF_STRUCT */
  880.     unsigned short  count;      /* count of number of elements in class */
  881.     CV_typ_t        field;      /* type index of LF_FIELD descriptor list */
  882.     CV_prop_t       property;   /* property attribute field (prop_t) */
  883.     CV_typ_t        derived;    /* type index of derived from list if not zero */
  884.     CV_typ_t        vshape;     /* type index of vshape table for this class */
  885.     unsigned char   data[];     /* data describing length of structure in */
  886.                                 /* bytes and name */
  887. } lfClass;
  888. typedef lfClass lfStructure;
  889. /*
  890.  *      type record for LF_UNION
  891.  */
  892. typedef struct lfUnion {
  893.     unsigned short  leaf;       /* LF_UNION */
  894.     unsigned short  count;      /* count of number of elements in class */
  895.     CV_typ_t        field;      /* type index of LF_FIELD descriptor list */
  896.     CV_prop_t       property;   /* property attribute field */
  897.     unsigned char   data[];     /* variable length data describing length of */
  898.                                 /* structure and name */
  899. } lfUnion;
  900. /*
  901.  *      type record for LF_ENUM
  902.  */
  903. typedef struct lfEnum {
  904.     unsigned short  leaf;       /* LF_ENUM */
  905.     unsigned short  count;      /* count of number of elements in class */
  906.     CV_typ_t        utype;      /* underlying type of the enum */
  907.     CV_typ_t        field;      /* type index of LF_FIELD descriptor list */
  908.     CV_prop_t       property;   /* property attribute field */
  909.     unsigned char   Name[1];    /* length prefixed name of enum */
  910. } lfEnum;
  911. /*
  912.  *      Type record for LF_PROCEDURE
  913.  */
  914. typedef struct lfProc {
  915.     unsigned short  leaf;       /* LF_PROCEDURE */
  916.     CV_typ_t        rvtype;     /* type index of return value */
  917.     unsigned char   calltype;   /* calling convention (call_t) */
  918.     unsigned char   reserved;   /* reserved for future use */
  919.     unsigned short  parmcount;  /* number of parameters */
  920.     CV_typ_t        arglist;    /* type index of argument list */
  921. } lfProc;
  922. /*
  923.  *      Type record for member function
  924.  */
  925. typedef struct lfMFunc {
  926.     unsigned short  leaf;       /* LF_MFUNCTION */
  927.     CV_typ_t        rvtype;     /* type index of return value */
  928.     CV_typ_t        classtype;  /* type index of containing class */
  929.     CV_typ_t        thistype;   /* type index of this pointer (model specific) */
  930.     unsigned char   calltype;   /* calling convention (call_t) */
  931.     unsigned char   reserved;   /* reserved for future use */
  932.     unsigned short  parmcount;  /* number of parameters */
  933.     CV_typ_t        arglist;    /* type index of argument list */
  934.     long            thisadjust; /* this adjuster (long because pad required anyway) */
  935. } lfMFunc;
  936. /*
  937.  *     type record for virtual function table shape
  938.  */
  939. typedef struct lfVTShape {
  940.     unsigned short  leaf;       /* LF_VTSHAPE */
  941.     unsigned short  count;      /* number of entries in vfunctable */
  942.     unsigned char   desc[];     /* variable number of 4 bit (VTS_desc) descriptors */
  943. } lfVTShape;
  944. /*
  945.  *      type record for cobol0
  946.  */
  947. typedef struct lfCobol0 {
  948.     unsigned short  leaf;       /* LF_COBOL0 */
  949.     CV_typ_t        type;
  950.     unsigned char   data[];
  951. } lfCobol0;
  952. /*
  953.  *      type record for cobol1
  954.  */
  955. typedef struct lfCobol1 {
  956.     unsigned short  leaf;       /* LF_COBOL1 */
  957.     unsigned char   data[];
  958. } lfCobol1;
  959. /*
  960.  *      type record for basic array
  961.  */
  962. typedef struct lfBArray {
  963.     unsigned short  leaf;       /* LF_BARRAY */
  964.     CV_typ_t        utype;      /* type index of underlying type */
  965. } lfBArray;
  966. /*
  967.  *      type record for assembler labels
  968.  */
  969. typedef struct lfLabel {
  970.     unsigned short  leaf;       /* LF_LABEL */
  971.     unsigned short  mode;       /* addressing mode of label */
  972. } lfLabel;
  973. /*
  974.  *      type record for dimensioned arrays
  975.  */
  976. typedef struct lfDimArray {
  977.     unsigned short  leaf;       /* LF_DIMARRAY */
  978.     CV_typ_t        utype;      /* underlying type of the array */
  979.     CV_typ_t        diminfo;    /* dimension information */
  980.     char            name[1];    /* length prefixed name */
  981. } lfDimArray;
  982. /*
  983.  *      type record describing path to virtual function table
  984.  */
  985. typedef struct lfVFTPath {
  986.     unsigned short  leaf;       /* LF_VFTPATH */
  987.     unsigned short  count;      /* count of number of bases in path */
  988.     CV_typ_t        base[1];    /* bases from root to leaf */
  989. } lfVFTPath;
  990. /*
  991.  *      type record describing inclusion of precompiled types
  992.  */
  993. typedef struct lfPreComp {
  994.     unsigned short  leaf;       /* LF_PRECOMP */
  995.     unsigned short  start;      /* starting type index included */
  996.     unsigned short  count;      /* number of types in inclusion */
  997.     unsigned long   signature;  /* signature */
  998.     unsigned char   name[];     /* length prefixed name of included type file */
  999. } lfPreComp;
  1000. /*
  1001.  *      type record describing end of precompiled types that will be
  1002.  *      included by another file
  1003.  */
  1004. typedef struct lfEndPreComp {
  1005.     unsigned short  leaf;       /* LF_ENDPRECOMP */
  1006.     unsigned long   signature;  /* signature */
  1007. } lfEndPreComp;
  1008. /*
  1009.  *      description of type records that can be referenced from
  1010.  *      type records referenced by symbols
  1011.  */
  1012. /*
  1013.  *      type record for skip record
  1014.  */
  1015. typedef struct lfSkip {
  1016.     unsigned short  leaf;       /* LF_SKIP */
  1017.     CV_typ_t        type;       /* next valid index */
  1018.     unsigned char   data[];     /* pad data */
  1019. } lfSkip;
  1020. /*
  1021.  *      argument list leaf
  1022.  */
  1023. typedef struct lfArgList {
  1024.     unsigned short  leaf;       /* LF_ARGLIST */
  1025.     unsigned short  count;      /* number of arguments */
  1026.     CV_typ_t        arg[];      /* number of arguments */
  1027. } lfArgList;
  1028. /*
  1029.  *      derived class list leaf
  1030.  */
  1031. typedef struct lfDerived {
  1032.     unsigned short  leaf;       /* LF_DERIVED */
  1033.     unsigned short  count;      /* number of arguments */
  1034.     CV_typ_t        drvdcls[];  /* type indices of derived classes */
  1035. } lfDerived;
  1036. /*
  1037.  *      leaf for default arguments
  1038.  */
  1039. typedef struct lfDefArg {
  1040.     unsigned short  leaf;       /* LF_DEFARG */
  1041.     CV_typ_t        type;       /* type of resulting expression */
  1042.     unsigned char   expr[];     /* length prefixed expression string */
  1043. } lfDefArg;
  1044. /*
  1045.  *      list leaf
  1046.  *          This list should no longer be used because the utilities cannot
  1047.  *          verify the contents of the list without knowing what type of list
  1048.  *          it is.  New specific leaf indices should be used instead.
  1049.  */
  1050. typedef struct lfList {
  1051.     unsigned short  leaf;       /* LF_LIST */
  1052.     char            data[];     /* data format specified by indexing type */
  1053. } lfList;
  1054. /*
  1055.  *      field list leaf
  1056.  *      This is the header leaf for a complex list of class and structure
  1057.  *      subfields.
  1058.  */
  1059. typedef struct lfFieldList {
  1060.     unsigned short  leaf;       /* LF_FIELDLIST */
  1061.     char            data[];     /* field list sub lists */
  1062. } lfFieldList;
  1063. /*
  1064.  *  type record for non-static methods and friends in method list
  1065.  */
  1066. typedef struct mlMethod {
  1067.     CV_fldattr_t   attr;        /* method attribute */
  1068.     CV_typ_t       index;       /* index to type record for procedure */
  1069. #ifdef CV
  1070.     unsigned long  vbaseoff[0]; /* offset in vfunctable if intro virtual */
  1071. #else
  1072. //    unsigned long   vbaseoff[1];
  1073. #endif
  1074. } mlMethod;
  1075. typedef struct lfMethodList {
  1076.     unsigned short leaf;
  1077.     unsigned char  mList[];     /* really a mlMethod type */
  1078. } lfMethodList;
  1079. /*
  1080.  *      type record for LF_BITFIELD
  1081.  */
  1082. typedef struct lfBitfield {
  1083.     unsigned short  leaf;       /* LF_BITFIELD */
  1084.     unsigned char   length;
  1085.     unsigned char   position;
  1086.     CV_typ_t        type;       /* type of bitfield */
  1087. } lfBitfield;
  1088. /*
  1089.  *      type record for dimensioned array with constant bounds
  1090.  */
  1091. typedef struct lfDimCon {
  1092.     unsigned short  leaf;       /* LF_DIMCONU or LF_DIMCONLU */
  1093.     unsigned short  rank;       /* number of dimensions */
  1094.     CV_typ_t        typ;        /* type of index */
  1095.     unsigned char   dim[];      /* array of dimension information with */
  1096.                                 /* either upper bounds or lower/upper bound */
  1097. } lfDimCon;
  1098. /*
  1099.  *      type record for dimensioned array with variable bounds
  1100.  */
  1101. typedef struct lfDimVar {
  1102.     unsigned short  leaf;       /* LF_DIMVARU or LF_DIMVARLU */
  1103.     unsigned short  rank;       /* number of dimensions */
  1104.     CV_typ_t        typ;        /* type of index */
  1105.     unsigned char   dim[];      /* array of type indices for either */
  1106.                                 /* variable upper bound or variable */
  1107.                                 /* lower/upper bound.  The referenced */
  1108.                                 /* types must be LF_REFSYM or T_VOID */
  1109. } lfDimVar;
  1110. /*
  1111.  *      type record for referenced symbol
  1112.  */
  1113. typedef struct lfRefSym {
  1114.     unsigned short  leaf;       /* LF_REFSYM */
  1115.     unsigned char   Sym[1];     /* copy of referenced symbol record */
  1116.                                 /* (including length) */
  1117. } lfRefSym;
  1118. /**     the following are numeric leaves.  They are used to indicate the
  1119.  *      size of the following variable length data.  When the numeric
  1120.  *      data is a single byte less than 0x8000, then the data is output
  1121.  *      directly.  If the data is more the 0x8000 or is a negative value,
  1122.  *      then the data is preceeded by the proper index.
  1123.  */
  1124. /*      signed character leaf */
  1125. typedef struct lfChar {
  1126.     unsigned short  leaf;       /* LF_CHAR */
  1127.     signed char     val;        /* signed 8-bit value */
  1128. } lfChar;
  1129. /*      signed short leaf */
  1130. typedef struct lfShort {
  1131.     unsigned short  leaf;       /* LF_SHORT */
  1132.     short           val;        /* signed 16-bit value */
  1133. } lfShort;
  1134. /*      unsigned short leaf */
  1135. typedef struct lfUShort {
  1136.     unsigned short  leaf;       /* LF_unsigned short */
  1137.     unsigned short  val;        /* unsigned 16-bit value */
  1138. } lfUShort;
  1139. /*      signed long leaf */
  1140. typedef struct lfLong {
  1141.     unsigned short  leaf;       /* LF_LONG */
  1142.     long            val;        /* signed 32-bit value */
  1143. } lfLong;
  1144. /*      unsigned long leaf */
  1145. typedef struct lfULong {
  1146.     unsigned short  leaf;       /* LF_ULONG */
  1147.     unsigned long   val;        /* unsigned 32-bit value */
  1148. } lfULong;
  1149. /*      real 32-bit leaf */
  1150. typedef struct lfReal32 {
  1151.     unsigned short  leaf;       /* LF_REAL32 */
  1152.     float           val;        /* 32-bit real value */
  1153. } lfReal32;
  1154. /*      real 48-bit leaf */
  1155. typedef struct lfReal48 {
  1156.     unsigned short  leaf;       /* LF_REAL48 */
  1157.     unsigned char   val[6];     /* 48-bit real value */
  1158. } lfReal48;
  1159. /*      real 64-bit leaf */
  1160. typedef struct lfReal64 {
  1161.     unsigned short  leaf;       /* LF_REAL64 */
  1162.     double          val;        /* 64-bit real value */
  1163. } lfReal64;
  1164. /*      real 80-bit leaf */
  1165. typedef struct lfReal80 {
  1166.     unsigned short  leaf;       /* LF_REAL80 */
  1167.     REAL10          val;        /* real 80-bit value */
  1168. } lfReal80;
  1169. /*      real 128-bit leaf */
  1170. typedef struct lfReal128 {
  1171.     unsigned short  leaf;       /* LF_REAL128 */
  1172.     char            val[16];    /* real 128-bit value */
  1173. } lfReal128;
  1174. /************************************************************************/
  1175. /*      index leaf - contains type index of another leaf */
  1176. /*      a major use of this leaf is to allow the compilers to emit a */
  1177. /*      long complex list (LF_FIELD) in smaller pieces. */
  1178. typedef struct lfIndex {
  1179.     unsigned short  leaf;       /* LF_INDEX */
  1180.     CV_typ_t        index;      /* type index of referenced leaf */
  1181. } lfIndex;
  1182. /*      subfield record for base class field */
  1183. typedef struct lfBClass {
  1184.     unsigned short  leaf;       /* LF_BCLASS */
  1185.     CV_typ_t        index;      /* type index of base class */
  1186.     CV_fldattr_t    attr;       /* attribute */
  1187.     unsigned char   offset[];   /* variable length offset of base within class */
  1188. } lfBClass;
  1189. /*      subfield record for direct and indirect virtual base class field */
  1190. typedef struct lfVBClass {
  1191.     unsigned short  leaf;       /* LF_VBCLASS | LV_IVBCLASS */
  1192.     CV_typ_t        index;      /* type index of direct virtual base class */
  1193.     CV_typ_t        vbptr;      /* type index of virtual base pointer */
  1194.     CV_fldattr_t    attr;       /* attribute */
  1195.     unsigned char   vbpoff[];   /* virtual base pointer offset from address point */
  1196.                                 /* followed by virtual base offset from vbtable */
  1197. } lfVBClass;
  1198. /*      subfield record for friend class */
  1199. typedef struct lfFriendCls {
  1200.     unsigned short  leaf;       /* LF_FRIENDCLS */
  1201.     CV_typ_t        index;      /* index to type record of friend class */
  1202. } lfFriendCls;
  1203. /*      subfield record for friend function */
  1204. typedef struct lfFriendFcn {
  1205.     unsigned short  leaf;       /* LF_FRIENDFCN */
  1206.     CV_typ_t        index;      /* index to type record of friend function */
  1207.     char            Name[1];    /* name of friend function */
  1208. } lfFriendFcn;
  1209. /*      subfield record for non-static data members */
  1210. typedef struct lfMember {
  1211.     unsigned short  leaf;       /* LF_MEMBER */
  1212.     CV_typ_t        index;      /* index of type record for field */
  1213.     CV_fldattr_t    attr;       /* attribute mask */
  1214.     unsigned char   offset[];   /* variable length offset of field followed */
  1215.                                 /* by length prefixed name of field */
  1216. } lfMember;
  1217. /*  type record for static data members */
  1218. typedef struct lfSTMember {
  1219.     unsigned short  leaf;       /* LF_STMEMBER */
  1220.     CV_typ_t        index;      /* index of type record for field */
  1221.     CV_fldattr_t    attr;       /* attribute mask */
  1222.     char            Name[1];    /* length prefixed name of field */
  1223. } lfSTMember;
  1224. /*      subfield record for virtual function table pointer */
  1225. typedef struct lfVFuncTab {
  1226.     unsigned short  leaf;       /* LF_VFUNCTAB */
  1227.     CV_typ_t        type;       /* type index of pointer */
  1228. } lfVFuncTab;
  1229. /*      subfield record for method and friend list */
  1230. typedef struct lfMethod {
  1231.     unsigned short  leaf;       /* LF_METHOD */
  1232.     unsigned short  count;      /* number of occurances of function */
  1233.     CV_typ_t        mList;      /* index to LF_METHODLIST record */
  1234.     char            Name[1];    /* length prefixed name of method */
  1235. } lfMethod;
  1236. /*      subfield record for enumerate */
  1237. typedef struct lfEnumerate {
  1238.     unsigned short  leaf;       /* LF_ENUMERATE */
  1239.     CV_fldattr_t    attr;       /* access (ACC_...) */
  1240.     unsigned char   value[];    /* variable length value field followed */
  1241.                                 /* by length prefixed name */
  1242. } lfEnumerate;
  1243. /*  type record for nested (scoped) type definition */
  1244. typedef struct lfNestType {
  1245.     unsigned short  leaf;       /* LF_NESTTYPE */
  1246.     CV_typ_t        index;      /* index of nested type definition */
  1247.     unsigned char   Name[1];    /* length prefixed type name */
  1248. } lfNestType;
  1249. /*  type record for pad leaf */
  1250. typedef struct lfPad {
  1251.     unsigned char   leaf;
  1252. } SYM_PAD;
  1253. /*  Symbol definitions */
  1254. typedef enum SYM_ENUM_e {
  1255.     S_COMPILE    =  0x0001,     /* Compile flags symbol */
  1256.     S_REGISTER   =  0x0002,     /* Register variable */
  1257.     S_CONSTANT   =  0x0003,     /* constant symbol */
  1258.     S_UDT        =  0x0004,     /* User defined type */
  1259.     S_SSEARCH    =  0x0005,     /* Start Search */
  1260.     S_END        =  0x0006,     /* Block, procedure, "with" or thunk end */
  1261.     S_SKIP       =  0x0007,     /* Reserve symbol space in $$Symbols table */
  1262.     S_CVRESERVE  =  0x0008,     /* Reserve symbol for CV internal use */
  1263.     S_OBJNAME    =  0x0009,     /* path to object file name */
  1264.     S_ENDARG     =  0x000a,     /* end of argument list */
  1265.     S_COBOLUDT   =  0x000b,     /* special UDT for cobol -- not packed */
  1266.     S_BPREL16    =  0x0100,     /* BP-relative */
  1267.     S_LDATA16    =  0x0101,     /* Module-local symbol */
  1268.     S_GDATA16    =  0x0102,     /* Global data symbol */
  1269.     S_PUB16      =  0x0103,     /* a public symbol */
  1270.     S_LPROC16    =  0x0104,     /* Local procedure start */
  1271.     S_GPROC16    =  0x0105,     /* Global procedure start */
  1272.     S_THUNK16    =  0x0106,     /* Thunk Start */
  1273.     S_BLOCK16    =  0x0107,     /* block start */
  1274.     S_WITH16     =  0x0108,     /* with start */
  1275.     S_LABEL16    =  0x0109,     /* code label */
  1276.     S_CEXMODEL16 =  0x010a,     /* change execution model */
  1277.     S_VFTABLE16  =  0x010b,     /* address of virtual function table */
  1278.     S_REGREL16   =  0x010c,     /* register relative address */
  1279.     S_BPREL32    =  0x0200,     /* BP-relative */
  1280.     S_LDATA32    =  0x0201,     /* Module-local symbol */
  1281.     S_GDATA32    =  0x0202,     /* Global data symbol */
  1282.     S_PUB32      =  0x0203,     /* a public symbol (CV internal reserved) */
  1283.     S_LPROC32    =  0x0204,     /* Local procedure start */
  1284.     S_GPROC32    =  0x0205,     /* Global procedure start */
  1285.     S_THUNK32    =  0x0206,     /* Thunk Start */
  1286.     S_BLOCK32    =  0x0207,     /* block start */
  1287.     S_WITH32     =  0x0208,     /* with start */
  1288.     S_LABEL32    =  0x0209,     /* code label */
  1289.     S_CEXMODEL32 =  0x020a,     /* change execution model */
  1290.     S_VFTABLE32  =  0x020b,     /* address of virtual function table */
  1291.     S_REGREL32   =  0x020c,     /* register relative address */
  1292.     S_LTHREAD32  =  0x020d,
  1293.     S_GTHREAD32  =  0x020e,
  1294.     S_LPROCMIPS  =  0x0300,     /* Local procedure start */
  1295.     S_GPROCMIPS  =  0x0301,     /* Global procedure start */
  1296.     S_PROCREF    =  0x400,      /* Procedure reference */
  1297.     S_DATAREF    =  0x401,      /* Data reference */
  1298.     S_ALIGN      =  0x402       /* Page Alignment */
  1299. } SYM_ENUM_e;
  1300. /*  enum describing the compile flag source language */
  1301. typedef enum {
  1302.     CV_CFL_C        = 0x00,
  1303.     CV_CFL_CXX      = 0x01,
  1304.     CV_CFL_FORTRAN  = 0x02,
  1305.     CV_CFL_MASM     = 0x03,
  1306.     CV_CFL_PASCAL   = 0x04,
  1307.     CV_CFL_BASIC    = 0x05,
  1308.     CV_CFL_COBOL    = 0x06
  1309. } CV_CFL_LANG;
  1310. /*  enum describing target processor */
  1311. typedef enum CV_CPU_TYPE_e {
  1312.     CV_CFL_8080         = 0x00,
  1313.     CV_CFL_8086         = 0x01,
  1314.     CV_CFL_80286        = 0x02,
  1315.     CV_CFL_80386        = 0x03,
  1316.     CV_CFL_80486        = 0x04,
  1317.     CV_CFL_PENTIUM      = 0x05,
  1318.     CV_CFL_MIPSR4000    = 0x10,
  1319.     CV_CFL_M68000       = 0x20,
  1320.     CV_CFL_M68010       = 0x21,
  1321.     CV_CFL_M68020       = 0x22,
  1322.     CV_CFL_M68030       = 0x23,
  1323.     CV_CFL_M68040       = 0x24,
  1324.     CV_CFL_ALPHA        = 0x30
  1325. } CV_CPU_TYPE_e;
  1326. /*  enum describing compile flag ambiant data model */
  1327. typedef enum {
  1328.     CV_CFL_DNEAR    = 0x00,
  1329.     CV_CFL_DFAR     = 0x01,
  1330.     CV_CFL_DHUGE    = 0x02
  1331. } CV_CFL_DATA;
  1332. /*  enum describing compile flag ambiant code model */
  1333. typedef enum CV_CFL_CODE_e {
  1334.     CV_CFL_CNEAR    = 0x00,
  1335.     CV_CFL_CFAR     = 0x01,
  1336.     CV_CFL_CHUGE    = 0x02
  1337. } CV_CFL_CODE_e;
  1338. /*  enum describing compile flag target floating point package */
  1339. typedef enum CV_CFL_FPKG_e {
  1340.     CV_CFL_NDP      = 0x00,
  1341.     CV_CFL_EMU      = 0x01,
  1342.     CV_CFL_ALT      = 0x02
  1343. } CV_CFL_FPKG_e;
  1344. typedef struct SYMTYPE {
  1345.     unsigned short      reclen; /* Record length */
  1346.     unsigned short      rectyp; /* Record type */
  1347.     char        data[];
  1348. } SYMTYPE;
  1349. /*
  1350.  *  cobol information ---
  1351.  */
  1352. typedef enum CV_COBOL_e {
  1353.     CV_COBOL_dontstop,
  1354.     CV_COBOL_pfm,
  1355.     CV_COBOL_false,
  1356.     CV_COBOL_extcall
  1357. } CV_COBOL_e;
  1358. struct {
  1359.     unsigned short subtype;     /* see CV_COBOL_e above */
  1360.     unsigned short flag;
  1361. } cobol;
  1362. /*      non-model specific symbol types */
  1363. typedef struct REGSYM {
  1364.     unsigned short  reclen;     /* Record length */
  1365.     unsigned short  rectyp;     /* S_REGISTER */
  1366.     unsigned short  typind;     /* Type index */
  1367.     unsigned short  reg;        /* register enumerate */
  1368.     unsigned char   name[1];    /* Length-prefixed name */
  1369. } REGSYM;
  1370. typedef struct CONSTSYM {
  1371.     unsigned short  reclen;     /* Record length */
  1372.     unsigned short  rectyp;     /* S_CONSTANT */
  1373.     CV_typ_t        typind;     /* Type index (containing enum if enumerate) */
  1374.     unsigned short  value;      /* numeric leaf containing value */
  1375.     unsigned char   name[];     /* Length-prefixed name */
  1376. } CONSTSYM;
  1377. typedef struct UDTSYM {
  1378.     unsigned short  reclen;     /* Record length */
  1379.     unsigned short  rectyp;     /* S_UDT |S_COBOLUDT */
  1380.     CV_typ_t        typind;     /* Type index */
  1381.     unsigned char   name[1];    /* Length-prefixed name */
  1382. } UDTSYM;
  1383. typedef struct SEARCHSYM {
  1384.     unsigned short  reclen;     /* Record length */
  1385.     unsigned short  rectyp;     /* S_SSEARCH */
  1386.     unsigned long   startsym;   /* offset of the procedure */
  1387.     unsigned short  seg;        /* segment of symbol */
  1388. } SEARCHSYM;
  1389. typedef struct CFLAGSYM {
  1390.     unsigned short  reclen;     /* Record length */
  1391.     unsigned short  rectyp;     /* S_COMPILE */
  1392.     unsigned char   machine;    /* target processor */
  1393.     struct  {
  1394.         unsigned char   language    :8; /* language index */
  1395.         unsigned char   pcode       :1; /* true if pcode present */
  1396.         unsigned char   floatprec   :2; /* floating precision */
  1397.         unsigned char   floatpkg    :2; /* float package */
  1398.         unsigned char   ambdata     :3; /* ambiant data model */
  1399.         unsigned char   ambcode     :3; /* ambiant code model */
  1400.         unsigned char   mode32      :1; /* true if compiled 32 bit mode */
  1401.         unsigned char   pad         :4; /* reserved */
  1402.     } flags;
  1403.     unsigned char       ver[1]; /* Length-prefixed compiler version string */
  1404. } CFLAGSYM;
  1405. typedef struct OBJNAMESYM {
  1406.     unsigned short  reclen;     /* Record length */
  1407.     unsigned short  rectyp;     /* S_OBJNAME */
  1408.     unsigned long   signature;  /* signature */
  1409.     unsigned char   name[1];    /* Length-prefixed name */
  1410. } OBJNAMESYM;
  1411. /*      symbol types for 16:16 memory model */
  1412. typedef struct BPRELSYM16 {
  1413.     unsigned short  reclen;     /* Record length */
  1414.     unsigned short  rectyp;     /* S_BPREL16 */
  1415.     CV_off16_t      off;        /* BP-relative offset */
  1416.     CV_typ_t        typind;     /* Type index */
  1417.     unsigned char   name[1];    /* Length-prefixed name */
  1418. } BPRELSYM16;
  1419. typedef struct DATASYM16 {
  1420.     unsigned short  reclen;     /* Record length */
  1421.     unsigned short  rectyp;     /* S_LDATA16 or S_GDATA16 or S_PUB16 */
  1422.     CV_uoff16_t     off;        /* offset of symbol */
  1423.     unsigned short  seg;        /* segment of symbol */
  1424.     CV_typ_t        typind;     /* Type index */
  1425.     unsigned char   name[1];    /* Length-prefixed name */
  1426. } DATASYM16;
  1427. typedef DATASYM16 PUBSYM16;
  1428. typedef struct PROCSYM16 {
  1429.     unsigned short  reclen;     /* Record length */
  1430.     unsigned short  rectyp;     /* S_GPROC16 or S_LPROC16 */
  1431.     unsigned long   pParent;    /* pointer to the parent */
  1432.     unsigned long   pEnd;       /* pointer to this blocks end */
  1433.     unsigned long   pNext;      /* pointer to next symbol */
  1434.     unsigned short  len;        /* Proc length */
  1435.     unsigned short  DbgStart;   /* Debug start offset */
  1436.     unsigned short  DbgEnd;     /* Debug end offset */
  1437.     CV_uoff16_t     off;        /* offset of symbol */
  1438.     unsigned short  seg;        /* segment of symbol */
  1439.     CV_typ_t        typind;     /* Type index */
  1440.     char            rtntyp;     /* Return type (NEAR/FAR) */
  1441.     unsigned char   name[1];    /* Length-prefixed name */
  1442. } PROCSYM16;
  1443. typedef struct THUNKSYM16 {
  1444.     unsigned short  reclen;     /* Record length */
  1445.     unsigned short  rectyp;     /* S_THUNK16 */
  1446.     unsigned long   pParent;    /* pointer to the parent */
  1447.     unsigned long   pEnd;       /* pointer to this blocks end */
  1448.     unsigned long   pNext;      /* pointer to next symbol */
  1449.     CV_uoff16_t     off;        /* offset of symbol */
  1450.     unsigned short  seg;        /* segment of symbol */
  1451.     unsigned short  len;        /* length of thunk */
  1452.     unsigned char   ord;        /* ordinal specifying type of thunk */
  1453.     unsigned char   name[1];    /* name of thunk */
  1454. #ifdef CV
  1455.     unsigned char   variant[0]; /* variant portion of thunk */
  1456. #else
  1457.     unsigned char   variant[1]; /* variant portion of thunk */
  1458. #endif
  1459. } THUNKSYM16;
  1460. typedef enum {
  1461.     THUNK_ORDINAL_NOTYPE,
  1462.     THUNK_ORDINAL_ADJUSTOR,
  1463.     THUNK_ORDINAL_VCALL
  1464. } THUNK_ORDINAL;
  1465. typedef struct LABELSYM16 {
  1466.     unsigned short  reclen;     /* Record length */
  1467.     unsigned short  rectyp;     /* S_LABEL16 */
  1468.     CV_uoff16_t     off;        /* offset of symbol */
  1469.     unsigned short  seg;        /* segment of symbol */
  1470.     char            rtntyp;     /* Return type (NEAR/FAR) */
  1471.     unsigned char   name[1];    /* Length-prefixed name */
  1472. } LABELSYM16;
  1473. typedef enum CV_RETURN_TYPE_e {
  1474.     CV_RETURN_NEAR = 0,         /* near return */
  1475.     CV_RETURN_FAR  = 4          /* far return */
  1476. } CV_RETURN_TYPE_e;
  1477. typedef struct BLOCKSYM16 {
  1478.     unsigned short  reclen;     /* Record length */
  1479.     unsigned short  rectyp;     /* S_BLOCK16 */
  1480.     unsigned long   pParent;    /* pointer to the parent */
  1481.     unsigned long   pEnd;       /* pointer to this blocks end */
  1482.     unsigned short  len;        /* Block length */
  1483.     CV_uoff16_t     off;        /* offset of symbol */
  1484.     unsigned short  seg;        /* segment of symbol */
  1485.     unsigned char   name[1];    /* Length-prefixed name */
  1486. } BLOCKSYM16;
  1487. typedef struct WITHSYM16 {
  1488.     unsigned short  reclen;     /* Record length */
  1489.     unsigned short  rectyp;     /* S_WITH16 */
  1490.     unsigned long   pParent;    /* pointer to the parent */
  1491.     unsigned long   pEnd;       /* pointer to this blocks end */
  1492.     unsigned short  len;        /* Block length */
  1493.     CV_uoff16_t     off;        /* offset of symbol */
  1494.     unsigned short  seg;        /* segment of symbol */
  1495.     unsigned char   name[1];    /* Length-prefixed name */
  1496. } WITHSYM16;
  1497. typedef enum CEXM_MODEL_e {
  1498.     CEXM_MDL_table  = 0x00,     /* not executable */
  1499.     CEXM_MDL_native = 0x20,     /* native */
  1500.     CEXM_MDL_cobol  = 0x21,     /* cobol */
  1501.     CEXM_MDL_pcode  = 0x40      /* pcode */
  1502. } CEXM_MODEL_e;
  1503. typedef struct CEXMSYM16 {
  1504.     unsigned short  reclen;     /* Record length */
  1505.     unsigned short  rectyp;     /* S_CEXMODEL16 */
  1506.     CV_uoff16_t     off;        /* offset of symbol */
  1507.     unsigned short  seg;        /* segment of symbol */
  1508.     unsigned short  model;      /* execution model */
  1509.     union variant {
  1510.         struct  {
  1511.             CV_uoff16_t pcdtable; /* offset to pcode function table */
  1512.             CV_uoff16_t pcdspi; /* offset to segment pcode information */
  1513.         } pcode;
  1514.     } u;
  1515. } CEXMSYM16;
  1516. typedef struct VPATHSYM16 {
  1517.     unsigned short  reclen;     /* record length */
  1518.     unsigned short  rectyp;     /* S_VFTPATH16 */
  1519.     CV_uoff16_t     off;        /* offset of virtual function table */
  1520.     unsigned short  seg;        /* segment of virtual function table */
  1521.     CV_typ_t        root;       /* type index of the root of path */
  1522.     CV_typ_t        path;       /* type index of the path record */
  1523. } VPATHSYM16;
  1524. typedef struct REGREL16 {
  1525.     unsigned short  reclen;     /* Record length */
  1526.     unsigned short  rectyp;     /* S_REGREL16 */
  1527.     CV_uoff16_t     off;        /* offset of symbol */
  1528.     unsigned short  reg;        /* register index */
  1529.     CV_typ_t        typind;     /* Type index */
  1530.     unsigned char   name[1];    /* Length-prefixed name */
  1531. } REGREL16;
  1532. typedef struct BPRELSYM32 {
  1533.     unsigned short  reclen;     /* Record length */
  1534.     unsigned short  rectyp;     /* S_BPREL32 */
  1535.     CV_off32_t      off;        /* BP-relative offset */
  1536.     CV_typ_t        typind;     /* Type index */
  1537.     unsigned char   name[1];    /* Length-prefixed name */
  1538. } BPRELSYM32;
  1539. typedef struct DATASYM32 {
  1540.     unsigned short  reclen;     /* Record length */
  1541.     unsigned short  rectyp;     /* S_LDATA32, S_GDATA32, S_LTHREAD32,
  1542.                                    S_GTHREAD32 or S_PUB32 */
  1543.     CV_uoff32_t     off;
  1544.     unsigned short  seg;
  1545.     CV_typ_t        typind;     /* Type index */
  1546.     unsigned char   name[1];    /* Length-prefixed name */
  1547. } DATASYM32;
  1548. typedef DATASYM32 PUBSYM32;
  1549. typedef struct PROCSYM32 {
  1550.     unsigned short  reclen;     /* Record length */
  1551.     unsigned short  rectyp;     /* S_GPROC32 or S_LPROC32 */
  1552.     unsigned long   pParent;    /* pointer to the parent */
  1553.     unsigned long   pEnd;       /* pointer to this blocks end */
  1554.     unsigned long   pNext;      /* pointer to next symbol */
  1555.     unsigned long   len;        /* Proc length */
  1556.     unsigned long   DbgStart;   /* Debug start offset */
  1557.     unsigned long   DbgEnd;     /* Debug end offset */
  1558.     CV_uoff32_t     off;
  1559.     unsigned short  seg;
  1560.     CV_typ_t        typind;     /* Type index */
  1561.     char            rtntyp;     /* Return type (NEAR/FAR) */
  1562.     unsigned char   name[1];    /* Length-prefixed name */
  1563. } PROCSYM32;
  1564. typedef struct THUNKSYM32 {
  1565.     unsigned short  reclen;     /* Record length */
  1566.     unsigned short  rectyp;     /* S_THUNK32 */
  1567.     unsigned long   pParent;    /* pointer to the parent */
  1568.     unsigned long   pEnd;       /* pointer to this blocks end */
  1569.     unsigned long   pNext;      /* pointer to next symbol */
  1570.     CV_uoff32_t     off;
  1571.     unsigned short  seg;
  1572.     unsigned short  len;        /* length of thunk */
  1573.     unsigned char   ord;        /* ordinal specifying type of thunk */
  1574.     unsigned char   name[1];    /* Length-prefixed name */
  1575. #ifdef CV
  1576.     unsigned char   variant[0]; /* variant portion of thunk */
  1577. #else
  1578.     unsigned char   variant[1]; /* variant portion of thunk */
  1579. #endif
  1580. } THUNKSYM32;
  1581. typedef struct LABELSYM32 {
  1582.     unsigned short  reclen;     /* Record length */
  1583.     unsigned short  rectyp;     /* S_LABEL32 */
  1584.     CV_uoff32_t     off;
  1585.     unsigned short  seg;
  1586.     char            rtntyp;     /* Return type (NEAR/FAR) */
  1587.     unsigned char   name[1];    /* Length-prefixed name */
  1588. } LABELSYM32;
  1589. typedef struct BLOCKSYM32 {
  1590.     unsigned short  reclen;     /* Record length */
  1591.     unsigned short  rectyp;     /* S_BLOCK32 */
  1592.     unsigned long   pParent;    /* pointer to the parent */
  1593.     unsigned long   pEnd;       /* pointer to this blocks end */
  1594.     unsigned long   len;        /* Block length */
  1595.     CV_uoff32_t     off;        /* Offset in code segment */
  1596.     unsigned short  seg;        /* segment of label */
  1597.     unsigned char   name[1];    /* Length-prefixed name */
  1598. } BLOCKSYM32;
  1599. typedef struct WITHSYM32 {
  1600.     unsigned short  reclen;     /* Record length */
  1601.     unsigned short  rectyp;     /* S_WITH32 */
  1602.     unsigned long   pParent;    /* pointer to the parent */
  1603.     unsigned long   pEnd;       /* pointer to this blocks end */
  1604.     unsigned long   len;        /* Block length */
  1605.     CV_uoff32_t     off;        /* Offset in code segment */
  1606.     unsigned short  seg;        /* segment of label */
  1607.     unsigned char   name[1];    /* Length-prefixed expression string */
  1608. } WITHSYM32;
  1609. typedef struct VPATHSYM32 {
  1610.     unsigned short  reclen;     /* record length */
  1611.     unsigned short  rectyp;     /* S_VFTPATH32 */
  1612.     CV_uoff32_t     off;        /* offset of virtual function table */
  1613.     unsigned short  seg;        /* segment of virtual function table */
  1614.     CV_typ_t        root;       /* type index of the root of path */
  1615.     CV_typ_t        path;       /* type index of the path record */
  1616. } VPATHSYM32;
  1617. typedef struct REGREL32 {
  1618.     unsigned short  reclen;     /* Record length */
  1619.     unsigned short  rectyp;     /* S_REGREL32 */
  1620.     CV_uoff32_t     off;        /* offset of symbol */
  1621.     unsigned short  reg;        /* register index for symbol */
  1622.     CV_typ_t        typind;     /* Type index */
  1623.     unsigned char   name[1];    /* Length-prefixed name */
  1624. } REGREL32, * LPREGREL32;
  1625. typedef struct PROCSYMMIPS {
  1626.     unsigned short  reclen;     /* Record length */
  1627.     unsigned short  rectyp;     /* S_GPROCMIPS or S_LPROCMIPS */
  1628.     unsigned long   pParent;    /* pointer to the parent */
  1629.     unsigned long   pEnd;       /* pointer to this blocks end */
  1630.     unsigned long   pNext;      /* pointer to next symbol */
  1631.     unsigned long   len;        /* Proc length */
  1632.     unsigned long   DbgStart;   /* Debug start offset */
  1633.     unsigned long   DbgEnd;     /* Debug end offset */
  1634.     unsigned long   regSave;    /* int register save mask */
  1635.     unsigned long   fpSave;     /* fp register save mask */
  1636.     unsigned long   intOff;     /* int register save offset */
  1637.     unsigned long   fpOff;      /* fp register save offset */
  1638.     CV_uoff32_t     off;        /* Symbol offset */
  1639.     unsigned short  seg;        /* Symbol segment */
  1640.     CV_typ_t        typind;     /* Type index */
  1641.     char            retReg;     /* Register return value is in */
  1642.     char            frameReg;   /* Frame pointer register */
  1643.     unsigned char   name[1];    /* Length-prefixed name */
  1644. } PROCSYMMIPS, *PROCPTRMIPS;
  1645. /*  generic block definition symbols */
  1646. /*  these are similar to the equivalent 16:16 or 16:32 symbols but */
  1647. /*  only define the length, type and linkage fields */
  1648. typedef struct PROCSYM {
  1649.     unsigned short  reclen;     /* Record length */
  1650.     unsigned short  rectyp;     /* S_GPROC16 or S_LPROC16 */
  1651.     unsigned long   pParent;    /* pointer to the parent */
  1652.     unsigned long   pEnd;       /* pointer to this blocks end */
  1653.     unsigned long   pNext;      /* pointer to next symbol */
  1654. } PROCSYM;
  1655. typedef struct THUNKSYM {
  1656.     unsigned short  reclen;     /* Record length */
  1657.     unsigned short  rectyp;     /* S_THUNK */
  1658.     unsigned long   pParent;    /* pointer to the parent */
  1659.     unsigned long   pEnd;       /* pointer to this blocks end */
  1660.     unsigned long   pNext;      /* pointer to next symbol */
  1661. } THUNKSYM;
  1662. typedef struct BLOCKSYM {
  1663.     unsigned short  reclen;     /* Record length */
  1664.     unsigned short  rectyp;     /* S_BLOCK16 */
  1665.     unsigned long   pParent;    /* pointer to the parent */
  1666.     unsigned long   pEnd;       /* pointer to this blocks end */
  1667. } BLOCKSYM;
  1668. typedef struct WITHSYM {
  1669.     unsigned short  reclen;     /* Record length */
  1670.     unsigned short  rectyp;     /* S_WITH16 */
  1671.     unsigned long   pParent;    /* pointer to the parent */
  1672.     unsigned long   pEnd;       /* pointer to this blocks end */
  1673. } WITHSYM;
  1674. typedef enum CV_HREG_e {
  1675.     /*
  1676.      *  Register set for the Intel 80x86 and ix86 processor series
  1677.      *  (plus PCODE registers)
  1678.      */
  1679.     CV_REG_NONE  =   0,
  1680.     CV_REG_AL    =   1,
  1681.     CV_REG_CL    =   2,
  1682.     CV_REG_DL    =   3,
  1683.     CV_REG_BL    =   4,
  1684.     CV_REG_AH    =   5,
  1685.     CV_REG_CH    =   6,
  1686.     CV_REG_DH    =   7,
  1687.     CV_REG_BH    =   8,
  1688.     CV_REG_AX    =   9,
  1689.     CV_REG_CX    =  10,
  1690.     CV_REG_DX    =  11,
  1691.     CV_REG_BX    =  12,
  1692.     CV_REG_SP    =  13,
  1693.     CV_REG_BP    =  14,
  1694.     CV_REG_SI    =  15,
  1695.     CV_REG_DI    =  16,
  1696.     CV_REG_EAX   =  17,
  1697.     CV_REG_ECX   =  18,
  1698.     CV_REG_EDX   =  19,
  1699.     CV_REG_EBX   =  20,
  1700.     CV_REG_ESP   =  21,
  1701.     CV_REG_EBP   =  22,
  1702.     CV_REG_ESI   =  23,
  1703.     CV_REG_EDI   =  24,
  1704.     CV_REG_ES    =  25,
  1705.     CV_REG_CS    =  26,
  1706.     CV_REG_SS    =  27,
  1707.     CV_REG_DS    =  28,
  1708.     CV_REG_FS    =  29,
  1709.     CV_REG_GS    =  30,
  1710.     CV_REG_IP    =  31,
  1711.     CV_REG_FLAGS =  32,
  1712.     CV_REG_EIP   =  33,
  1713.     CV_REG_EFLAGS = 34,
  1714.     CV_REG_TEMP  =  40,         /* PCODE Temp */
  1715.     CV_REG_TEMPH =  41,         /* PCODE TempH */
  1716.     CV_REG_QUOTE =  42,         /* PCODE Quote */
  1717.     CV_REG_PCDR3 =  43,         /* PCODE reserved */
  1718.     CV_REG_PCDR4 =  44,         /* PCODE reserved */
  1719.     CV_REG_PCDR5 =  45,         /* PCODE reserved */
  1720.     CV_REG_PCDR6 =  46,         /* PCODE reserved */
  1721.     CV_REG_PCDR7 =  47,         /* PCODE reserved */
  1722.     CV_REG_CR0   =  80,         /* CR0 -- control registers */
  1723.     CV_REG_CR1   =  81,
  1724.     CV_REG_CR2   =  82,
  1725.     CV_REG_CR3   =  83,
  1726.     CV_REG_DR0   =  90,         /* Debug register */
  1727.     CV_REG_DR1   =  91,
  1728.     CV_REG_DR2   =  92,
  1729.     CV_REG_DR3   =  93,
  1730.     CV_REG_DR4   =  94,
  1731.     CV_REG_DR5   =  95,
  1732.     CV_REG_DR6   =  96,
  1733.     CV_REG_DR7   =  97,
  1734.     CV_REG_ST0   =  128,
  1735.     CV_REG_ST1   =  129,
  1736.     CV_REG_ST2   =  130,
  1737.     CV_REG_ST3   =  131,
  1738.     CV_REG_ST4   =  132,
  1739.     CV_REG_ST5   =  133,
  1740.     CV_REG_ST6   =  134,
  1741.     CV_REG_ST7   =  135,
  1742.     CV_REG_CTRL  =  136,
  1743.     CV_REG_STAT  =  137,
  1744.     CV_REG_TAG   =  138,
  1745.     CV_REG_FPIP  =  139,
  1746.     CV_REG_FPCS  =  140,
  1747.     CV_REG_FPDO  =  141,
  1748.     CV_REG_FPDS  =  142,
  1749.     CV_REG_ISEM  =  143,
  1750.     CV_REG_FPEIP =  144,
  1751.     CV_REG_FPEDO =  145,
  1752.     /*
  1753.      * registers for the 68K processors
  1754.      */
  1755.     CV_R68_D0   =   0,
  1756.     CV_R68_D1   =   1,
  1757.     CV_R68_D2   =   2,
  1758.     CV_R68_D3   =   3,
  1759.     CV_R68_D4   =   4,
  1760.     CV_R68_D5   =   5,
  1761.     CV_R68_D6   =   6,
  1762.     CV_R68_D7   =   7,
  1763.     CV_R68_A0   =   8,
  1764.     CV_R68_A1   =   9,
  1765.     CV_R68_A2   =   10,
  1766.     CV_R68_A3   =   11,
  1767.     CV_R68_A4   =   12,
  1768.     CV_R68_A5   =   13,
  1769.     CV_R68_A6   =   14,
  1770.     CV_R68_A7   =   15,
  1771.     CV_R68_CCR  =   16,
  1772.     CV_R68_SR   =   17,
  1773.     CV_R68_USP  =   18,
  1774.     CV_R68_MSP  =   19,
  1775.     CV_R68_SFC  =   20,
  1776.     CV_R68_DFC  =   21,
  1777.     CV_R68_CACR =   22,
  1778.     CV_R68_VBR  =   23,
  1779.     CV_R68_CAAR =   24,
  1780.     CV_R68_ISP  =   25,
  1781.     CV_R68_PC   =   26,
  1782.                                 /* reserved  27 */
  1783.     CV_R68_FPCR =   28,
  1784.     CV_R68_FPSR =   29,
  1785.     CV_R68_FPIAR=   30,
  1786.                                 /* reserved  31 */
  1787.     CV_R68_FP0  =   32,
  1788.     CV_R68_FP1  =   33,
  1789.     CV_R68_FP2  =   34,
  1790.     CV_R68_FP3  =   35,
  1791.     CV_R68_FP4  =   36,
  1792.     CV_R68_FP5  =   37,
  1793.     CV_R68_FP6  =   38,
  1794.     CV_R68_FP7  =   39,
  1795.                                 /* reserved  40-50 */
  1796.     CV_R68_PSR  =   51,
  1797.     CV_R68_PCSR =   52,
  1798.     CV_R68_VAL  =   53,
  1799.     CV_R68_CRP  =   54,
  1800.     CV_R68_SRP  =   55,
  1801.     CV_R68_DRP  =   56,
  1802.     CV_R68_TC   =   57,
  1803.     CV_R68_AC   =   58,
  1804.     CV_R68_SCC  =   59,
  1805.     CV_R68_CAL  =   60,
  1806.     CV_R68_TT0  =   61,
  1807.     CV_R68_TT1  =   62,
  1808.                                 /* reserved  63 */
  1809.     CV_R68_BAD0 =   64,
  1810.     CV_R68_BAD1 =   65,
  1811.     CV_R68_BAD2 =   66,
  1812.     CV_R68_BAD3 =   67,
  1813.     CV_R68_BAD4 =   68,
  1814.     CV_R68_BAD5 =   69,
  1815.     CV_R68_BAD6 =   70,
  1816.     CV_R68_BAD7 =   71,
  1817.     CV_R68_BAC0 =   72,
  1818.     CV_R68_BAC1 =   73,
  1819.     CV_R68_BAC2 =   74,
  1820.     CV_R68_BAC3 =   75,
  1821.     CV_R68_BAC4 =   76,
  1822.     CV_R68_BAC5 =   77,
  1823.     CV_R68_BAC6 =   78,
  1824.     CV_R68_BAC7 =   79,
  1825.     /*
  1826.      * Register set for the MIPS 4000
  1827.      */
  1828.     CV_M4_NOREG    =   CV_REG_NONE,
  1829.     CV_M4_IntZERO  =   10,      /* CPU REGISTER */
  1830.     CV_M4_IntAT    =   11,
  1831.     CV_M4_IntV0    =   12,
  1832.     CV_M4_IntV1    =   13,
  1833.     CV_M4_IntA0    =   14,
  1834.     CV_M4_IntA1    =   15,
  1835.     CV_M4_IntA2    =   16,
  1836.     CV_M4_IntA3    =   17,
  1837.     CV_M4_IntT0    =   18,
  1838.     CV_M4_IntT1    =   19,
  1839.     CV_M4_IntT2    =   20,
  1840.     CV_M4_IntT3    =   21,
  1841.     CV_M4_IntT4    =   22,
  1842.     CV_M4_IntT5    =   23,
  1843.     CV_M4_IntT6    =   24,
  1844.     CV_M4_IntT7    =   25,
  1845.     CV_M4_IntS0    =   26,
  1846.     CV_M4_IntS1    =   27,
  1847.     CV_M4_IntS2    =   28,
  1848.     CV_M4_IntS3    =   29,
  1849.     CV_M4_IntS4    =   30,
  1850.     CV_M4_IntS5    =   31,
  1851.     CV_M4_IntS6    =   32,
  1852.     CV_M4_IntS7    =   33,
  1853.     CV_M4_IntT8    =   34,
  1854.     CV_M4_IntT9    =   35,
  1855.     CV_M4_IntKT0   =   36,
  1856.     CV_M4_IntKT1   =   37,
  1857.     CV_M4_IntGP    =   38,
  1858.     CV_M4_IntSP    =   39,
  1859.     CV_M4_IntS8    =   40,
  1860.     CV_M4_IntRA    =   41,
  1861.     CV_M4_IntLO    =   42,
  1862.     CV_M4_IntHI    =   43,
  1863.     CV_M4_Fir      =   50,
  1864.     CV_M4_Psr      =   51,
  1865.     CV_M4_FltF0    =   60,      /* Floating point registers */
  1866.     CV_M4_FltF1    =   61,
  1867.     CV_M4_FltF2    =   62,
  1868.     CV_M4_FltF3    =   63,
  1869.     CV_M4_FltF4    =   64,
  1870.     CV_M4_FltF5    =   65,
  1871.     CV_M4_FltF6    =   66,
  1872.     CV_M4_FltF7    =   67,
  1873.     CV_M4_FltF8    =   68,
  1874.     CV_M4_FltF9    =   69,
  1875.     CV_M4_FltF10   =   70,
  1876.     CV_M4_FltF11   =   71,
  1877.     CV_M4_FltF12   =   72,
  1878.     CV_M4_FltF13   =   73,
  1879.     CV_M4_FltF14   =   74,
  1880.     CV_M4_FltF15   =   75,
  1881.     CV_M4_FltF16   =   76,
  1882.     CV_M4_FltF17   =   77,
  1883.     CV_M4_FltF18   =   78,
  1884.     CV_M4_FltF19   =   79,
  1885.     CV_M4_FltF20   =   80,
  1886.     CV_M4_FltF21   =   81,
  1887.     CV_M4_FltF22   =   82,
  1888.     CV_M4_FltF23   =   83,
  1889.     CV_M4_FltF24   =   84,
  1890.     CV_M4_FltF25   =   85,
  1891.     CV_M4_FltF26   =   86,
  1892.     CV_M4_FltF27   =   87,
  1893.     CV_M4_FltF28   =   88,
  1894.     CV_M4_FltF29   =   89,
  1895.     CV_M4_FltF30   =   90,
  1896.     CV_M4_FltF31   =   92,
  1897.     CV_M4_FltFsr   =   93,
  1898.     /*
  1899.      * Register set for the ALPHA AXP
  1900.      */
  1901.     CV_ALPHA_NOREG    = CV_REG_NONE,
  1902. CV_ALPHA_FltF0   =   10,   /* Floating point registers */
  1903. CV_ALPHA_FltF1,  // 11
  1904. CV_ALPHA_FltF2,  // 12
  1905. CV_ALPHA_FltF3,  // 13
  1906. CV_ALPHA_FltF4,  // 14
  1907. CV_ALPHA_FltF5,  // 15
  1908. CV_ALPHA_FltF6,  // 16
  1909. CV_ALPHA_FltF7,  // 17
  1910. CV_ALPHA_FltF8,  // 18
  1911. CV_ALPHA_FltF9,  // 19
  1912. CV_ALPHA_FltF10, // 20
  1913. CV_ALPHA_FltF11, // 21
  1914. CV_ALPHA_FltF12, // 22
  1915. CV_ALPHA_FltF13, // 23
  1916. CV_ALPHA_FltF14, // 24
  1917. CV_ALPHA_FltF15, // 25
  1918. CV_ALPHA_FltF16, // 26
  1919. CV_ALPHA_FltF17, // 27
  1920. CV_ALPHA_FltF18, // 28
  1921. CV_ALPHA_FltF19, // 29
  1922. CV_ALPHA_FltF20, // 30
  1923. CV_ALPHA_FltF21, // 31
  1924. CV_ALPHA_FltF22, // 32
  1925. CV_ALPHA_FltF23, // 33
  1926. CV_ALPHA_FltF24, // 34
  1927. CV_ALPHA_FltF25, // 35
  1928. CV_ALPHA_FltF26, // 36
  1929. CV_ALPHA_FltF27, // 37
  1930. CV_ALPHA_FltF28, // 38
  1931. CV_ALPHA_FltF29, // 39
  1932. CV_ALPHA_FltF30, // 30
  1933. CV_ALPHA_FltF31, // 41
  1934. CV_ALPHA_IntV0,  // 42 Integer registers
  1935. CV_ALPHA_IntT0,  // 43
  1936. CV_ALPHA_IntT1,  // 44
  1937. CV_ALPHA_IntT2,  // 45
  1938. CV_ALPHA_IntT3,  // 46
  1939. CV_ALPHA_IntT4,  // 47
  1940. CV_ALPHA_IntT5,  // 48
  1941. CV_ALPHA_IntT6,  // 49
  1942. CV_ALPHA_IntT7,  // 50
  1943. CV_ALPHA_IntS0,  // 51
  1944. CV_ALPHA_IntS1,  // 52
  1945. CV_ALPHA_IntS2,  // 53
  1946. CV_ALPHA_IntS3,  // 54
  1947. CV_ALPHA_IntS4,  // 55
  1948. CV_ALPHA_IntS5,  // 56
  1949. CV_ALPHA_IntFP,  // 57
  1950. CV_ALPHA_IntA0,  // 58
  1951. CV_ALPHA_IntA1,  // 59
  1952. CV_ALPHA_IntA2,  // 60
  1953. CV_ALPHA_IntA3,  // 61
  1954. CV_ALPHA_IntA4,  // 62
  1955. CV_ALPHA_IntA5,  // 63
  1956. CV_ALPHA_IntT8,  // 64
  1957. CV_ALPHA_IntT9,  // 65
  1958. CV_ALPHA_IntT10, // 66
  1959. CV_ALPHA_IntT11, // 67
  1960. CV_ALPHA_IntRA,  // 68
  1961. CV_ALPHA_IntT12, // 69
  1962. CV_ALPHA_IntAT,  // 70
  1963. CV_ALPHA_IntGP,  // 71
  1964. CV_ALPHA_IntSP,  // 72
  1965. CV_ALPHA_IntZERO, // 73
  1966. CV_ALPHA_Fpcr, // 74 Control registers
  1967. CV_ALPHA_Fir, // 75
  1968. CV_ALPHA_Psr, // 76
  1969. CV_ALPHA_FltFsr  // 77
  1970. } CV_HREG_e;
  1971. #pragma pack()
  1972. #endif /* CV_INFO_INCLUDED */