|
|
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 */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.