1 /** 2 * CodeView 4 symbolic debug info declarations 3 * 4 * See "Microsoft Symbol and Type OMF" document 5 * 6 * Compiler implementation of the 7 * $(LINK2 https://www.dlang.org, D programming language). 8 * 9 * Source: $(LINK2 https://github.com/dlang/dmd/blob/master/src/dmd/backend/cv4.d, backend/_cv4.d) 10 */ 11 12 module dmd.backend.cv4; 13 14 // Online documentation: https://dlang.org/phobos/dmd_backend_cv4.html 15 16 enum OEM = 0x42; // Digital Mars OEM number (picked at random) 17 18 // Symbol Indices 19 enum 20 { 21 S_COMPILE = 1, 22 S_REGISTER = 2, 23 S_CONST = 3, 24 S_UDT = 4, 25 S_SSEARCH = 5, 26 S_END = 6, 27 S_SKIP = 7, 28 S_CVRESERVE = 8, 29 S_OBJNAME = 9, 30 S_ENDARG = 0x0A, 31 S_COBOLUDT = 0x0B, 32 S_MANYREG = 0x0C, 33 S_RETURN = 0x0D, 34 S_ENTRYTHIS = 0x0E, 35 S_TDBNAME = 0x0F, 36 37 S_BPREL16 = 0x100, 38 S_LDATA16 = 0x101, 39 S_GDATA16 = 0x102, 40 S_PUB16 = 0x103, 41 S_LPROC16 = 0x104, 42 S_GPROC16 = 0x105, 43 S_THUNK16 = 0x106, 44 S_BLOCK16 = 0x107, 45 S_WITH16 = 0x108, 46 S_LABEL16 = 0x109, 47 S_CEXMODEL16 = 0x10A, 48 S_VFTPATH16 = 0x10B, 49 50 S_BPREL32 = 0x200, 51 S_LDATA32 = 0x201, 52 S_GDATA32 = 0x202, 53 S_PUB32 = 0x203, 54 S_LPROC32 = 0x204, 55 S_GPROC32 = 0x205, 56 S_THUNK32 = 0x206, 57 S_BLOCK32 = 0x207, 58 S_WITH32 = 0x208, 59 S_LABEL32 = 0x209, 60 S_CEXMODEL32 = 0x20A, 61 S_VFTPATH32 = 0x20B, 62 63 /************** Added Since CV4 *********************/ 64 65 S_REGISTER_V2 = 0x1001, 66 S_CONSTANT_V2 = 0x1002, 67 S_UDT_V2 = 0x1003, 68 S_COBOLUDT_V2 = 0x1004, 69 S_MANYREG_V2 = 0x1005, 70 S_BPREL_V2 = 0x1006, 71 S_LDATA_V2 = 0x1007, 72 S_GDATA_V2 = 0x1008, 73 S_PUB_V2 = 0x1009, 74 S_LPROC_V2 = 0x100A, 75 S_GPROC_V2 = 0x100B, 76 S_VFTTABLE_V2 = 0x100C, 77 S_REGREL_V2 = 0x100D, 78 S_LTHREAD_V2 = 0x100E, 79 S_GTHREAD_V2 = 0x100F, 80 S_FUNCINFO_V2 = 0x1012, 81 S_COMPILAND_V2 = 0x1013, 82 83 S_COMPILAND_V3 = 0x1101, 84 S_THUNK_V3 = 0x1102, 85 S_BLOCK_V3 = 0x1103, 86 S_LABEL_V3 = 0x1105, 87 S_REGISTER_V3 = 0x1106, 88 S_CONSTANT_V3 = 0x1107, 89 S_UDT_V3 = 0x1108, 90 S_BPREL_V3 = 0x110B, 91 S_LDATA_V3 = 0x110C, 92 S_GDATA_V3 = 0x110D, 93 S_PUB_V3 = 0x110E, 94 S_LPROC_V3 = 0x110F, 95 S_GPROC_V3 = 0x1110, 96 S_BPREL_XXXX_V3 = 0x1111, 97 S_MSTOOL_V3 = 0x1116, 98 S_PUB_FUNC1_V3 = 0x1125, 99 S_PUB_FUNC2_V3 = 0x1127, 100 S_SECTINFO_V3 = 0x1136, 101 S_SUBSECTINFO_V3 = 0x1137, 102 S_ENTRYPOINT_V3 = 0x1138, 103 S_SECUCOOKIE_V3 = 0x113A, 104 S_MSTOOLINFO_V3 = 0x113C, 105 S_MSTOOLENV_V3 = 0x113D, 106 } 107 108 // Leaf Indices 109 enum 110 { 111 LF_MODIFIER = 1, 112 LF_POINTER = 2, 113 LF_ARRAY = 3, 114 LF_CLASS = 4, 115 LF_STRUCTURE = 5, 116 LF_UNION = 6, 117 LF_ENUM = 7, 118 LF_PROCEDURE = 8, 119 LF_MFUNCTION = 9, 120 LF_VTSHAPE = 0x0A, 121 LF_COBOL0 = 0x0B, 122 LF_COBOL1 = 0x0C, 123 LF_BARRAY = 0x0D, 124 LF_LABEL = 0x0E, 125 LF_NULL = 0x0F, 126 LF_NOTTRAN = 0x10, 127 LF_DIMARRAY = 0x11, 128 LF_VFTPATH = 0x12, 129 LF_PRECOMP = 0x13, 130 LF_ENDPRECOMP = 0x14, 131 LF_OEM = 0x15, 132 LF_TYPESERVER = 0x16, 133 134 // D extensions (not used, causes linker to fail) 135 LF_DYN_ARRAY = 0x17, 136 LF_ASSOC_ARRAY = 0x18, 137 LF_DELEGATE = 0x19, 138 139 LF_SKIP = 0x200, 140 LF_ARGLIST = 0x201, 141 LF_DEFARG = 0x202, 142 LF_LIST = 0x203, 143 LF_FIELDLIST = 0x204, 144 LF_DERIVED = 0x205, 145 LF_BITFIELD = 0x206, 146 LF_METHODLIST = 0x207, 147 LF_DIMCONU = 0x208, 148 LF_DIMCONLU = 0x209, 149 LF_DIMVARU = 0x20A, 150 LF_DIMVARLU = 0x20B, 151 LF_REFSYM = 0x20C, 152 153 LF_BCLASS = 0x400, 154 LF_VBCLASS = 0x401, 155 LF_IVBCLASS = 0x402, 156 LF_ENUMERATE = 0x403, 157 LF_FRIENDFCN = 0x404, 158 LF_INDEX = 0x405, 159 LF_MEMBER = 0x406, 160 LF_STMEMBER = 0x407, 161 LF_METHOD = 0x408, 162 LF_NESTTYPE = 0x409, 163 LF_VFUNCTAB = 0x40A, 164 LF_FRIENDCLS = 0x40B, 165 166 LF_NUMERIC = 0x8000, 167 LF_CHAR = 0x8000, 168 LF_SHORT = 0x8001, 169 LF_USHORT = 0x8002, 170 LF_LONG = 0x8003, 171 LF_ULONG = 0x8004, 172 LF_REAL32 = 0x8005, 173 LF_REAL64 = 0x8006, 174 LF_REAL80 = 0x8007, 175 LF_REAL128 = 0x8008, 176 LF_QUADWORD = 0x8009, 177 LF_UQUADWORD = 0x800A, 178 LF_REAL48 = 0x800B, 179 180 LF_COMPLEX32 = 0x800C, 181 LF_COMPLEX64 = 0x800D, 182 LF_COMPLEX80 = 0x800E, 183 LF_COMPLEX128 = 0x800F, 184 185 LF_VARSTRING = 0x8010, 186 187 /************** Added Since CV4 *********************/ 188 189 LF_MODIFIER_V2 = 0x1001, 190 LF_POINTER_V2 = 0x1002, 191 LF_ARRAY_V2 = 0x1003, 192 LF_CLASS_V2 = 0x1004, 193 LF_STRUCTURE_V2 = 0x1005, 194 LF_UNION_V2 = 0x1006, 195 LF_ENUM_V2 = 0x1007, 196 LF_PROCEDURE_V2 = 0x1008, 197 LF_MFUNCTION_V2 = 0x1009, 198 LF_COBOL0_V2 = 0x100A, 199 LF_BARRAY_V2 = 0x100B, 200 LF_DIMARRAY_V2 = 0x100C, 201 LF_VFTPATH_V2 = 0x100D, 202 LF_PRECOMP_V2 = 0x100E, 203 LF_OEM_V2 = 0x100F, 204 205 LF_SKIP_V2 = 0x1200, 206 LF_ARGLIST_V2 = 0x1201, 207 LF_DEFARG_V2 = 0x1202, 208 LF_FIELDLIST_V2 = 0x1203, 209 LF_DERIVED_V2 = 0x1204, 210 LF_BITFIELD_V2 = 0x1205, 211 LF_METHODLIST_V2 = 0x1206, 212 LF_DIMCONU_V2 = 0x1207, 213 LF_DIMCONLU_V2 = 0x1208, 214 LF_DIMVARU_V2 = 0x1209, 215 LF_DIMVARLU_V2 = 0x120A, 216 217 LF_BCLASS_V2 = 0x1400, 218 LF_VBCLASS_V2 = 0x1401, 219 LF_IVBCLASS_V2 = 0x1402, 220 LF_FRIENDFCN_V2 = 0x1403, 221 LF_INDEX_V2 = 0x1404, 222 LF_MEMBER_V2 = 0x1405, 223 LF_STMEMBER_V2 = 0x1406, 224 LF_METHOD_V2 = 0x1407, 225 LF_NESTTYPE_V2 = 0x1408, 226 LF_VFUNCTAB_V2 = 0x1409, 227 LF_FRIENDCLS_V2 = 0x140A, 228 LF_ONEMETHOD_V2 = 0x140B, 229 LF_VFUNCOFF_V2 = 0x140C, 230 LF_NESTTYPEEX_V2 = 0x140D, 231 232 LF_ENUMERATE_V3 = 0x1502, 233 LF_ARRAY_V3 = 0x1503, 234 LF_CLASS_V3 = 0x1504, 235 LF_STRUCTURE_V3 = 0x1505, 236 LF_UNION_V3 = 0x1506, 237 LF_ENUM_V3 = 0x1507, 238 LF_MEMBER_V3 = 0x150D, 239 LF_STMEMBER_V3 = 0x150E, 240 LF_METHOD_V3 = 0x150F, 241 LF_NESTTYPE_V3 = 0x1510, 242 LF_ONEMETHOD_V3 = 0x1511, 243 }