home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / sdktools / image / drwatson / include / cvinfo.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-02-14  |  79.7 KB  |  2,328 lines

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