Mercurial > projects > ddbg_continued
diff src/codeview/decl.d @ 1:4a9dcbd9e54f
-files of 0.13 beta
-fixes so that it now compiles with the current dmd version
author | marton@basel.hu |
---|---|
date | Tue, 05 Apr 2011 20:44:01 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/codeview/decl.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,723 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ +module codeview.decl; + +//================================================================================================= +// structs corresponding to the CodeView 4 file format specification NB09 + +align(1) struct DirHeader +{ + ushort cbDirHeader, + cbDirEntry; + uint cDir, + lfoNextDir, + flags; +} + +align(1) struct DirEntry +{ + ushort subsection, + iMod; + uint lfo, + cb; +} + +enum +{ + sstModule = 0x120, + sstTypes, + sstPublic, + sstPublicSym, + sstSymbols, + sstAlignSym, + sstSrcLnSeg, + sstSrcModule, + sstLibraries, + sstGlobalSym, + sstGlobalPub, + sstGlobalTypes, + sstMPC, + sstSegMap, + sstSegName, + sstPreComp, + sstPreCompMap, + sstOffsetMap16, + sstOffsetMap32, + sstFileIndex, + sstStaticSym +} + +align(1) struct ModuleHeader +{ + ushort ovlNumber, + iLib, + cSeg, + Style; +} + +align(1) struct SegInfo +{ + ushort Seg, + pad; + uint offset, + cbSeg; +} + +enum SymbolIndex +{ + S_COMPILE = 1, + S_REGISTER, + S_CONSTANT, + S_UDT, + S_SSEARCH, + S_END, + S_SKIP, + S_CVRESERVE, + S_OBJNAME, + S_ENDARG, + S_COBOLUDT, + S_MANYREG, + S_RETURN, + S_ENTRYTHIS, + + S_BPREL16 = 0x100, + S_LDATA16, + S_GDATA16, + S_PUB16, + S_LPROC16, + S_GPROC16, + S_THUNK16, + S_BLOCK16, + S_WITH16, + S_LABEL16, + S_CEXMODEL16, + S_VFTPATH16, + S_REGREL16, + + S_BPREL32 = 0x200, + S_LDATA32, + S_GDATA32, + S_PUB32, + S_LPROC32, + S_GPROC32, + S_THUNK32, + S_BLOCK32, + S_WITH32, + S_LABEL32, + S_CEXMODEL32, + S_VFTPATH32, + S_REGREL32, + S_LTHREAD32, + S_GTHREAD32, + + S_PROCREF = 0x400, + S_DATAREF, + S_ALIGN, +} + +align(1) struct CVProcedureSymbol +{ + uint pParent, + pEnd, + pNext, + proc_length, + debug_start, + debug_end, + offset; + ushort segment, + proctype; + ubyte flags; +} + +align(1) struct CVReturnSymbol +{ + ushort flags; + ubyte style; +} + +align(1) struct CVStackSymbol +{ + int offset; + ushort type; +} + +align(1) struct CVDataSymbol +{ + uint offset; + ushort segment, + type; +} + +align(1) struct PackedSymbolsHeader +{ + ushort symhash, + addrhash; + uint cbSymbol, + cbSymHash, + cbAddrHash; +} + +//================================================================================================= +// D recOEM's + +const uint OEM_DIGITALMARS = 0x0042; +const uint D_DYN_ARRAY = 0x0001; +const uint D_ASSOC_ARRAY = 0x0002; +const uint D_DELEGATE = 0x0003; + +//================================================================================================= +// leaf indeces + +const uint LF_MODIFIER_16t = 0x0001; +const uint LF_POINTER_16t = 0x0002; +const uint LF_ARRAY_16t = 0x0003; +const uint LF_CLASS_16t = 0x0004; +const uint LF_STRUCTURE_16t = 0x0005; +const uint LF_UNION_16t = 0x0006; +const uint LF_ENUM_16t = 0x0007; +const uint LF_PROCEDURE_16t = 0x0008; +const uint LF_MFUNCTION_16t = 0x0009; +const uint LF_VTSHAPE = 0x000a; +const uint LF_COBOL0_16t = 0x000b; +const uint LF_COBOL1 = 0x000c; +const uint LF_BARRAY_16t = 0x000d; +const uint LF_LABEL = 0x000e; +const uint LF_NULL = 0x000f; +const uint LF_NOTTRAN = 0x0010; +const uint LF_DIMARRAY_16t = 0x0011; +const uint LF_VFTPATH_16t = 0x0012; +const uint LF_PRECOMP_16t = 0x0013; +const uint LF_ENDPRECOMP = 0x0014; +const uint LF_OEM_16t = 0x0015; +const uint LF_TYPESERVER = 0x0016; + +const uint LF_MODIFIER = 0x1001; +const uint LF_POINTER = 0x1002; +const uint LF_ARRAY = 0x1003; +const uint LF_CLASS = 0x1004; +const uint LF_STRUCTURE = 0x1005; +const uint LF_UNION = 0x1006; +const uint LF_ENUM = 0x1007; +const uint LF_PROCEDURE = 0x1008; +const uint LF_MFUNCTION = 0x1009; +const uint LF_COBOL0 = 0x100a; +const uint LF_BARRAY = 0x100b; +const uint LF_DIMARRAY = 0x100c; +const uint LF_VFTPATH = 0x100d; +const uint LF_PRECOMP = 0x100e; +const uint LF_OEM = 0x100f; + +const uint LF_SKIP_16t = 0x0200; +const uint LF_ARGLIST_16t = 0x0201; +const uint LF_DEFARG_16t = 0x0202; +const uint LF_LIST = 0x0203; +const uint LF_FIELDLIST_16t = 0x0204; +const uint LF_DERIVED_16t = 0x0205; +const uint LF_BITFIELD_16t = 0x0206; +const uint LF_METHODLIST_16t= 0x0207; +const uint LF_DIMCONU_16t = 0x0208; +const uint LF_DIMCONLU_16t = 0x0209; +const uint LF_DIMVARU_16t = 0x020a; +const uint LF_DIMVARLU_16t = 0x020b; +const uint LF_REFSYM = 0x020c; + +const uint LF_SKIP = 0x1200; +const uint LF_ARGLIST = 0x1201; +const uint LF_DEFARG = 0x1202; +const uint LF_FIELDLIST = 0x1203; +const uint LF_DERIVED = 0x1204; +const uint LF_BITFIELD = 0x1205; +const uint LF_METHODLIST = 0x1206; +const uint LF_DIMCONU = 0x1207; +const uint LF_DIMCONLU = 0x1208; +const uint LF_DIMVARU = 0x1209; +const uint LF_DIMVARLU = 0x120a; + +const uint LF_BCLASS_16t = 0x0400; +const uint LF_VBCLASS_16t = 0x0401; +const uint LF_IVBCLASS_16t = 0x0402; +const uint LF_ENUMERATE = 0x0403; +const uint LF_FRIENDFCN_16t = 0x0404; +const uint LF_INDEX_16t = 0x0405; +const uint LF_MEMBER_16t = 0x0406; +const uint LF_STMEMBER_16t = 0x0407; +const uint LF_METHOD_16t = 0x0408; +const uint LF_NESTTYPE_16t = 0x0409; +const uint LF_VFUNCTAB_16t = 0x040a; +const uint LF_FRIENDCLS_16t = 0x040b; +const uint LF_ONEMETHOD_16t = 0x040c; +const uint LF_VFUNCOFF_16t = 0x040d; +const uint LF_NESTTYPEEX_16t= 0x040e; +const uint LF_MEMBERMODIFY_16t = 0x040f; + +const uint LF_BCLASS = 0x1400; +const uint LF_VBCLASS = 0x1401; +const uint LF_IVBCLASS = 0x1402; +const uint LF_FRIENDFCN = 0x1403; +const uint LF_INDEX = 0x1404; +const uint LF_MEMBER = 0x1405; +const uint LF_STMEMBER = 0x1406; +const uint LF_METHOD = 0x1407; +const uint LF_NESTTYPE = 0x1408; +const uint LF_VFUNCTAB = 0x1409; +const uint LF_FRIENDCLS = 0x140a; +const uint LF_ONEMETHOD = 0x140b; +const uint LF_VFUNCOFF = 0x140c; +const uint LF_NESTTYPEEX = 0x140d; +const uint LF_MEMBERMODIFY = 0x140e; + +const uint LF_NUMERIC = 0x8000; +const uint LF_CHAR = 0x8000; +const uint LF_SHORT = 0x8001; +const uint LF_USHORT = 0x8002; +const uint LF_LONG = 0x8003; +const uint LF_ULONG = 0x8004; +const uint LF_REAL32 = 0x8005; +const uint LF_REAL64 = 0x8006; +const uint LF_REAL80 = 0x8007; +const uint LF_REAL128 = 0x8008; +const uint LF_QUADWORD = 0x8009; +const uint LF_UQUADWORD = 0x800a; +const uint LF_REAL48 = 0x800b; +const uint LF_COMPLEX32 = 0x800c; +const uint LF_COMPLEX64 = 0x800d; +const uint LF_COMPLEX80 = 0x800e; +const uint LF_COMPLEX128 = 0x800f; +const uint LF_VARSTRING = 0x8010; +const uint LF_UCHAR = 0x8011; + +//================================================================================================= +// Primitive Types + +// Special Types +const uint T_NOTYPE = 0x0000; +const uint T_ABS = 0x0001; +const uint T_SEGMENT = 0x0002; +const uint T_VOID = 0x0003; +const uint T_PVOID = 0x0103; +const uint T_PFVOID = 0x0203; +const uint T_PHVOID = 0x0303; +const uint T_32PVOID = 0x0403; +const uint T_32PFVOID = 0x0503; +const uint T_CURRENCY = 0x0004; +const uint T_NBASICSTR = 0x0005; +const uint T_FBASICSTR = 0x0006; +const uint T_NOTTRANS = 0x0007; +const uint T_BIT = 0x0060; +const uint T_PASCHAR = 0x0061; + +// Character Types +const uint T_CHAR = 0x0010; +const uint T_UCHAR = 0x0020; +const uint T_PCHAR = 0x0110; +const uint T_PUCHAR = 0x0120; +const uint T_PFCHAR = 0x0210; +const uint T_PFUCHAR = 0x0220; +const uint T_PHCHAR = 0x0310; +const uint T_PHUCHAR = 0x0320; +const uint T_32PCHAR = 0x0410; +const uint T_32PUCHAR = 0x0420; +const uint T_32PFCHAR = 0x0510; +const uint T_32PFUCHAR = 0x0520; + +// Real Character Types +const uint T_RCHAR = 0x0070; +const uint T_PRCHAR = 0x0170; +const uint T_PFRCHAR = 0x0270; +const uint T_PHRCHAR = 0x0370; +const uint T_32PRCHAR = 0x0470; +const uint T_32PFRCHAR = 0x0570; + +// Wide Character Types +const uint T_WCHAR = 0x0071; +const uint T_PWCHAR = 0x0171; +const uint T_PFWCHAR = 0x0271; +const uint T_PHWCHAR = 0x0371; +const uint T_32PWCHAR = 0x0471; +const uint T_32PFWCHAR = 0x0571; + +// Double Wide Character Types - D enhancement +const uint T_DCHAR = 0x0078; +const uint T_32PDCHAR = 0x0478; +const uint T_32PFDCHAR = 0x0578; + +// Real 16-bit Integer Types +const uint T_INT2 = 0x0072; +const uint T_UINT2 = 0x0073; +const uint T_PINT2 = 0x0172; +const uint T_PUINT2 = 0x0173; +const uint T_PFINT2 = 0x0272; +const uint T_PFUINT2 = 0x0273; +const uint T_PHINT2 = 0x0372; +const uint T_PHUINT2 = 0x0373; +const uint T_32PINT2 = 0x0472; +const uint T_32PUINT2 = 0x0473; +const uint T_32PFINT2 = 0x0572; +const uint T_32PFUINT2 = 0x0573; + +// 16-bit Short Types +const uint T_SHORT = 0x0011; +const uint T_USHORT = 0x0021; +const uint T_PSHORT = 0x0111; +const uint T_PUSHORT = 0x0121; +const uint T_PFSHORT = 0x0211; +const uint T_PFUSHORT = 0x0221; +const uint T_PHSHORT = 0x0311; +const uint T_PHUSHORT = 0x0321; +const uint T_32PSHORT = 0x0411; +const uint T_32PUSHORT = 0x0421; +const uint T_32PFSHORT = 0x0511; +const uint T_32PFUSHORT = 0x0521; + +// Real 32-bit Integer Types +const uint T_INT4 = 0x0074; +const uint T_UINT4 = 0x0075; +const uint T_PINT4 = 0x0174; +const uint T_PUINT4 = 0x0175; +const uint T_PFINT4 = 0x0274; +const uint T_PFUINT4 = 0x0275; +const uint T_PHINT4 = 0x0374; +const uint T_PHUINT4 = 0x0375; +const uint T_32PINT4 = 0x0474; +const uint T_32PUINT4 = 0x0475; +const uint T_32PFINT4 = 0x0574; +const uint T_32PFUINT4 = 0x0575; + +// 32-bit Long Types +const uint T_LONG = 0x0012; +const uint T_ULONG = 0x0022; +const uint T_PLONG = 0x0112; +const uint T_PULONG = 0x0122; +const uint T_PFLONG = 0x0212; +const uint T_PFULONG = 0x0222; +const uint T_PHLONG = 0x0312; +const uint T_PHULONG = 0x0322; +const uint T_32PLONG = 0x0412; +const uint T_32PULONG = 0x0422; +const uint T_32PFLONG = 0x0512; +const uint T_32PFULONG = 0x0522; + +// Real 64-bit int Types +const uint T_INT8 = 0x0076; +const uint T_UINT8 = 0x0077; +const uint T_PINT8 = 0x0176; +const uint T_PUINT8 = 0x0177; +const uint T_PFINT8 = 0x0276; +const uint T_PFUINT8 = 0x0277; +const uint T_PHINT8 = 0x0376; +const uint T_PHUINT8 = 0x0377; +const uint T_32PINT8 = 0x0476; +const uint T_32PUINT8 = 0x0477; +const uint T_32PFINT8 = 0x0576; +const uint T_32PFUINT8 = 0x0577; + +// 64-bit Integral Types +const uint T_QUAD = 0x0013; +const uint T_UQUAD = 0x0023; +const uint T_PQUAD = 0x0113; +const uint T_PUQUAD = 0x0123; +const uint T_PFQUAD = 0x0213; +const uint T_PFUQUAD = 0x0223; +const uint T_PHQUAD = 0x0313; +const uint T_PHUQUAD = 0x0323; +const uint T_32PQUAD = 0x0413; +const uint T_32PUQUAD = 0x0423; +const uint T_32PFQUAD = 0x0513; +const uint T_32PFUQUAD = 0x0523; + +// 32-bit Real Types +const uint T_REAL32 = 0x0040; +const uint T_PREAL32 = 0x0140; +const uint T_PFREAL32 = 0x0240; +const uint T_PHREAL32 = 0x0340; +const uint T_32PREAL32 = 0x0440; +const uint T_32PFREAL32 = 0x0540; + +// 48-bit Real Types +const uint T_REAL48 = 0x0044; +const uint T_PREAL48 = 0x0144; +const uint T_PFREAL48 = 0x0244; +const uint T_PHREAL48 = 0x0344; +const uint T_32PREAL48 = 0x0444; +const uint T_32PFREAL48 = 0x0544; + +// 64-bit Real Types +const uint T_REAL64 = 0x0041; +const uint T_PREAL64 = 0x0141; +const uint T_PFREAL64 = 0x0241; +const uint T_PHREAL64 = 0x0341; +const uint T_32PREAL64 = 0x0441; +const uint T_32PFREAL64 = 0x0541; + +// 80-bit Real Types +const uint T_REAL80 = 0x0042; +const uint T_PREAL80 = 0x0142; +const uint T_PFREAL80 = 0x0242; +const uint T_PHREAL80 = 0x0342; +const uint T_32PREAL80 = 0x0442; +const uint T_32PFREAL80 = 0x0542; + +// 128-bit Real Types +const uint T_REAL128 = 0x0043; +const uint T_PREAL128 = 0x0143; +const uint T_PFREAL128 = 0x0243; +const uint T_PHREAL128 = 0x0343; +const uint T_32PREAL128 = 0x0443; +const uint T_32PFREAL128 = 0x0543; + +// 32-bit Complex Types +const uint T_CPLX32 = 0x0050; +const uint T_PCPLX32 = 0x0150; +const uint T_PFCPLX32 = 0x0250; +const uint T_PHCPLX32 = 0x0350; +const uint T_32PCPLX32 = 0x0450; +const uint T_32PFCPLX32 = 0x0550; + +// 64-bit Complex Types +const uint T_CPLX64 = 0x0051; +const uint T_PCPLX64 = 0x0151; +const uint T_PFCPLX64 = 0x0251; +const uint T_PHCPLX64 = 0x0351; +const uint T_32PCPLX64 = 0x0451; +const uint T_32PFCPLX64 = 0x0551; + +// 80-bit Complex Types +const uint T_CPLX80 = 0x0052; +const uint T_PCPLX80 = 0x0152; +const uint T_PFCPLX80 = 0x0252; +const uint T_PHCPLX80 = 0x0352; +const uint T_32PCPLX80 = 0x0452; +const uint T_32PFCPLX80 = 0x0552; + +// 128-bit Complex Types +const uint T_CPLX128 = 0x0053; +const uint T_PCPLX128 = 0x0153; +const uint T_PFCPLX128 = 0x0253; +const uint T_PHCPLX128 = 0x0353; +const uint T_32PCPLX128 = 0x0453; +const uint T_32PFCPLX128 = 0x0553; + +// Boolean Types +const uint T_BOOL08 = 0x0030; +const uint T_BOOL16 = 0x0031; +const uint T_BOOL32 = 0x0032; +const uint T_BOOL64 = 0x0033; +const uint T_PBOOL08 = 0x0130; +const uint T_PBOOL16 = 0x0131; +const uint T_PBOOL32 = 0x0132; +const uint T_PBOOL64 = 0x0133; +const uint T_PFBOOL08 = 0x0230; +const uint T_PFBOOL16 = 0x0231; +const uint T_PFBOOL32 = 0x0232; +const uint T_PFBOOL64 = 0x0233; +const uint T_PHBOOL08 = 0x0330; +const uint T_PHBOOL16 = 0x0331; +const uint T_PHBOOL32 = 0x0332; +const uint T_PHBOOL64 = 0x0333; +const uint T_32PBOOL08 = 0x0430; +const uint T_32PBOOL16 = 0x0431; +const uint T_32PBOOL32 = 0x0432; +const uint T_32PBOOL64 = 0x0433; +const uint T_32PFBOOL08 = 0x0530; +const uint T_32PFBOOL16 = 0x0531; +const uint T_32PFBOOL32 = 0x0532; +const uint T_32PFBOOL64 = 0x0533; + +//================================================================================================= +// classes for representing types + +class Leaf +{ + ushort leaf_index; +} + +class LeafModifer : Leaf +{ + ushort attribute, index; +} + +class LeafPointer : Leaf +{ + ushort attribute, + type; +} + +class LeafArgList : Leaf +{ + ushort argcount; + ushort[] indeces; +} + +class LeafProcedure : Leaf +{ + ushort rvtype; + ubyte call, + reserved; + ushort cParms, + arglist; +} + +class LeafMFunction : Leaf +{ + ushort rvtype, + _class, + _this; + ubyte call, + reserved; + ushort cParms, + arglist; + uint thisadjust; +} + +class LeafNumeric : Leaf +{ + union { + char c; + ubyte uc; + short s; + ushort us; + int i; + uint ui; + long l; + ulong ul; + float f; + double d; + real r; + cfloat cf; + cdouble cd; + creal cr; + string str; + } + + uint getUint() + { + switch ( leaf_index ) + { + case LF_USHORT: return us; + case LF_ULONG: return cast(uint)ul; + case LF_UCHAR: return uc; + default: + assert ( 0, "unsupported numeric leaf" ); + } + return 0; + } +} + +class LeafClassStruc : Leaf +{ + ushort count, + field, + property, + dList, + vshape, + type; + LeafNumeric length; + string name; +} + +class LeafVTShape : Leaf +{ + ubyte[] descriptor; +} + +class LeafFieldList : Leaf +{ + Leaf[] fields; +} + +class LeafMethodList : Leaf +{ +} + +class LeafDerived : Leaf +{ + ushort[] types; +} + +class LeafBaseClass : Leaf +{ + ushort type, + attribute; + LeafNumeric offset; +} + +class LeafMember : Leaf +{ + ushort type, + attribute; + LeafNumeric offset; + string name; +} + +class LeafMethod : Leaf +{ + ushort count, + mList; + string name; +} + +class LeafArray : Leaf +{ + ushort elemtype, + idxtype; + LeafNumeric length; + string name; +} + +class LeafEnum : Leaf +{ + ushort count, + type, + field, + property; + string name; +} + +class LeafEnumNameValue : Leaf +{ + ushort attribute; + LeafNumeric value; + string name; +} + +class LeafNestedType : Leaf +{ + ushort index; + string name; +} + +class LeafStaticDataMember : Leaf +{ + ushort type, + attribute; + string name; +} + +class LeafUnion : Leaf +{ + ushort count, + field, + property; + LeafNumeric length; + string name; +} + +class LeafDynArray : Leaf +{ + ushort index_type, + elem_type; +} + +class LeafAssocArray : Leaf +{ + ushort key_type, + elem_type; +} + +class LeafDelegate : Leaf +{ + ushort this_type, + func_type; +}