Home | History | Annotate | Download | only in CodeView
      1 //===-- CodeViewTypes.def - All CodeView leaf types -------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // See LEAF_ENUM_e in cvinfo.h. This should match the constants there.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 // If the type is known, then we have a record describing it in TypeRecord.h.
     15 
     16 #ifndef CV_TYPE
     17 #define CV_TYPE(lf_ename, value)
     18 #endif
     19 
     20 // If the type is known, then we have a record describing it in TypeRecord.h.
     21 #ifndef TYPE_RECORD
     22 #define TYPE_RECORD(lf_ename, value, name) CV_TYPE(lf_ename, value)
     23 #endif
     24 
     25 #ifndef TYPE_RECORD_ALIAS
     26 #define TYPE_RECORD_ALIAS(lf_ename, value, name, alias_name)                   \
     27   TYPE_RECORD(lf_ename, value, name)
     28 #endif
     29 
     30 #ifndef MEMBER_RECORD
     31 #define MEMBER_RECORD(lf_ename, value, name) TYPE_RECORD(lf_ename, value, name)
     32 #endif
     33 
     34 #ifndef MEMBER_RECORD_ALIAS
     35 #define MEMBER_RECORD_ALIAS(lf_ename, value, name, alias_name)                 \
     36   MEMBER_RECORD(lf_ename, value, name)
     37 #endif
     38 
     39 TYPE_RECORD(LF_POINTER, 0x1002, Pointer)
     40 TYPE_RECORD(LF_MODIFIER, 0x1001, Modifier)
     41 TYPE_RECORD(LF_PROCEDURE, 0x1008, Procedure)
     42 TYPE_RECORD(LF_MFUNCTION, 0x1009, MemberFunction)
     43 TYPE_RECORD(LF_LABEL, 0x000e, Label)
     44 TYPE_RECORD(LF_ARGLIST, 0x1201, ArgList)
     45 
     46 TYPE_RECORD(LF_FIELDLIST, 0x1203, FieldList)
     47 
     48 TYPE_RECORD(LF_ARRAY, 0x1503, Array)
     49 TYPE_RECORD(LF_CLASS, 0x1504, Class)
     50 TYPE_RECORD_ALIAS(LF_STRUCTURE, 0x1505, Struct, Class)
     51 TYPE_RECORD_ALIAS(LF_INTERFACE, 0x1519, Interface, Class)
     52 TYPE_RECORD(LF_UNION, 0x1506, Union)
     53 TYPE_RECORD(LF_ENUM, 0x1507, Enum)
     54 TYPE_RECORD(LF_TYPESERVER2, 0x1515, TypeServer2)
     55 TYPE_RECORD(LF_VFTABLE, 0x151d, VFTable)
     56 TYPE_RECORD(LF_VTSHAPE, 0x000a, VFTableShape)
     57 
     58 TYPE_RECORD(LF_BITFIELD, 0x1205, BitField)
     59 
     60 // Member type records. These are generally not length prefixed, and appear
     61 // inside of a field list record.
     62 MEMBER_RECORD(LF_BCLASS, 0x1400, BaseClass)
     63 MEMBER_RECORD_ALIAS(LF_BINTERFACE, 0x151a, BaseInterface, BaseClass)
     64 
     65 MEMBER_RECORD(LF_VBCLASS, 0x1401, VirtualBaseClass)
     66 MEMBER_RECORD_ALIAS(LF_IVBCLASS, 0x1402, IndirectVirtualBaseClass,
     67                     VirtualBaseClass)
     68 
     69 MEMBER_RECORD(LF_VFUNCTAB, 0x1409, VFPtr)
     70 MEMBER_RECORD(LF_STMEMBER, 0x150e, StaticDataMember)
     71 MEMBER_RECORD(LF_METHOD, 0x150f, OverloadedMethod)
     72 MEMBER_RECORD(LF_MEMBER, 0x150d, DataMember)
     73 MEMBER_RECORD(LF_NESTTYPE, 0x1510, NestedType)
     74 MEMBER_RECORD(LF_ONEMETHOD, 0x1511, OneMethod)
     75 MEMBER_RECORD(LF_ENUMERATE, 0x1502, Enumerator)
     76 MEMBER_RECORD(LF_INDEX, 0x1404, ListContinuation)
     77 
     78 // ID leaf records. Subsequent leaf types may be referenced from .debug$S.
     79 TYPE_RECORD(LF_FUNC_ID, 0x1601, FuncId)
     80 TYPE_RECORD(LF_MFUNC_ID, 0x1602, MemberFuncId)
     81 TYPE_RECORD(LF_BUILDINFO, 0x1603, BuildInfo)
     82 TYPE_RECORD(LF_SUBSTR_LIST, 0x1604, StringList)
     83 TYPE_RECORD(LF_STRING_ID, 0x1605, StringId)
     84 TYPE_RECORD(LF_UDT_SRC_LINE, 0x1606, UdtSourceLine)
     85 TYPE_RECORD(LF_UDT_MOD_SRC_LINE, 0x1607, UdtModSourceLine)
     86 
     87 
     88 TYPE_RECORD(LF_METHODLIST, 0x1206, MethodOverloadList)
     89 
     90 
     91 // 16 bit type records.
     92 CV_TYPE(LF_MODIFIER_16t, 0x0001)
     93 CV_TYPE(LF_POINTER_16t, 0x0002)
     94 CV_TYPE(LF_ARRAY_16t, 0x0003)
     95 CV_TYPE(LF_CLASS_16t, 0x0004)
     96 CV_TYPE(LF_STRUCTURE_16t, 0x0005)
     97 CV_TYPE(LF_UNION_16t, 0x0006)
     98 CV_TYPE(LF_ENUM_16t, 0x0007)
     99 CV_TYPE(LF_PROCEDURE_16t, 0x0008)
    100 CV_TYPE(LF_MFUNCTION_16t, 0x0009)
    101 CV_TYPE(LF_COBOL0_16t, 0x000b)
    102 CV_TYPE(LF_COBOL1, 0x000c)
    103 CV_TYPE(LF_BARRAY_16t, 0x000d)
    104 CV_TYPE(LF_NULLLEAF, 0x000f) // LF_NULL
    105 CV_TYPE(LF_NOTTRAN, 0x0010)
    106 CV_TYPE(LF_DIMARRAY_16t, 0x0011)
    107 CV_TYPE(LF_VFTPATH_16t, 0x0012)
    108 CV_TYPE(LF_PRECOMP_16t, 0x0013)
    109 CV_TYPE(LF_ENDPRECOMP, 0x0014)
    110 CV_TYPE(LF_OEM_16t, 0x0015)
    111 CV_TYPE(LF_TYPESERVER_ST, 0x0016)
    112 
    113 CV_TYPE(LF_SKIP_16t, 0x0200)
    114 CV_TYPE(LF_ARGLIST_16t, 0x0201)
    115 CV_TYPE(LF_DEFARG_16t, 0x0202)
    116 CV_TYPE(LF_LIST, 0x0203)
    117 CV_TYPE(LF_FIELDLIST_16t, 0x0204)
    118 CV_TYPE(LF_DERIVED_16t, 0x0205)
    119 CV_TYPE(LF_BITFIELD_16t, 0x0206)
    120 CV_TYPE(LF_METHODLIST_16t, 0x0207)
    121 CV_TYPE(LF_DIMCONU_16t, 0x0208)
    122 CV_TYPE(LF_DIMCONLU_16t, 0x0209)
    123 CV_TYPE(LF_DIMVARU_16t, 0x020a)
    124 CV_TYPE(LF_DIMVARLU_16t, 0x020b)
    125 CV_TYPE(LF_REFSYM, 0x020c)
    126 
    127 // 16 bit member types. Generally not length prefixed.
    128 CV_TYPE(LF_BCLASS_16t, 0x0400)
    129 CV_TYPE(LF_VBCLASS_16t, 0x0401)
    130 CV_TYPE(LF_IVBCLASS_16t, 0x0402)
    131 CV_TYPE(LF_ENUMERATE_ST, 0x0403)
    132 CV_TYPE(LF_FRIENDFCN_16t, 0x0404)
    133 CV_TYPE(LF_INDEX_16t, 0x0405)
    134 CV_TYPE(LF_MEMBER_16t, 0x0406)
    135 CV_TYPE(LF_STMEMBER_16t, 0x0407)
    136 CV_TYPE(LF_METHOD_16t, 0x0408)
    137 CV_TYPE(LF_NESTTYPE_16t, 0x0409)
    138 CV_TYPE(LF_VFUNCTAB_16t, 0x040a)
    139 CV_TYPE(LF_FRIENDCLS_16t, 0x040b)
    140 CV_TYPE(LF_ONEMETHOD_16t, 0x040c)
    141 CV_TYPE(LF_VFUNCOFF_16t, 0x040d)
    142 
    143 CV_TYPE(LF_TI16_MAX, 0x1000)
    144 
    145 CV_TYPE(LF_ARRAY_ST, 0x1003)
    146 CV_TYPE(LF_CLASS_ST, 0x1004)
    147 CV_TYPE(LF_STRUCTURE_ST, 0x1005)
    148 CV_TYPE(LF_UNION_ST, 0x1006)
    149 CV_TYPE(LF_ENUM_ST, 0x1007)
    150 CV_TYPE(LF_COBOL0, 0x100a)
    151 CV_TYPE(LF_BARRAY, 0x100b)
    152 CV_TYPE(LF_DIMARRAY_ST, 0x100c)
    153 CV_TYPE(LF_VFTPATH, 0x100d)
    154 CV_TYPE(LF_PRECOMP_ST, 0x100e)
    155 CV_TYPE(LF_OEM, 0x100f)
    156 CV_TYPE(LF_ALIAS_ST, 0x1010)
    157 CV_TYPE(LF_OEM2, 0x1011)
    158 
    159 CV_TYPE(LF_SKIP, 0x1200)
    160 CV_TYPE(LF_DEFARG_ST, 0x1202)
    161 CV_TYPE(LF_DERIVED, 0x1204)
    162 CV_TYPE(LF_DIMCONU, 0x1207)
    163 CV_TYPE(LF_DIMCONLU, 0x1208)
    164 CV_TYPE(LF_DIMVARU, 0x1209)
    165 CV_TYPE(LF_DIMVARLU, 0x120a)
    166 
    167 // Member type records. These are generally not length prefixed, and appear
    168 // inside of a field list record.
    169 CV_TYPE(LF_FRIENDFCN_ST, 0x1403)
    170 CV_TYPE(LF_MEMBER_ST, 0x1405)
    171 CV_TYPE(LF_STMEMBER_ST, 0x1406)
    172 CV_TYPE(LF_METHOD_ST, 0x1407)
    173 CV_TYPE(LF_NESTTYPE_ST, 0x1408)
    174 CV_TYPE(LF_FRIENDCLS, 0x140a)
    175 CV_TYPE(LF_ONEMETHOD_ST, 0x140b)
    176 CV_TYPE(LF_VFUNCOFF, 0x140c)
    177 CV_TYPE(LF_NESTTYPEEX_ST, 0x140d)
    178 CV_TYPE(LF_MEMBERMODIFY_ST, 0x140e)
    179 CV_TYPE(LF_MANAGED_ST, 0x140f)
    180 
    181 CV_TYPE(LF_ST_MAX, 0x1500)
    182 CV_TYPE(LF_TYPESERVER, 0x1501)
    183 CV_TYPE(LF_DIMARRAY, 0x1508)
    184 CV_TYPE(LF_PRECOMP, 0x1509)
    185 CV_TYPE(LF_ALIAS, 0x150a)
    186 CV_TYPE(LF_DEFARG, 0x150b)
    187 CV_TYPE(LF_FRIENDFCN, 0x150c)
    188 CV_TYPE(LF_NESTTYPEEX, 0x1512)
    189 CV_TYPE(LF_MEMBERMODIFY, 0x1513)
    190 CV_TYPE(LF_MANAGED, 0x1514)
    191 CV_TYPE(LF_STRIDED_ARRAY, 0x1516)
    192 CV_TYPE(LF_HLSL, 0x1517)
    193 CV_TYPE(LF_MODIFIER_EX, 0x1518)
    194 CV_TYPE(LF_VECTOR, 0x151b)
    195 CV_TYPE(LF_MATRIX, 0x151c)
    196 
    197 // ID leaf records. Subsequent leaf types may be referenced from .debug$S.
    198 
    199 // Numeric leaf types. These are generally contained in other records, and not
    200 // encountered in the main type stream.
    201 
    202 CV_TYPE(LF_NUMERIC, 0x8000)
    203 CV_TYPE(LF_CHAR, 0x8000)
    204 CV_TYPE(LF_SHORT, 0x8001)
    205 CV_TYPE(LF_USHORT, 0x8002)
    206 CV_TYPE(LF_LONG, 0x8003)
    207 CV_TYPE(LF_ULONG, 0x8004)
    208 CV_TYPE(LF_REAL32, 0x8005)
    209 CV_TYPE(LF_REAL64, 0x8006)
    210 CV_TYPE(LF_REAL80, 0x8007)
    211 CV_TYPE(LF_REAL128, 0x8008)
    212 CV_TYPE(LF_QUADWORD, 0x8009)
    213 CV_TYPE(LF_UQUADWORD, 0x800a)
    214 CV_TYPE(LF_REAL48, 0x800b)
    215 CV_TYPE(LF_COMPLEX32, 0x800c)
    216 CV_TYPE(LF_COMPLEX64, 0x800d)
    217 CV_TYPE(LF_COMPLEX80, 0x800e)
    218 CV_TYPE(LF_COMPLEX128, 0x800f)
    219 CV_TYPE(LF_VARSTRING, 0x8010)
    220 CV_TYPE(LF_OCTWORD, 0x8017)
    221 CV_TYPE(LF_UOCTWORD, 0x8018)
    222 CV_TYPE(LF_DECIMAL, 0x8019)
    223 CV_TYPE(LF_DATE, 0x801a)
    224 CV_TYPE(LF_UTF8STRING, 0x801b)
    225 CV_TYPE(LF_REAL16, 0x801c)
    226 
    227 // Padding bytes. These are emitted into alignment bytes in the type stream.
    228 
    229 CV_TYPE(LF_PAD0, 0xf0)
    230 CV_TYPE(LF_PAD1, 0xf1)
    231 CV_TYPE(LF_PAD2, 0xf2)
    232 CV_TYPE(LF_PAD3, 0xf3)
    233 CV_TYPE(LF_PAD4, 0xf4)
    234 CV_TYPE(LF_PAD5, 0xf5)
    235 CV_TYPE(LF_PAD6, 0xf6)
    236 CV_TYPE(LF_PAD7, 0xf7)
    237 CV_TYPE(LF_PAD8, 0xf8)
    238 CV_TYPE(LF_PAD9, 0xf9)
    239 CV_TYPE(LF_PAD10, 0xfa)
    240 CV_TYPE(LF_PAD11, 0xfb)
    241 CV_TYPE(LF_PAD12, 0xfc)
    242 CV_TYPE(LF_PAD13, 0xfd)
    243 CV_TYPE(LF_PAD14, 0xfe)
    244 CV_TYPE(LF_PAD15, 0xff)
    245 
    246 #undef CV_TYPE
    247 #undef TYPE_RECORD
    248 #undef TYPE_RECORD_ALIAS
    249 #undef MEMBER_RECORD
    250 #undef MEMBER_RECORD_ALIAS
    251