Annotation of mstools/samples/sdktools/image/symedit/cvinfo.h, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.