/*** cvinfo.h - Generic CodeView information definitions * * Structures, constants, etc. for accessing and interpreting * CodeView information. * */ /*** The master copy of this file resides in the CodeView project. * All Microsoft projects are required to use the master copy without * modification. Modification of the master version or a copy * without consultation with all parties concerned is extremely * risky. * * The projects known to use this version (4.00.00) are: * * Codeview * Sequoia * C7.00 (all passes) * Cvpack * Cvdump */ #ifndef _CV_INFO_INCLUDED #define _CV_INFO_INCLUDED #pragma pack(1) typedef unsigned long CV_uoff32_t; typedef long CV_off32_t; typedef unsigned short CV_uoff16_t; typedef short CV_off16_t; typedef unsigned short CV_typ_t; #ifndef FLOAT10 #ifdef MIPS typedef struct { char b[10]; } FLOAT10; #else typedef long double FLOAT10; #endif #endif #define CV_SIGNATURE_C6 0L /* Actual signature is >64K */ #define CV_SIGNATURE_C7 1L /* First explicit signature */ #define CV_SIGNATURE_RESERVED 2L /* All signatures from 2 to 64K are reserved */ #define CV_MAXOFFSET 0xffffffff /** CodeView Symbol and Type OMF type information is broken up into two * ranges. Type indices less than 0x1000 describe frequently used * type information that is frequently used. Type indices above * 0x1000 are used to describe more complex features such as function, * arrays and structures. */ /** Primitive types have predefined meaning that is encoded in the * values of the various bit fields in the value. * * A CodeView primitive type is defined as: * * 1 1 * 1 089 7654 3 210 * r mode type r sub * * Where * mode is the pointer mode * type is a type indicator * sub is a subtype enumeration * r is a reserved field * * See Microsoft Symbol and Type OMF (Version 4.0) for more * information. */ #define CV_MMASK 0x700 /* mode mask */ #define CV_TMASK 0x0f0 /* type mask */ #define CV_SMASK 0x007 /* subtype mask */ #define CV_MSHIFT 8 /* primitive mode right shift count */ #define CV_TSHIFT 4 /* primitive type right shift count */ #define CV_SSHIFT 0 /* primitive subtype right shift count */ /* * macros to extract primitive mode, type and size */ #define CV_MODE(typ) (((typ) & CV_MMASK) >> CV_MSHIFT) #define CV_TYPE(typ) (((typ) & CV_TMASK) >> CV_TSHIFT) #define CV_SUBT(typ) (((typ) & CV_SMASK) >> CV_SSHIFT) /* * macros to insert new primitive mode, type and size */ #define CV_NEWMODE(typ, nm) (((typ) & ~CV_MMASK) | ((nm) << CV_MSHIFT)) #define CV_NEWTYPE(typ, nt) (((typ) & ~CV_TMASK) | ((nt) << CV_TSHIFT)) #define CV_NEWSUBT(typ, ns) (((typ) & ~CV_SMASK) | ((ns) << CV_SSHIFT)) /* * pointer mode enumeration values */ typedef enum CV_prmode_e { CV_TM_DIRECT = 0, /* mode is not a pointer */ CV_TM_NPTR = 1, /* mode is a near pointer */ CV_TM_FPTR = 2, /* mode is a far pointer */ CV_TM_HPTR = 3, /* mode is a huge pointer */ CV_TM_NPTR32 = 4, /* mode is a 32 bit near pointer */ CV_TM_FPTR32 = 5, /* mode is a 32 bit far pointer */ CV_TM_NPTR64 = 6 /* mode is a 64 bit near pointer */ } CV_prmode_e; /* * type enumeration values */ typedef enum CV_type_e { CV_SPECIAL = 0x00, /* special type size values */ CV_SIGNED = 0x01, /* signed integral size values */ CV_UNSIGNED = 0x02, /* unsigned integral size values */ CV_BOOLEAN = 0x03, /* Boolean size values */ CV_REAL = 0x04, /* real number size values */ CV_COMPLEX = 0x05, /* complex number size values */ CV_SPECIAL2 = 0x06, /* second set of special types */ CV_INT = 0x07, /* integral (int) values */ CV_CVRESERVED = 0x0f } CV_type_e; /* * subtype enumeration values for CV_SPECIAL */ typedef enum CV_special_e { CV_SP_NOTYPE = 0x00, CV_SP_ABS = 0x01, CV_SP_SEGMENT = 0x02, CV_SP_VOID = 0x03, CV_SP_CURRENCY = 0x04, CV_SP_NBASICSTR = 0x05, CV_SP_FBASICSTR = 0x06, CV_SP_NOTTRANS = 0x07 } CV_special_e; /* * subtype enumeration values for CV_SPECIAL2 */ typedef enum CV_special2_e { CV_S2_BIT = 0x00, CV_S2_PASCHAR = 0x01 /* Pascal CHAR */ } CV_special2_e; /* * subtype enumeration values for CV_SIGNED, CV_UNSIGNED and CV_BOOLEAN */ typedef enum CV_integral_e { CV_IN_1BYTE = 0x00, CV_IN_2BYTE = 0x01, CV_IN_4BYTE = 0x02, CV_IN_8BYTE = 0x03 } CV_integral_e; /* * subtype enumeration values for CV_REAL and CV_COMPLEX */ typedef enum CV_real_e { CV_RC_REAL32 = 0x00, CV_RC_REAL64 = 0x01, CV_RC_REAL80 = 0x02, CV_RC_REAL128 = 0x03, CV_RC_REAL48 = 0x04 } CV_real_e; /* * subtype enumeration values for CV_INT (really int) */ typedef enum CV_int_e { CV_RI_CHAR = 0x00, CV_RI_WCHAR = 0x01, CV_RI_INT2 = 0x02, CV_RI_UINT2 = 0x03, CV_RI_INT4 = 0x04, CV_RI_UINT4 = 0x05, CV_RI_INT8 = 0x06, CV_RI_UINT8 = 0x07 } CV_int_e; /* * macros to check the type of a primitive */ #define CV_TYP_IS_DIRECT(typ) (CV_MODE(typ) == CV_TM_DIRECT) #define CV_TYP_IS_PTR(typ) (CV_MODE(typ) != CV_TM_DIRECT) #define CV_TYP_IS_NPTR(typ) (CV_MODE(typ) == CV_TM_NPTR) #define CV_TYP_IS_FPTR(typ) (CV_MODE(typ) == CV_TM_FPTR) #define CV_TYP_IS_HPTR(typ) (CV_MODE(typ) == CV_TM_HPTR) #define CV_TYP_IS_NPTR32(typ) (CV_MODE(typ) == CV_TM_NPTR32) #define CV_TYP_IS_FPTR32(typ) (CV_MODE(typ) == CV_TM_FPTR32) #define CV_TYP_IS_SIGNED(typ) (((CV_TYPE(typ) == CV_SIGNED) && CV_TYP_IS_DIRECT(typ)) || \ (typ == T_INT2) || (typ == T_INT4)) #define CV_TYP_IS_UNSIGNED(typ) (((CV_TYPE(typ) == CV_UNSIGNED) && CV_TYP_IS_DIRECT(typ)) || \ (typ == T_UINT2) || (typ == T_UINT4)) #define CV_TYP_IS_REAL(typ) ((CV_TYPE(typ) == CV_REAL) && CV_TYP_IS_DIRECT(typ)) #define CV_FIRST_NONPRIM 0x1000 #define CV_IS_PRIMITIVE(typ) ((typ) < CV_FIRST_NONPRIM) /* * selected values for type_index - for a more complete definition, see * Microsoft Symbol and Type OMF document */ /* * Special Types */ #define T_NOTYPE 0x0000 /* uncharacterized type (no type) */ #define T_ABS 0x0001 /* absolute symbol */ #define T_SEGMENT 0x0002 /* segment type */ #define T_VOID 0x0003 /* void */ #define T_PVOID 0x0103 /* near pointer to void */ #define T_PFVOID 0x0203 /* far pointer to void */ #define T_PHVOID 0x0303 /* huge pointer to void */ #define T_32PVOID 0x0403 /* 16:32 near pointer to void */ #define T_32PFVOID 0x0503 /* 16:32 far pointer to void */ #define T_CURRENCY 0x0004 /* BASIC 8 byte currency value */ #define T_NBASICSTR 0x0005 /* Near BASIC string */ #define T_FBASICSTR 0x0006 /* Far BASIC string */ #define T_NOTTRANS 0x0007 /* type not translated by cvpack */ #define T_BIT 0x0060 /* bit */ #define T_PASCHAR 0x0061 /* Pascal CHAR */ /* * Character types */ #define T_CHAR 0x0010 /* 8 bit signed */ #define T_UCHAR 0x0020 /* 8 bit unsigned */ #define T_PCHAR 0x0110 /* near pointer to 8 bit signed */ #define T_PUCHAR 0x0120 /* near pointer to 8 bit unsigned */ #define T_PFCHAR 0x0210 /* far pointer to 8 bit signed */ #define T_PFUCHAR 0x0220 /* far pointer to 8 bit unsigned */ #define T_PHCHAR 0x0310 /* huge pointer to 8 bit signed */ #define T_PHUCHAR 0x0320 /* huge pointer to 8 bit unsigned */ #define T_32PCHAR 0x0410 /* 16:32 near pointer to 8 bit signed */ #define T_32PUCHAR 0x0420 /* 16:32 near pointer to 8 bit unsigned */ #define T_32PFCHAR 0x0510 /* 16:32 far pointer to 8 bit signed */ #define T_32PFUCHAR 0x0520 /* 16:32 far pointer to 8 bit unsigned */ /* * really a character types */ #define T_RCHAR 0x0070 /* really a char */ #define T_PRCHAR 0x0170 /* 16:16 near pointer to a real char */ #define T_PFRCHAR 0x0270 /* 16:16 far pointer to a real char */ #define T_PHRCHAR 0x0370 /* 16:16 huge pointer to a real char */ #define T_32PRCHAR 0x0470 /* 16:32 near pointer to a real char */ #define T_32PFRCHAR 0x0570 /* 16:32 far pointer to a real char */ /* * really a wide character types (UNICODE) */ #define T_WCHAR 0x0071 /* wide char */ #define T_PWCHAR 0x0171 /* 16:16 near pointer to a wide char */ #define T_PFWCHAR 0x0271 /* 16:16 far pointer to a wide char */ #define T_PHWCHAR 0x0371 /* 16:16 huge pointer to a wide char */ #define T_32PWCHAR 0x0471 /* 16:32 near pointer to a wide char */ #define T_32PFWCHAR 0x0571 /* 16:32 far pointer to a wide char */ /* * 16 bit short types */ #define T_SHORT 0x0011 /* 16 bit signed */ #define T_USHORT 0x0021 /* 16 bit unsigned */ #define T_PSHORT 0x0111 /* near pointer to 16 bit signed */ #define T_PUSHORT 0x0121 /* near pointer to 16 bit unsigned */ #define T_PFSHORT 0x0211 /* far pointer to 16 bit signed */ #define T_PFUSHORT 0x0221 /* far pointer to 16 bit unsigned */ #define T_PHSHORT 0x0311 /* huge pointer to 16 bit signed */ #define T_PHUSHORT 0x0321 /* huge pointer to 16 bit unsigned */ #define T_32PSHORT 0x0411 /* 16:32 near pointer to 16 bit signed */ #define T_32PUSHORT 0x0421 /* 16:32 near pointer to 16 bit unsigned */ #define T_32PFSHORT 0x0511 /* 16:32 far pointer to 16 bit signed */ #define T_32PFUSHORT 0x0521 /* 16:32 far pointer to 16 bit unsigned */ /* * 16 bit int types */ #define T_INT2 0x0072 /* 16 bit signed int */ #define T_UINT2 0x0073 /* 16 bit unsigned int */ #define T_PINT2 0x0172 /* near pointer to 16 bit signed int */ #define T_PUINT2 0x0173 /* near pointer to 16 bit unsigned int */ #define T_PFINT2 0x0272 /* far pointer to 16 bit signed int */ #define T_PFUINT2 0x0273 /* far pointer to 16 bit unsigned int */ #define T_PHINT2 0x0372 /* huge pointer to 16 bit signed int */ #define T_PHUINT2 0x0373 /* huge pointer to 16 bit unsigned int */ #define T_32PINT2 0x0472 /* 16:32 near pointer to 16 bit signed int */ #define T_32PUINT2 0x0473 /* 16:32 near pointer to 16 bit unsigned int */ #define T_32PFINT2 0x0572 /* 16:32 far pointer to 16 bit signed int */ #define T_32PFUINT2 0x0573 /* 16:32 far pointer to 16 bit unsigned int */ /* * 32 bit long types */ #define T_LONG 0x0012 /* 32 bit signed */ #define T_ULONG 0x0022 /* 32 bit unsigned */ #define T_PLONG 0x0112 /* near pointer to 32 bit signed */ #define T_PLONG 0x0112 /* near pointer to 32 bit signed */ #define T_PULONG 0x0122 /* near pointer to 32 bit unsigned */ #define T_PFLONG 0x0212 /* far pointer to 32 bit signed */ #define T_PFULONG 0x0222 /* far pointer to 32 bit unsigned */ #define T_PHLONG 0x0312 /* huge pointer to 32 bit signed */ #define T_PHULONG 0x0322 /* huge pointer to 32 bit unsigned */ #define T_32PLONG 0x0412 /* 16:32 near pointer to 32 bit signed */ #define T_32PULONG 0x0422 /* 16:32 near pointer to 32 bit unsigned */ #define T_32PFLONG 0x0512 /* 16:32 far pointer to 32 bit signed */ #define T_32PFULONG 0x0522 /* 16:32 far pointer to 32 bit unsigned */ /* * 32 bit int types */ #define T_INT4 0x0074 /* 32 bit signed int */ #define T_UINT4 0x0075 /* 32 bit unsigned int */ #define T_PINT4 0x0174 /* near pointer to 32 bit signed int */ #define T_PUINT4 0x0175 /* near pointer to 32 bit unsigned int */ #define T_PFINT4 0x0274 /* far pointer to 32 bit signed int */ #define T_PFUINT4 0x0275 /* far pointer to 32 bit unsigned int */ #define T_PHINT4 0x0374 /* huge pointer to 32 bit signed int */ #define T_PHUINT4 0x0375 /* huge pointer to 32 bit unsigned int */ #define T_32PINT4 0x0474 /* 16:32 near pointer to 32 bit signed int */ #define T_32PUINT4 0x0475 /* 16:32 near pointer to 32 bit unsigned int */ #define T_32PFINT4 0x0574 /* 16:32 far pointer to 32 bit signed int */ #define T_32PFUINT4 0x0575 /* 16:32 far pointer to 32 bit unsigned int */ /* * 64 bit quad types */ #define T_QUAD 0x0013 /* 64 bit signed */ #define T_UQUAD 0x0023 /* 64 bit unsigned */ #define T_PQUAD 0x0113 /* near pointer to 64 bit signed */ #define T_PUQUAD 0x0123 /* near pointer to 64 bit unsigned */ #define T_PFQUAD 0x0213 /* far pointer to 64 bit signed */ #define T_PFUQUAD 0x0223 /* far pointer to 64 bit unsigned */ #define T_PHQUAD 0x0313 /* huge pointer to 64 bit signed */ #define T_PHUQUAD 0x0323 /* huge pointer to 64 bit unsigned */ /* * 64 bit int types */ #define T_INT8 0x0076 /* 64 bit signed int */ #define T_UINT8 0x0077 /* 64 bit unsigned int */ #define T_PINT8 0x0176 /* near pointer to 64 bit signed int */ #define T_PUINT8 0x0177 /* near pointer to 64 bit unsigned int */ #define T_PFINT8 0x0276 /* far pointer to 64 bit signed int */ #define T_PFUINT8 0x0277 /* far pointer to 64 bit unsigned int */ #define T_PHINT8 0x0376 /* huge pointer to 64 bit signed int */ #define T_PHUINT8 0x0377 /* huge pointer to 64 bit unsigned int */ #define T_32PINT8 0x0476 /* 16:32 near pointer to 64 bit signed int */ #define T_32PUINT8 0x0477 /* 16:32 near pointer to 64 bit unsigned int */ #define T_32PFINT8 0x0576 /* 16:32 far pointer to 64 bit signed int */ #define T_32PFUINT8 0x0577 /* 16:32 far pointer to 64 bit unsigned int */ /* * 32 bit real types */ #define T_REAL32 0x0040 /* 32 bit real */ #define T_PREAL32 0x0140 /* near pointer to 32 bit real */ #define T_PFREAL32 0x0240 /* far pointer to 32 bit real */ #define T_PHREAL32 0x0340 /* huge pointer to 32 bit real */ #define T_32PREAL32 0x0440 /* 16:32 near pointer to 32 bit real */ #define T_32PFREAL32 0x0540 /* 16:32 far pointer to 32 bit real */ /* * 48 bit real types */ #define T_REAL48 0x0044 /* 48 bit real */ #define T_PREAL48 0x0144 /* near pointer to 48 bit real */ #define T_PFREAL48 0x0244 /* far pointer to 48 bit real */ #define T_PHREAL48 0x0344 /* huge pointer to 48 bit real */ #define T_32PREAL48 0x0444 /* 16:32 near pointer to 48 bit real */ #define T_32PFREAL48 0x0544 /* 16:32 far pointer to 48 bit real */ /* * 64 bit real types */ #define T_REAL64 0x0041 /* 64 bit real */ #define T_PREAL64 0x0141 /* near pointer to 64 bit real */ #define T_PFREAL64 0x0241 /* far pointer to 64 bit real */ #define T_PHREAL64 0x0341 /* huge pointer to 64 bit real */ #define T_32PREAL64 0x0441 /* 16:32 near pointer to 64 bit real */ #define T_32PFREAL64 0x0541 /* 16:32 far pointer to 64 bit real */ /* * 80 bit real types */ #define T_REAL80 0x0042 /* 80 bit real */ #define T_PREAL80 0x0142 /* near pointer to 80 bit real */ #define T_PFREAL80 0x0242 /* far pointer to 80 bit real */ #define T_PHREAL80 0x0342 /* huge pointer to 80 bit real */ #define T_32PREAL80 0x0442 /* 16:32 near pointer to 80 bit real */ #define T_32PFREAL80 0x0542 /* 16:32 far pointer to 80 bit real */ /* * 128 bit real types */ #define T_REAL128 0x0043 /* 128 bit real */ #define T_PREAL128 0x0143 /* near pointer to 128 bit real */ #define T_PFREAL128 0x0243 /* far pointer to 128 bit real */ #define T_PHREAL128 0x0343 /* huge pointer to 128 bit real */ #define T_32PREAL128 0x0443 /* 16:32 near pointer to 128 bit real */ #define T_32PFREAL128 0x0543 /* 16:32 far pointer to 128 bit real */ /* * 32 bit complex types */ #define T_CPLX32 0x0050 /* 32 bit complex */ #define T_PCPLX32 0x0150 /* near pointer to 32 bit complex */ #define T_PFCPLX32 0x0250 /* far pointer to 32 bit complex */ #define T_PHCPLX32 0x0350 /* huge pointer to 32 bit complex */ #define T_32PCPLX32 0x0450 /* 16:32 near pointer to 32 bit complex */ #define T_32PFCPLX32 0x0550 /* 16:32 far pointer to 32 bit complex */ /* * 48 bit complex types */ #define T_CPLX48 0x0054 /* 48 bit complex */ #define T_PCPLX48 0x0154 /* near pointer to 48 bit complex */ #define T_PFCPLX48 0x0254 /* far pointer to 48 bit complex */ #define T_PHCPLX48 0x0354 /* huge pointer to 48 bit complex */ #define T_32PCPLX48 0x0454 /* 16:32 near pointer to 48 bit complex */ #define T_32PFCPLX48 0x0554 /* 16:32 far pointer to 48 bit complex */ /* * 64 bit complex types */ #define T_CPLX64 0x0051 /* 64 bit complex */ #define T_PCPLX64 0x0151 /* near pointer to 64 bit complex */ #define T_PFCPLX64 0x0251 /* far pointer to 64 bit complex */ #define T_PHCPLX64 0x0351 /* huge pointer to 64 bit complex */ #define T_32PCPLX64 0x0451 /* 16:32 near pointer to 64 bit complex */ #define T_32PFCPLX64 0x0551 /* 16:32 far pointer to 64 bit complex */ /* * 80 bit complex types */ #define T_CPLX80 0x0052 /* 80 bit complex */ #define T_PCPLX80 0x0152 /* near pointer to 80 bit complex */ #define T_PFCPLX80 0x0252 /* far pointer to 80 bit complex */ #define T_PHCPLX80 0x0352 /* huge pointer to 80 bit complex */ #define T_32PCPLX80 0x0452 /* 16:32 near pointer to 80 bit complex */ #define T_32PFCPLX80 0x0552 /* 16:32 far pointer to 80 bit complex */ /* * 128 bit complex types */ #define T_CPLX128 0x0053 /* 128 bit complex */ #define T_PCPLX128 0x0153 /* near pointer to 128 bit complex */ #define T_PFCPLX128 0x0253 /* far pointer to 128 bit complex */ #define T_PHCPLX128 0x0353 /* huge pointer to 128 bit real */ #define T_32PCPLX128 0x0453 /* 16:32 near pointer to 128 bit complex */ #define T_32PFCPLX128 0x0553 /* 16:32 far pointer to 128 bit complex */ /* * boolean types */ #define T_BOOL08 0x0030 /* 8 bit boolean */ #define T_BOOL16 0x0031 /* 16 bit boolean */ #define T_BOOL32 0x0032 /* 32 bit boolean */ #define T_PBOOL08 0x0130 /* near pointer to 8 bit boolean */ #define T_PBOOL16 0x0131 /* near pointer to 16 bit boolean */ #define T_PBOOL32 0x0132 /* near pointer to 32 bit boolean */ #define T_PFBOOL08 0x0230 /* far pointer to 8 bit boolean */ #define T_PFBOOL16 0x0231 /* far pointer to 16 bit boolean */ #define T_PFBOOL32 0x0232 /* far pointer to 32 bit boolean */ #define T_PHBOOL08 0x0330 /* huge pointer to 8 bit boolean */ #define T_PHBOOL16 0x0331 /* huge pointer to 16 bit boolean */ #define T_PHBOOL32 0x0332 /* huge pointer to 32 bit boolean */ #define T_32PBOOL08 0x0430 /* 16:32 near pointer to 8 bit boolean */ #define T_32PFBOOL08 0x0530 /* 16:32 far pointer to 8 bit boolean */ #define T_32PBOOL16 0x0431 /* 16:32 near pointer to 18 bit boolean */ #define T_32PFBOOL16 0x0531 /* 16:32 far pointer to 16 bit boolean */ #define T_32PBOOL32 0x0432 /* 16:32 near pointer to 32 bit boolean */ #define T_32PFBOOL32 0x0532 /* 16:32 far pointer to 32 bit boolean */ #define T_NCVPTR 0x01f0 /* CV Internal type for created near pointers */ #define T_FCVPTR 0x02f0 /* CV Internal type for created far pointers */ #define T_HCVPTR 0x03f0 /* CV Internal type for created huge pointers */ /** No leaf index can have a value of 0x0000. The leaf indices are * separated into ranges depending upon the use of the type record. * The second range is for the type records that are directly referenced * in symbols. The first range is for type records that are not * referenced by symbols but instead are referenced by other type * records. All type records must have a starting leaf index in these * first two ranges. The third range of leaf indices are used to build * up complex lists such as the field list of a class type record. No * type record can begin with one of the leaf indices. The fourth ranges * of type indices are used to represent numeric data in a symbol or * type record. These leaf indices are greater than 0x8000. At the * point that type or symbol processor is expecting a numeric field, the * next two bytes in the type record are examined. If the value is less * than 0x8000, then the two bytes contain the numeric value. If the * value is greater than 0x8000, then the data follows the leaf index in * a format specified by the leaf index. The final range of leaf indices * are used to force alignment of subfields within a complex type record.. */ /* * leaf indices starting records but referenced from symbol records */ #define LF_MODIFIER 0x0001 #define LF_POINTER 0x0002 #define LF_ARRAY 0x0003 #define LF_CLASS 0x0004 #define LF_STRUCTURE 0x0005 #define LF_UNION 0x0006 #define LF_ENUM 0x0007 #define LF_PROCEDURE 0x0008 #define LF_MFUNCTION 0x0009 #define LF_VTSHAPE 0x000a #define LF_COBOL0 0x000b #define LF_COBOL1 0x000c #define LF_BARRAY 0x000d #define LF_LABEL 0x000e #define LF_NULL 0x000f #define LF_NOTTRAN 0x0010 #define LF_DIMARRAY 0x0011 #define LF_VFTPATH 0x0012 #define LF_PRECOMP 0x0013 /* not refereced from symbol */ #define LF_ENDPRECOMP 0x0014 /* not refereced from symbol */ /* * leaf indices starting records but referenced only from type records */ #define LF_SKIP 0x0200 #define LF_ARGLIST 0x0201 #define LF_DEFARG 0x0202 #define LF_LIST 0x0203 #define LF_FIELDLIST 0x0204 #define LF_DERIVED 0x0205 #define LF_BITFIELD 0x0206 #define LF_METHODLIST 0x0207 #define LF_DIMCONU 0x0208 #define LF_DIMCONLU 0x0209 #define LF_DIMVARU 0x020a #define LF_DIMVARLU 0x020b #define LF_REFSYM 0x020c #define LF_BCLASS 0x0400 #define LF_VBCLASS 0x0401 #define LF_IVBCLASS 0x0402 #define LF_ENUMERATE 0x0403 #define LF_FRIENDFCN 0x0404 #define LF_INDEX 0x0405 #define LF_MEMBER 0x0406 #define LF_STMEMBER 0x0407 #define LF_METHOD 0x0408 #define LF_NESTTYPE 0x0409 #define LF_VFUNCTAB 0x040a #define LF_FRIENDCLS 0x040b #define LF_NUMERIC 0x8000 #define LF_CHAR 0x8000 #define LF_SHORT 0x8001 #define LF_USHORT 0x8002 #define LF_LONG 0x8003 #define LF_ULONG 0x8004 #define LF_REAL32 0x8005 #define LF_REAL64 0x8006 #define LF_REAL80 0x8007 #define LF_REAL128 0x8008 #define LF_QUADWORD 0x8009 #define LF_UQUADWORD 0x800a #define LF_REAL48 0x800b #define LF_PAD0 0xf0 #define LF_PAD1 0xf1 #define LF_PAD2 0xf2 #define LF_PAD3 0xf3 #define LF_PAD4 0xf4 #define LF_PAD5 0xf5 #define LF_PAD6 0xf6 #define LF_PAD7 0xf7 #define LF_PAD8 0xf8 #define LF_PAD9 0xf9 #define LF_PAD10 0xfa #define LF_PAD11 0xfb #define LF_PAD12 0xfc #define LF_PAD13 0xfd #define LF_PAD14 0xfe #define LF_PAD15 0xff /* * end of leaf indices */ /* * Type enum for pointer records * Pointers can be one of the following types */ typedef enum CV_ptrtype_e { CV_PTR_NEAR = 0x00, /* near pointer */ CV_PTR_FAR = 0x01, /* far pointer */ CV_PTR_HUGE = 0x02, /* huge pointer */ CV_PTR_BASE_SEG = 0x03, /* based on segment */ CV_PTR_BASE_VAL = 0x04, /* based on value of base */ CV_PTR_BASE_SEGVAL = 0x05, /* based on segment value of base */ CV_PTR_BASE_ADDR = 0x06, /* based on address of base */ CV_PTR_BASE_SEGADDR = 0x07, /* based on segment address of base */ CV_PTR_BASE_TYPE = 0x08, /* based on type */ CV_PTR_BASE_SELF = 0x09, /* based on self */ CV_PTR_NEAR32 = 0x0a, /* 16:32 near pointer */ CV_PTR_FAR32 = 0x0b, /* 16:32 far pointer */ CV_PTR_UNUSEDPTR = 0x0c /* first unused pointer type */ } CV_ptrtype_e; /* * Mode enum for pointers * Pointers can have one of the following modes */ typedef enum CV_ptrmode_e { CV_PTR_MODE_PTR = 0x00, /* "normal" pointer */ CV_PTR_MODE_REF = 0x01, /* reference */ CV_PTR_MODE_PMEM = 0x02, /* pointer to data member */ CV_PTR_MODE_PMFUNC = 0x03, /* pointer to member function */ CV_PTR_MODE_RESERVED= 0x04 /* first unused pointer mode */ } CV_ptrmode_e; /* * Enumeration for function call type */ typedef enum CV_call_e { CV_CALL_NEAR_C = 0x00, /* near right to left push, caller pops stack */ CV_CALL_FAR_C = 0x01, /* far right to left push, caller pops stack */ CV_CALL_NEAR_PASCAL = 0x02, /* near left to right push, callee pops stack */ CV_CALL_FAR_PASCAL = 0x03, /* far left to right push, callee pops stack */ CV_CALL_NEAR_FAST = 0x04, /* near left to right push with regs, callee pops stack */ CV_CALL_FAR_FAST = 0x05, /* far left to right push with regs, callee pops stack */ CV_CALL_PCODE = 0x06, /* pcode */ CV_CALL_NEAR_STD = 0x07, /* near standard call */ CV_CALL_FAR_STD = 0x08, /* far standard call */ CV_CALL_NEAR_SYS = 0x09, /* near sys call */ CV_CALL_FAR_SYS = 0x0a, /* far sys call */ CV_CALL_THISCALL = 0x0b, /* this call (this passed in register) */ CV_CALL_MIPSCALL = 0x0c, /* Mips call */ CV_CALL_RESERVED = 0x0d /* first unused call enumeration */ } CV_call_e; /* * Values for the access protection of class attributes */ typedef enum CV_access_e { CV_private = 1, CV_protected = 2, CV_public = 3 } CV_access_e; /* * enumeration for method properties */ typedef enum CV_methodprop_e { CV_MTvanilla = 0x00, CV_MTvirtual = 0x01, CV_MTstatic = 0x02, CV_MTfriend = 0x03, CV_MTintro = 0x04, CV_MTpurevirt = 0x05, CV_MTpureintro = 0x06 } CV_methodprop_e; /* * enumeration for virtual shape table entries */ typedef enum CV_VTS_desc_e { CV_VTS_near = 0x00, CV_VTS_far = 0x01, CV_VTS_thin = 0x02, CV_VTS_outer = 0x03, CV_VTS_meta = 0x04, CV_VTS_unused = 0x05 } CV_VTS_desc_e; /* * enumeration for LF_LABEL address modes */ typedef enum CV_LABEL_TYPE_e { CV_LABEL_NEAR = 0, /* near return */ CV_LABEL_FAR = 4 /* far return */ } CV_LABEL_TYPE_e; /* * enumeration for LF_MODIFIER values */ typedef struct CV_modifier_t { unsigned short MOD_const :1; unsigned short MOD_volatile :1; unsigned short MOD_unused :14; } CV_modifier_t; /* * bit field structure describing class/struct/union/enum properties */ typedef struct CV_prop_t { unsigned short packed :1; /* structure is packed */ unsigned short ctor :1; /* constructors or destructors present */ unsigned short ovlops :1; /* overloaded operators present */ unsigned short isnested :1; /* this is a nested class */ unsigned short cnested :1; /* this class contains nested types */ unsigned short opassign :1; /* overloaded assignment (=) */ unsigned short opcast :1; /* casting methods */ unsigned short fwdref :1; /* forward reference (incomplete defn) */ unsigned short scoped :1; /* scoped definition */ unsigned short reserved :7; } CV_prop_t; /* * class field attribute */ typedef struct CV_fldattr_t { unsigned short access :2; /* access protection CV_access_t */ unsigned short mprop :3; /* method properties CV_methodprop_t */ unsigned short pseudo :1; /* compiler generated fcn and does not exist */ unsigned short noinherit :1; /* true if class cannot be inherited */ unsigned short noconstruct :1; /* true if class cannot be constructed */ unsigned short unused :8; /* unused */ } CV_fldattr_t; /* * Structures to access to the type records */ typedef struct TYPTYPE { unsigned short len; unsigned short leaf; #ifdef CV unsigned char data[]; #else unsigned char data[1]; #endif } TYPTYPE; /* general types record */ typedef enum CV_PMEMBER { CV_PDM16_NONVIRT = 0x00, /* 16:16 data no virtual fcn or base (null = -1) */ CV_PDM16_VFCN = 0x01, /* 16:16 data with virtual functions null = 0 */ CV_PDM16_VBASE = 0x02, /* 16:16 data with virtual bases null = (,,-1) */ CV_PDM32_NVVFCN = 0x03, /* 16:32 data w/wo virtual functions null = 0x80000000 */ CV_PDM32_VBASE = 0x04, /* 16:32 data with virtual bases (,,-1L) */ CV_PMF16_NEARNVSA = 0x05, /* 16:16 near method nonvirtual single address point */ CV_PMF16_NEARNVMA = 0x06, /* 16:16 near method nonvirtual multiple address points */ CV_PMF16_NEARVBASE = 0x07, /* 16:16 near method virtual bases */ CV_PMF16_FARNVSA = 0x08, /* 16:16 far method nonvirtual single address point */ CV_PMF16_FARNVMA = 0x09, /* 16:16 far method nonvirtual multiple address points */ CV_PMF16_FARVBASE = 0x0a, /* 16:16 far method virtual bases */ CV_PMF32_NVSA = 0x0b, /* 16:32 method nonvirtual single address point */ CV_PMF32_NVMA = 0x0c, /* 16:32 method nonvirtual multiple address point */ CV_PMF32_VBASE = 0x0d /* 16:32 method virtual bases */ } CV_PMEMBER; /* * memory representation of pointer to member. These representations are * indexed by the enumeration above in the LF_POINTER record */ /* representation of a 16:16 pointer to data for a class with no * virtual functions or virtual bases */ struct CV_PDMR16_NONVIRT { CV_off16_t mdisp; /* displacement to data (NULL = -1) */ }; /* * representation of a 16:16 pointer to data for a class with virtual * functions */ struct CV_PMDR16_VFCN { CV_off16_t mdisp; /* displacement to data ( NULL = 0) */ }; /* * representation of a 16:16 pointer to data for a class with * virtual bases */ struct CV_PDMR16_VBASE { CV_off16_t mdisp; /* displacement to data */ CV_off16_t pdisp; /* this pointer displacement to vbptr */ CV_off16_t vdisp; /* displacement within vbase table */ }; /* * representation of a 16:32 near pointer to data for a class with * or without virtual functions and no virtual bases */ struct CV_PDMR32_NVVFCN { CV_off32_t mdisp; /* displacement to data (NULL = 0x80000000) */ }; /* * representation of a 16:32 near pointer to data for a class * with virtual bases */ struct CV_PDMR32_VBASE { CV_off32_t mdisp; /* displacement to data */ CV_off32_t pdisp; /* this pointer displacement */ CV_off32_t vdisp; /* vbase table displacement */ }; /* * representation of a 16:16 pointer to near member function for a * class with no virtual functions or bases and a single address point */ struct CV_PMFR16_NEARNVSA { CV_uoff16_t off; /* near address of function (NULL = 0) */ }; /* * representation of a 16:16 pointer to far member function for a * class with no virtual bases and a single address point */ struct CV_PMFR16_FARNVSA { CV_uoff16_t off; /* offset of function (NULL = 0:0) */ unsigned short seg; /* segment of function */ }; /* * representation of a 16:16 near pointer to member functions of an * class with no virtual bases and multiple address points */ struct CV_PMFR16_NEARNVMA { CV_uoff16_t off; /* offset of function (NULL = 0,x) */ signed short disp; }; /* * representation of a 16:16 far pointer to member functions of a * class with no virtual bases and multiple address points */ struct CV_PMFR16_FARNVMA { CV_uoff16_t off; /* offset of function (NULL = 0:0,x) */ unsigned short seg; signed short disp; }; /* * representation of a 16:16 near pointer to member function of a * class with virtual bases */ struct CV_PMFR16_NEARVBASE { CV_uoff16_t off; /* offset of function (NULL = 0,x,x,x) */ CV_off16_t mdisp; /* displacement to data */ CV_off16_t pdisp; /* this pointer displacement */ CV_off16_t vdisp; /* vbase table displacement */ }; /* * representation of a 16:16 far pointer to member function of a * class with virtual bases */ struct CV_PMFR16_FARVBASE { CV_uoff16_t off; /* offset of function (NULL = 0:0,x,x,x) */ unsigned short seg; CV_off16_t mdisp; /* displacement to data */ CV_off16_t pdisp; /* this pointer displacement */ CV_off16_t vdisp; /* vbase table displacement */ }; /* * representation of a 16:32 near pointer to member function for a * class with no virtual bases and a single address point */ struct CV_PMFR32_NVSA { CV_uoff32_t off; /* near address of function (NULL = 0L) */ }; /* * representation of a 16:32 near pointer to member function for a * class with no virtual bases and multiple address points */ struct CV_PMFR32_NVMA { CV_uoff32_t off; /* near address of function (NULL = 0L,x) */ CV_off32_t disp; }; /* * representation of a 16:32 near pointer to member function for a * class with virtual bases */ struct CV_PMFR32_VBASE { CV_uoff32_t off; /* near address of function (NULL = 0L,x,x,x) */ CV_off32_t mdisp; /* displacement to data */ CV_off32_t pdisp; /* this pointer displacement */ CV_off32_t vdisp; /* vbase table displacement */ }; /* * Easy leaf - used for generic casting to reference leaf field * of a subfield of a complex list */ typedef struct lfEasy { unsigned short leaf; /* LF_... */ } lfEasy; /* The following type records are basically variant records of the * above structure. The "unsigned short leaf" of the above structure and * the "unsigned short leaf" of the following type definitions are the * same symbol. When the OMF record is locked via the MHOMFLock API * call, the address of the "unsigned short leaf" is returned */ /* * Type record for LF_MODIFIER */ typedef struct lfModifier { unsigned short leaf; /* LF_MODIFIER */ CV_modifier_t attr; /* modifier attribute modifier_t */ CV_typ_t type; /* modified type */ } lfModifier; /* * type record for LF_POINTER */ typedef struct lfPointer { struct lfPointerBody { unsigned short leaf; /* LF_POINTER */ struct { unsigned char ptrtype :5; /* ordinal specifying pointer type (ptrtype-t) */ unsigned char ptrmode :3; /* ordinal specifying pointer mode (ptrmode_t) */ unsigned char isflat32 :1; /* true if 0:32 pointer */ unsigned char isvolatile :1; /* TRUE if volatile pointer */ unsigned char isconst :1; /* TRUE if const pointer */ unsigned char unused :5; } attr; CV_typ_t utype; /* type index of the underlying type */ } u; union { struct { CV_typ_t pmclass; /* index of containing class for pointer to member */ unsigned short pmenum; /* enumeration specifying pm format */ } pm; unsigned short bseg; /* base segment if PTR_BASE_SEG */ unsigned char Sym[1]; /* copy of base symbol record (including length) */ struct { unsigned short index; /* type index if CV_PTR_BASE_TYPE */ unsigned char name[1]; /* name of base type */ } btype; } pbase; } lfPointer; /* * type record for LF_ARRAY */ typedef struct lfArray { unsigned short leaf; /* LF_ARRAY */ CV_typ_t elemtype; /* type index of element type */ CV_typ_t idxtype; /* type index of indexing type */ unsigned char data[]; /* variable length data specifying */ /* size in bytes and name */ } lfArray; /* * type record for LF_CLASS, LF_STRUCTURE */ typedef struct lfClass { unsigned short leaf; /* LF_CLASS, LF_STRUCT */ unsigned short count; /* count of number of elements in class */ CV_typ_t field; /* type index of LF_FIELD descriptor list */ CV_prop_t property; /* property attribute field (prop_t) */ CV_typ_t derived; /* type index of derived from list if not zero */ CV_typ_t vshape; /* type index of vshape table for this class */ unsigned char data[]; /* data describing length of structure in */ /* bytes and name */ } lfClass; typedef lfClass lfStructure; /* * type record for LF_UNION */ typedef struct lfUnion { unsigned short leaf; /* LF_UNION */ unsigned short count; /* count of number of elements in class */ CV_typ_t field; /* type index of LF_FIELD descriptor list */ CV_prop_t property; /* property attribute field */ unsigned char data[]; /* variable length data describing length of */ /* structure and name */ } lfUnion; /* * type record for LF_ENUM */ typedef struct lfEnum { unsigned short leaf; /* LF_ENUM */ unsigned short count; /* count of number of elements in class */ CV_typ_t utype; /* underlying type of the enum */ CV_typ_t field; /* type index of LF_FIELD descriptor list */ CV_prop_t property; /* property attribute field */ unsigned char Name[1]; /* length prefixed name of enum */ } lfEnum; /* * Type record for LF_PROCEDURE */ typedef struct lfProc { unsigned short leaf; /* LF_PROCEDURE */ CV_typ_t rvtype; /* type index of return value */ unsigned char calltype; /* calling convention (call_t) */ unsigned char reserved; /* reserved for future use */ unsigned short parmcount; /* number of parameters */ CV_typ_t arglist; /* type index of argument list */ } lfProc; /* * Type record for member function */ typedef struct lfMFunc { unsigned short leaf; /* LF_MFUNCTION */ CV_typ_t rvtype; /* type index of return value */ CV_typ_t classtype; /* type index of containing class */ CV_typ_t thistype; /* type index of this pointer (model specific) */ unsigned char calltype; /* calling convention (call_t) */ unsigned char reserved; /* reserved for future use */ unsigned short parmcount; /* number of parameters */ CV_typ_t arglist; /* type index of argument list */ long thisadjust; /* this adjuster (long because pad required anyway) */ } lfMFunc; /* * type record for virtual function table shape */ typedef struct lfVTShape { unsigned short leaf; /* LF_VTSHAPE */ unsigned short count; /* number of entries in vfunctable */ unsigned char desc[]; /* variable number of 4 bit (VTS_desc) descriptors */ } lfVTShape; /* * type record for cobol0 */ typedef struct lfCobol0 { unsigned short leaf; /* LF_COBOL0 */ CV_typ_t type; unsigned char data[]; } lfCobol0; /* * type record for cobol1 */ typedef struct lfCobol1 { unsigned short leaf; /* LF_COBOL1 */ unsigned char data[]; } lfCobol1; /* * type record for basic array */ typedef struct lfBArray { unsigned short leaf; /* LF_BARRAY */ CV_typ_t utype; /* type index of underlying type */ } lfBArray; /* * type record for assembler labels */ typedef struct lfLabel { unsigned short leaf; /* LF_LABEL */ unsigned short mode; /* addressing mode of label */ } lfLabel; /* * type record for dimensioned arrays */ typedef struct lfDimArray { unsigned short leaf; /* LF_DIMARRAY */ CV_typ_t utype; /* underlying type of the array */ CV_typ_t diminfo; /* dimension information */ char name[1]; /* length prefixed name */ } lfDimArray; /* * type record describing path to virtual function table */ typedef struct lfVFTPath { unsigned short leaf; /* LF_VFTPATH */ unsigned short count; /* count of number of bases in path */ CV_typ_t base[1]; /* bases from root to leaf */ } lfVFTPath; /* * type record describing inclusion of precompiled types */ typedef struct lfPreComp { unsigned short leaf; /* LF_PRECOMP */ unsigned short start; /* starting type index included */ unsigned short count; /* number of types in inclusion */ unsigned long signature; /* signature */ unsigned char name[]; /* length prefixed name of included type file */ } lfPreComp; /* * type record describing end of precompiled types that will be * included by another file */ typedef struct lfEndPreComp { unsigned short leaf; /* LF_ENDPRECOMP */ unsigned long signature; /* signature */ } lfEndPreComp; /* * description of type records that can be referenced from * type records referenced by symbols */ /* * type record for skip record */ typedef struct lfSkip { unsigned short leaf; /* LF_SKIP */ CV_typ_t type; /* next valid index */ unsigned char data[]; /* pad data */ } lfSkip; /* * argument list leaf */ typedef struct lfArgList { unsigned short leaf; /* LF_ARGLIST */ unsigned short count; /* number of arguments */ CV_typ_t arg[]; /* number of arguments */ } lfArgList; /* * derived class list leaf */ typedef struct lfDerived { unsigned short leaf; /* LF_DERIVED */ unsigned short count; /* number of arguments */ CV_typ_t drvdcls[]; /* type indices of derived classes */ } lfDerived; /* * leaf for default arguments */ typedef struct lfDefArg { unsigned short leaf; /* LF_DEFARG */ CV_typ_t type; /* type of resulting expression */ unsigned char expr[]; /* length prefixed expression string */ } lfDefArg; /* * list leaf * This list should no longer be used because the utilities cannot * verify the contents of the list without knowing what type of list * it is. New specific leaf indices should be used instead. */ typedef struct lfList { unsigned short leaf; /* LF_LIST */ char data[]; /* data format specified by indexing type */ } lfList; /* * field list leaf * This is the header leaf for a complex list of class and structure * subfields. */ typedef struct lfFieldList { unsigned short leaf; /* LF_FIELDLIST */ char data[]; /* field list sub lists */ } lfFieldList; /* * type record for non-static methods and friends in method list */ typedef struct mlMethod { CV_fldattr_t attr; /* method attribute */ CV_typ_t index; /* index to type record for procedure */ #ifdef CV unsigned long vbaseoff[0]; /* offset in vfunctable if intro virtual */ #else unsigned long vbaseoff[1]; #endif } mlMethod; typedef struct lfMethodList { unsigned short leaf; unsigned char mList[]; /* really a mlMethod type */ } lfMethodList; /* * type record for LF_BITFIELD */ typedef struct lfBitfield { unsigned short leaf; /* LF_BITFIELD */ unsigned char length; unsigned char position; CV_typ_t type; /* type of bitfield */ } lfBitfield; /* * type record for dimensioned array with constant bounds */ typedef struct lfDimCon { unsigned short leaf; /* LF_DIMCONU or LF_DIMCONLU */ unsigned short rank; /* number of dimensions */ CV_typ_t typ; /* type of index */ unsigned char dim[]; /* array of dimension information with */ /* either upper bounds or lower/upper bound */ } lfDimCon; /* * type record for dimensioned array with variable bounds */ typedef struct lfDimVar { unsigned short leaf; /* LF_DIMVARU or LF_DIMVARLU */ unsigned short rank; /* number of dimensions */ CV_typ_t typ; /* type of index */ unsigned char dim[]; /* array of type indices for either */ /* variable upper bound or variable */ /* lower/upper bound. The referenced */ /* types must be LF_REFSYM or T_VOID */ } lfDimVar; /* * type record for referenced symbol */ typedef struct lfRefSym { unsigned short leaf; /* LF_REFSYM */ unsigned char Sym[1]; /* copy of referenced symbol record */ /* (including length) */ } lfRefSym; /** the following are numeric leaves. They are used to indicate the * size of the following variable length data. When the numeric * data is a single byte less than 0x8000, then the data is output * directly. If the data is more the 0x8000 or is a negative value, * then the data is preceeded by the proper index. */ /* signed character leaf */ typedef struct lfChar { unsigned short leaf; /* LF_CHAR */ signed char val; /* signed 8-bit value */ } lfChar; /* signed short leaf */ typedef struct lfShort { unsigned short leaf; /* LF_SHORT */ short val; /* signed 16-bit value */ } lfShort; /* unsigned short leaf */ typedef struct lfUShort { unsigned short leaf; /* LF_unsigned short */ unsigned short val; /* unsigned 16-bit value */ } lfUShort; /* signed long leaf */ typedef struct lfLong { unsigned short leaf; /* LF_LONG */ long val; /* signed 32-bit value */ } lfLong; /* unsigned long leaf */ typedef struct lfULong { unsigned short leaf; /* LF_ULONG */ unsigned long val; /* unsigned 32-bit value */ } lfULong; /* real 32-bit leaf */ typedef struct lfReal32 { unsigned short leaf; /* LF_REAL32 */ float val; /* 32-bit real value */ } lfReal32; /* real 48-bit leaf */ typedef struct lfReal48 { unsigned short leaf; /* LF_REAL48 */ unsigned char val[6]; /* 48-bit real value */ } lfReal48; /* real 64-bit leaf */ typedef struct lfReal64 { unsigned short leaf; /* LF_REAL64 */ double val; /* 64-bit real value */ } lfReal64; /* real 80-bit leaf */ typedef struct lfReal80 { unsigned short leaf; /* LF_REAL80 */ FLOAT10 val; /* real 80-bit value */ } lfReal80; /* real 128-bit leaf */ typedef struct lfReal128 { unsigned short leaf; /* LF_REAL128 */ char val[16]; /* real 128-bit value */ } lfReal128; /************************************************************************/ /* index leaf - contains type index of another leaf */ /* a major use of this leaf is to allow the compilers to emit a */ /* long complex list (LF_FIELD) in smaller pieces. */ typedef struct lfIndex { unsigned short leaf; /* LF_INDEX */ CV_typ_t index; /* type index of referenced leaf */ } lfIndex; /* subfield record for base class field */ typedef struct lfBClass { unsigned short leaf; /* LF_BCLASS */ CV_typ_t index; /* type index of base class */ CV_fldattr_t attr; /* attribute */ unsigned char offset[]; /* variable length offset of base within class */ } lfBClass; /* subfield record for direct and indirect virtual base class field */ typedef struct lfVBClass { unsigned short leaf; /* LF_VBCLASS | LV_IVBCLASS */ CV_typ_t index; /* type index of direct virtual base class */ CV_typ_t vbptr; /* type index of virtual base pointer */ CV_fldattr_t attr; /* attribute */ unsigned char vbpoff[]; /* virtual base pointer offset from address point */ /* followed by virtual base offset from vbtable */ } lfVBClass; /* subfield record for friend class */ typedef struct lfFriendCls { unsigned short leaf; /* LF_FRIENDCLS */ CV_typ_t index; /* index to type record of friend class */ } lfFriendCls; /* subfield record for friend function */ typedef struct lfFriendFcn { unsigned short leaf; /* LF_FRIENDFCN */ CV_typ_t index; /* index to type record of friend function */ char Name[1]; /* name of friend function */ } lfFriendFcn; /* subfield record for non-static data members */ typedef struct lfMember { unsigned short leaf; /* LF_MEMBER */ CV_typ_t index; /* index of type record for field */ CV_fldattr_t attr; /* attribute mask */ unsigned char offset[]; /* variable length offset of field followed */ /* by length prefixed name of field */ } lfMember; /* type record for static data members */ typedef struct lfSTMember { unsigned short leaf; /* LF_STMEMBER */ CV_typ_t index; /* index of type record for field */ CV_fldattr_t attr; /* attribute mask */ char Name[1]; /* length prefixed name of field */ } lfSTMember; /* subfield record for virtual function table pointer */ typedef struct lfVFuncTab { unsigned short leaf; /* LF_VFUNCTAB */ CV_typ_t type; /* type index of pointer */ } lfVFuncTab; /* subfield record for method and friend list */ typedef struct lfMethod { unsigned short leaf; /* LF_METHOD */ unsigned short count; /* number of occurances of function */ CV_typ_t mList; /* index to LF_METHODLIST record */ char Name[1]; /* length prefixed name of method */ } lfMethod; /* subfield record for enumerate */ typedef struct lfEnumerate { unsigned short leaf; /* LF_ENUMERATE */ CV_fldattr_t attr; /* access (ACC_...) */ unsigned char value[]; /* variable length value field followed */ /* by length prefixed name */ } lfEnumerate; /* type record for nested (scoped) type definition */ typedef struct lfNestType { unsigned short leaf; /* LF_NESTTYPE */ CV_typ_t index; /* index of nested type definition */ unsigned char Name[1]; /* length prefixed type name */ } lfNestType; /* type record for pad leaf */ typedef struct lfPad { unsigned char leaf; } SYM_PAD; /* Symbol definitions */ typedef enum SYM_ENUM_e { S_COMPILE = 0x0001, /* Compile flags symbol */ S_REGISTER = 0x0002, /* Register variable */ S_CONSTANT = 0x0003, /* constant symbol */ S_UDT = 0x0004, /* User defined type */ S_SSEARCH = 0x0005, /* Start Search */ S_END = 0x0006, /* Block, procedure, "with" or thunk end */ S_SKIP = 0x0007, /* Reserve symbol space in $$Symbols table */ S_CVRESERVE = 0x0008, /* Reserve symbol for CV internal use */ S_OBJNAME = 0x0009, /* path to object file name */ S_ENDARG = 0x000a, /* end of argument list */ S_COBOLUDT = 0x000b, /* special UDT for cobol -- not packed */ S_BPREL16 = 0x0100, /* BP-relative */ S_LDATA16 = 0x0101, /* Module-local symbol */ S_GDATA16 = 0x0102, /* Global data symbol */ S_PUB16 = 0x0103, /* a public symbol */ S_LPROC16 = 0x0104, /* Local procedure start */ S_GPROC16 = 0x0105, /* Global procedure start */ S_THUNK16 = 0x0106, /* Thunk Start */ S_BLOCK16 = 0x0107, /* block start */ S_WITH16 = 0x0108, /* with start */ S_LABEL16 = 0x0109, /* code label */ S_CEXMODEL16 = 0x010a, /* change execution model */ S_VFTABLE16 = 0x010b, /* address of virtual function table */ S_REGREL16 = 0x010c, /* register relative address */ S_BPREL32 = 0x0200, /* BP-relative */ S_LDATA32 = 0x0201, /* Module-local symbol */ S_GDATA32 = 0x0202, /* Global data symbol */ S_PUB32 = 0x0203, /* a public symbol (CV internal reserved) */ S_LPROC32 = 0x0204, /* Local procedure start */ S_GPROC32 = 0x0205, /* Global procedure start */ S_THUNK32 = 0x0206, /* Thunk Start */ S_BLOCK32 = 0x0207, /* block start */ S_WITH32 = 0x0208, /* with start */ S_LABEL32 = 0x0209, /* code label */ S_CEXMODEL32 = 0x020a, /* change execution model */ S_VFTABLE32 = 0x020b, /* address of virtual function table */ S_REGREL32 = 0x020c, /* register relative address */ S_LPROCMIPS = 0x0300, /* Local procedure start */ S_GPROCMIPS = 0x0301 /* Global procedure start */ } SYM_ENUM_e; /* enum describing the compile flag source language */ typedef enum { CV_CFL_C = 0x00, CV_CFL_CXX = 0x01, CV_CFL_FORTRAN = 0x02, CV_CFL_MASM = 0x03, CV_CFL_PASCAL = 0x04, CV_CFL_BASIC = 0x05, CV_CFL_COBOL = 0x06 } CV_CFL_LANG; /* enum describing target processor */ typedef enum CV_CPU_TYPE_e { CV_CFL_8080 = 0x00, CV_CFL_8086 = 0x01, CV_CFL_80286 = 0x02, CV_CFL_80386 = 0x03, CV_CFL_80486 = 0x04, CV_CFL_MIPSR4000 = 0x10, CV_CFL_M68000 = 0x20, CV_CFL_M68010 = 0x21, CV_CFL_M68020 = 0x22, CV_CFL_M68030 = 0x23, CV_CFL_M68040 = 0x24 } CV_CPU_TYPE_e; /* enum describing compile flag ambiant data model */ typedef enum { CV_CFL_DNEAR = 0x00, CV_CFL_DFAR = 0x01, CV_CFL_DHUGE = 0x02 } CV_CFL_DATA; /* enum describing compile flag ambiant code model */ typedef enum CV_CFL_CODE_e { CV_CFL_CNEAR = 0x00, CV_CFL_CFAR = 0x01, CV_CFL_CHUGE = 0x02 } CV_CFL_CODE_e; /* enum describing compile flag target floating point package */ typedef enum CV_CFL_FPKG_e { CV_CFL_NDP = 0x00, CV_CFL_EMU = 0x01, CV_CFL_ALT = 0x02 } CV_CFL_FPKG_e; typedef struct SYMTYPE { unsigned short reclen; /* Record length */ unsigned short rectyp; /* Record type */ char data[]; } SYMTYPE; /* * cobol information --- */ typedef enum CV_COBOL_e { CV_COBOL_dontstop, CV_COBOL_pfm, CV_COBOL_false, CV_COBOL_extcall } CV_COBOL_e; struct { unsigned short subtype; /* see CV_COBOL_e above */ unsigned short flag; } cobol; /* non-model specific symbol types */ typedef struct REGSYM { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_REGISTER */ unsigned short typind; /* Type index */ unsigned short reg; /* register enumerate */ unsigned char name[1]; /* Length-prefixed name */ } REGSYM; typedef struct CONSTSYM { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_CONSTANT */ CV_typ_t typind; /* Type index (containing enum if enumerate) */ unsigned short value; /* numeric leaf containing value */ unsigned char name[]; /* Length-prefixed name */ } CONSTSYM; typedef struct UDTSYM { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_UDT |S_COBOLUDT */ CV_typ_t typind; /* Type index */ unsigned char name[1]; /* Length-prefixed name */ } UDTSYM; typedef struct SEARCHSYM { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_SSEARCH */ unsigned long startsym; /* offset of the procedure */ unsigned short seg; /* segment of symbol */ } SEARCHSYM; typedef struct CFLAGSYM { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_COMPILE */ unsigned char machine; /* target processor */ struct { unsigned char language :8; /* language index */ unsigned char pcode :1; /* true if pcode present */ unsigned char floatprec :2; /* floating precision */ unsigned char floatpkg :2; /* float package */ unsigned char ambdata :3; /* ambiant data model */ unsigned char ambcode :3; /* ambiant code model */ unsigned char mode32 :1; /* true if compiled 32 bit mode */ unsigned char pad :4; /* reserved */ } flags; unsigned char ver[1]; /* Length-prefixed compiler version string */ } CFLAGSYM; typedef struct OBJNAMESYM { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_OBJNAME */ unsigned long signature; /* signature */ unsigned char name[1]; /* Length-prefixed name */ } OBJNAMESYM; /* symbol types for 16:16 memory model */ typedef struct BPRELSYM16 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_BPREL16 */ CV_off16_t off; /* BP-relative offset */ CV_typ_t typind; /* Type index */ unsigned char name[1]; /* Length-prefixed name */ } BPRELSYM16; typedef struct DATASYM16 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_LDATA16 or S_GDATA16 or S_PUB16 */ CV_uoff16_t off; /* offset of symbol */ unsigned short seg; /* segment of symbol */ CV_typ_t typind; /* Type index */ unsigned char name[1]; /* Length-prefixed name */ } DATASYM16; typedef DATASYM16 PUBSYM16; typedef struct PROCSYM16 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_GPROC16 or S_LPROC16 */ unsigned long pParent; /* pointer to the parent */ unsigned long pEnd; /* pointer to this blocks end */ unsigned long pNext; /* pointer to next symbol */ unsigned short len; /* Proc length */ unsigned short DbgStart; /* Debug start offset */ unsigned short DbgEnd; /* Debug end offset */ CV_uoff16_t off; /* offset of symbol */ unsigned short seg; /* segment of symbol */ CV_typ_t typind; /* Type index */ char rtntyp; /* Return type (NEAR/FAR) */ unsigned char name[1]; /* Length-prefixed name */ } PROCSYM16; typedef struct THUNKSYM16 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_THUNK16 */ unsigned long pParent; /* pointer to the parent */ unsigned long pEnd; /* pointer to this blocks end */ unsigned long pNext; /* pointer to next symbol */ CV_uoff16_t off; /* offset of symbol */ unsigned short seg; /* segment of symbol */ unsigned short len; /* length of thunk */ unsigned char ord; /* ordinal specifying type of thunk */ unsigned char name[1]; /* name of thunk */ #ifdef CV unsigned char variant[0]; /* variant portion of thunk */ #else unsigned char variant[1]; /* variant portion of thunk */ #endif } THUNKSYM16; typedef enum { THUNK_ORDINAL_NOTYPE, THUNK_ORDINAL_ADJUSTOR, THUNK_ORDINAL_VCALL } THUNK_ORDINAL; typedef struct LABELSYM16 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_LABEL16 */ CV_uoff16_t off; /* offset of symbol */ unsigned short seg; /* segment of symbol */ char rtntyp; /* Return type (NEAR/FAR) */ unsigned char name[1]; /* Length-prefixed name */ } LABELSYM16; typedef enum CV_RETURN_TYPE_e { CV_RETURN_NEAR = 0, /* near return */ CV_RETURN_FAR = 4 /* far return */ } CV_RETURN_TYPE_e; typedef struct BLOCKSYM16 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_BLOCK16 */ unsigned long pParent; /* pointer to the parent */ unsigned long pEnd; /* pointer to this blocks end */ unsigned short len; /* Block length */ CV_uoff16_t off; /* offset of symbol */ unsigned short seg; /* segment of symbol */ unsigned char name[1]; /* Length-prefixed name */ } BLOCKSYM16; typedef struct WITHSYM16 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_WITH16 */ unsigned long pParent; /* pointer to the parent */ unsigned long pEnd; /* pointer to this blocks end */ unsigned short len; /* Block length */ CV_uoff16_t off; /* offset of symbol */ unsigned short seg; /* segment of symbol */ unsigned char name[1]; /* Length-prefixed name */ } WITHSYM16; typedef enum CEXM_MODEL_e { CEXM_MDL_table = 0x00, /* not executable */ CEXM_MDL_native = 0x20, /* native */ CEXM_MDL_cobol = 0x21, /* cobol */ CEXM_MDL_pcode = 0x40 /* pcode */ } CEXM_MODEL_e; typedef struct CEXMSYM16 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_CEXMODEL16 */ CV_uoff16_t off; /* offset of symbol */ unsigned short seg; /* segment of symbol */ unsigned short model; /* execution model */ union variant { struct { CV_uoff16_t pcdtable; /* offset to pcode function table */ CV_uoff16_t pcdspi; /* offset to segment pcode information */ } pcode; } u; } CEXMSYM16; typedef struct VPATHSYM16 { unsigned short reclen; /* record length */ unsigned short rectyp; /* S_VFTPATH16 */ CV_uoff16_t off; /* offset of virtual function table */ unsigned short seg; /* segment of virtual function table */ CV_typ_t root; /* type index of the root of path */ CV_typ_t path; /* type index of the path record */ } VPATHSYM16; typedef struct REGREL16 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_REGREL16 */ CV_uoff16_t off; /* offset of symbol */ unsigned short reg; /* register index */ CV_typ_t typind; /* Type index */ unsigned char name[1]; /* Length-prefixed name */ } REGREL16; typedef struct BPRELSYM32 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_BPREL32 */ CV_off32_t off; /* BP-relative offset */ CV_typ_t typind; /* Type index */ unsigned char name[1]; /* Length-prefixed name */ } BPRELSYM32; typedef struct DATASYM32 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_LDATA32, S_GDATA32 or S_PUB32 */ CV_uoff32_t off; unsigned short seg; CV_typ_t typind; /* Type index */ unsigned char name[1]; /* Length-prefixed name */ } DATASYM32; typedef DATASYM32 PUBSYM32; typedef struct PROCSYM32 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_GPROC32 or S_LPROC32 */ unsigned long pParent; /* pointer to the parent */ unsigned long pEnd; /* pointer to this blocks end */ unsigned long pNext; /* pointer to next symbol */ unsigned long len; /* Proc length */ unsigned long DbgStart; /* Debug start offset */ unsigned long DbgEnd; /* Debug end offset */ CV_uoff32_t off; unsigned short seg; CV_typ_t typind; /* Type index */ char rtntyp; /* Return type (NEAR/FAR) */ unsigned char name[1]; /* Length-prefixed name */ } PROCSYM32; typedef struct THUNKSYM32 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_THUNK32 */ unsigned long pParent; /* pointer to the parent */ unsigned long pEnd; /* pointer to this blocks end */ unsigned long pNext; /* pointer to next symbol */ CV_uoff32_t off; unsigned short seg; unsigned short len; /* length of thunk */ unsigned char ord; /* ordinal specifying type of thunk */ unsigned char name[1]; /* Length-prefixed name */ #ifdef CV unsigned char variant[0]; /* variant portion of thunk */ #else unsigned char variant[1]; /* variant portion of thunk */ #endif } THUNKSYM32; typedef struct LABELSYM32 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_LABEL32 */ CV_uoff32_t off; unsigned short seg; char rtntyp; /* Return type (NEAR/FAR) */ unsigned char name[1]; /* Length-prefixed name */ } LABELSYM32; typedef struct BLOCKSYM32 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_BLOCK32 */ unsigned long pParent; /* pointer to the parent */ unsigned long pEnd; /* pointer to this blocks end */ unsigned long len; /* Block length */ CV_uoff32_t off; /* Offset in code segment */ unsigned short seg; /* segment of label */ unsigned char name[1]; /* Length-prefixed name */ } BLOCKSYM32; typedef struct WITHSYM32 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_WITH32 */ unsigned long pParent; /* pointer to the parent */ unsigned long pEnd; /* pointer to this blocks end */ unsigned long len; /* Block length */ CV_uoff32_t off; /* Offset in code segment */ unsigned short seg; /* segment of label */ unsigned char name[1]; /* Length-prefixed expression string */ } WITHSYM32; typedef struct VPATHSYM32 { unsigned short reclen; /* record length */ unsigned short rectyp; /* S_VFTPATH32 */ CV_uoff32_t off; /* offset of virtual function table */ unsigned short seg; /* segment of virtual function table */ CV_typ_t root; /* type index of the root of path */ CV_typ_t path; /* type index of the path record */ } VPATHSYM32; typedef struct REGREL32 { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_REGREL32 */ CV_uoff32_t off; /* offset of symbol */ unsigned short reg; /* register index for symbol */ CV_typ_t typind; /* Type index */ unsigned char name[1]; /* Length-prefixed name */ } REGREL32; typedef struct PROCSYMMIPS { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_GPROCMIPS or S_LPROCMIPS */ unsigned long pParent; /* pointer to the parent */ unsigned long pEnd; /* pointer to this blocks end */ unsigned long pNext; /* pointer to next symbol */ unsigned long len; /* Proc length */ unsigned long DbgStart; /* Debug start offset */ unsigned long DbgEnd; /* Debug end offset */ unsigned long regSave; /* int register save mask */ unsigned long fpSave; /* fp register save mask */ unsigned long intOff; /* int register save offset */ unsigned long fpOff; /* fp register save offset */ CV_uoff32_t off; /* Symbol offset */ unsigned short seg; /* Symbol segment */ CV_typ_t typind; /* Type index */ char retReg; /* Register return value is in */ char frameReg; /* Frame pointer register */ unsigned char name[1]; /* Length-prefixed name */ } PROCSYMMIPS, *PROCPTRMIPS; /* generic block definition symbols */ /* these are similar to the equivalent 16:16 or 16:32 symbols but */ /* only define the length, type and linkage fields */ typedef struct PROCSYM { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_GPROC16 or S_LPROC16 */ unsigned long pParent; /* pointer to the parent */ unsigned long pEnd; /* pointer to this blocks end */ unsigned long pNext; /* pointer to next symbol */ } PROCSYM; typedef struct THUNKSYM { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_THUNK */ unsigned long pParent; /* pointer to the parent */ unsigned long pEnd; /* pointer to this blocks end */ unsigned long pNext; /* pointer to next symbol */ } THUNKSYM; typedef struct BLOCKSYM { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_BLOCK16 */ unsigned long pParent; /* pointer to the parent */ unsigned long pEnd; /* pointer to this blocks end */ } BLOCKSYM; typedef struct WITHSYM { unsigned short reclen; /* Record length */ unsigned short rectyp; /* S_WITH16 */ unsigned long pParent; /* pointer to the parent */ unsigned long pEnd; /* pointer to this blocks end */ } WITHSYM; typedef enum CV_HREG_e { /* * Register set for the Intel 80x86 and ix86 processor series * (plus PCODE registers) */ CV_REG_NONE = 0, CV_REG_AL = 1, CV_REG_CL = 2, CV_REG_DL = 3, CV_REG_BL = 4, CV_REG_AH = 5, CV_REG_CH = 6, CV_REG_DH = 7, CV_REG_BH = 8, CV_REG_AX = 9, CV_REG_CX = 10, CV_REG_DX = 11, CV_REG_BX = 12, CV_REG_SP = 13, CV_REG_BP = 14, CV_REG_SI = 15, CV_REG_DI = 16, CV_REG_EAX = 17, CV_REG_ECX = 18, CV_REG_EDX = 19, CV_REG_EBX = 20, CV_REG_ESP = 21, CV_REG_EBP = 22, CV_REG_ESI = 23, CV_REG_EDI = 24, CV_REG_ES = 25, CV_REG_CS = 26, CV_REG_SS = 27, CV_REG_DS = 28, CV_REG_FS = 29, CV_REG_GS = 30, CV_REG_IP = 31, CV_REG_FLAGS = 32, CV_REG_EIP = 33, CV_REG_EFLAGS = 34, CV_REG_TEMP = 40, /* PCODE Temp */ CV_REG_TEMPH = 41, /* PCODE TempH */ CV_REG_QUOTE = 42, /* PCODE Quote */ CV_REG_PCDR3 = 43, /* PCODE reserved */ CV_REG_PCDR4 = 44, /* PCODE reserved */ CV_REG_PCDR5 = 45, /* PCODE reserved */ CV_REG_PCDR6 = 46, /* PCODE reserved */ CV_REG_PCDR7 = 47, /* PCODE reserved */ CV_REG_CR0 = 80, /* CR0 -- control registers */ CV_REG_CR1 = 81, CV_REG_CR2 = 82, CV_REG_CR3 = 83, CV_REG_DR0 = 90, /* Debug register */ CV_REG_DR1 = 91, CV_REG_DR2 = 92, CV_REG_DR3 = 93, CV_REG_DR4 = 94, CV_REG_DR5 = 95, CV_REG_DR6 = 96, CV_REG_DR7 = 97, CV_REG_ST0 = 128, CV_REG_ST1 = 129, CV_REG_ST2 = 130, CV_REG_ST3 = 131, CV_REG_ST4 = 132, CV_REG_ST5 = 133, CV_REG_ST6 = 134, CV_REG_ST7 = 135, CV_REG_CTRL = 136, CV_REG_STAT = 137, CV_REG_TAG = 138, CV_REG_FPIP = 139, CV_REG_FPCS = 140, CV_REG_FPDO = 141, CV_REG_FPDS = 142, CV_REG_ISEM = 143, CV_REG_FPEIP = 144, CV_REG_FPEDO = 145, /* * registers for the 68K processors */ CV_R68_D0 = 0, CV_R68_D1 = 1, CV_R68_D2 = 2, CV_R68_D3 = 3, CV_R68_D4 = 4, CV_R68_D5 = 5, CV_R68_D6 = 6, CV_R68_D7 = 7, CV_R68_A0 = 8, CV_R68_A1 = 9, CV_R68_A2 = 10, CV_R68_A3 = 11, CV_R68_A4 = 12, CV_R68_A5 = 13, CV_R68_A6 = 14, CV_R68_A7 = 15, CV_R68_CCR = 16, CV_R68_SR = 17, CV_R68_USP = 18, CV_R68_MSP = 19, CV_R68_SFC = 20, CV_R68_DFC = 21, CV_R68_CACR = 22, CV_R68_VBR = 23, CV_R68_CAAR = 24, CV_R68_ISP = 25, CV_R68_PC = 26, /* reserved 27 */ CV_R68_FPCR = 28, CV_R68_FPSR = 29, CV_R68_FPIAR= 30, /* reserved 31 */ CV_R68_FP0 = 32, CV_R68_FP1 = 33, CV_R68_FP2 = 34, CV_R68_FP3 = 35, CV_R68_FP4 = 36, CV_R68_FP5 = 37, CV_R68_FP6 = 38, CV_R68_FP7 = 39, /* reserved 40-50 */ CV_R68_PSR = 51, CV_R68_PCSR = 52, CV_R68_VAL = 53, CV_R68_CRP = 54, CV_R68_SRP = 55, CV_R68_DRP = 56, CV_R68_TC = 57, CV_R68_AC = 58, CV_R68_SCC = 59, CV_R68_CAL = 60, CV_R68_TT0 = 61, CV_R68_TT1 = 62, /* reserved 63 */ CV_R68_BAD0 = 64, CV_R68_BAD1 = 65, CV_R68_BAD2 = 66, CV_R68_BAD3 = 67, CV_R68_BAD4 = 68, CV_R68_BAD5 = 69, CV_R68_BAD6 = 70, CV_R68_BAD7 = 71, CV_R68_BAC0 = 72, CV_R68_BAC1 = 73, CV_R68_BAC2 = 74, CV_R68_BAC3 = 75, CV_R68_BAC4 = 76, CV_R68_BAC5 = 77, CV_R68_BAC6 = 78, CV_R68_BAC7 = 79, /* * Register set for the MIPS 4000 */ CV_M4_NOREG = 255, CV_M4_IntZERO = 10, /* CPU REGISTER */ CV_M4_IntAT = 11, CV_M4_IntV0 = 12, CV_M4_IntV1 = 13, CV_M4_IntA0 = 14, CV_M4_IntA1 = 15, CV_M4_IntA2 = 16, CV_M4_IntA3 = 17, CV_M4_IntT0 = 18, CV_M4_IntT1 = 19, CV_M4_IntT2 = 20, CV_M4_IntT3 = 21, CV_M4_IntT4 = 22, CV_M4_IntT5 = 23, CV_M4_IntT6 = 24, CV_M4_IntT7 = 25, CV_M4_IntS0 = 26, CV_M4_IntS1 = 27, CV_M4_IntS2 = 28, CV_M4_IntS3 = 29, CV_M4_IntS4 = 30, CV_M4_IntS5 = 31, CV_M4_IntS6 = 32, CV_M4_IntS7 = 33, CV_M4_IntT8 = 34, CV_M4_IntT9 = 35, CV_M4_IntKT0 = 36, CV_M4_IntKT1 = 37, CV_M4_IntGP = 38, CV_M4_IntSP = 39, CV_M4_IntS8 = 40, CV_M4_IntRA = 41, CV_M4_IntLO = 42, CV_M4_IntHI = 43, CV_M4_Fir = 50, CV_M4_Psr = 51, CV_M4_FltF0 = 60, /* Floating point registers */ CV_M4_FltF1 = 61, CV_M4_FltF2 = 62, CV_M4_FltF3 = 63, CV_M4_FltF4 = 64, CV_M4_FltF5 = 65, CV_M4_FltF6 = 66, CV_M4_FltF7 = 67, CV_M4_FltF8 = 68, CV_M4_FltF9 = 69, CV_M4_FltF10 = 70, CV_M4_FltF11 = 71, CV_M4_FltF12 = 72, CV_M4_FltF13 = 73, CV_M4_FltF14 = 74, CV_M4_FltF15 = 75, CV_M4_FltF16 = 76, CV_M4_FltF17 = 77, CV_M4_FltF18 = 78, CV_M4_FltF19 = 79, CV_M4_FltF20 = 80, CV_M4_FltF21 = 81, CV_M4_FltF22 = 82, CV_M4_FltF23 = 83, CV_M4_FltF24 = 84, CV_M4_FltF25 = 85, CV_M4_FltF26 = 86, CV_M4_FltF27 = 87, CV_M4_FltF28 = 88, CV_M4_FltF29 = 89, CV_M4_FltF30 = 90, CV_M4_FltF31 = 92, CV_M4_FltFsr = 93 } CV_HREG_e; #pragma pack() #endif /* CV_INFO_INCLUDED */