📄 cvinfo.h
字号:
// signed character leaf
typedef struct lfChar {
unsigned short leaf; // LF_CHAR
signed char val; // signed 8-bit value
} lfChar;
// signed short leaf
typedef struct lfShort {
unsigned short leaf; // LF_SHORT
short val; // signed 16-bit value
} lfShort;
// unsigned short leaf
typedef struct lfUShort {
unsigned short leaf; // LF_unsigned short
unsigned short val; // unsigned 16-bit value
} lfUShort;
// signed long leaf
typedef struct lfLong {
unsigned short leaf; // LF_LONG
long val; // signed 32-bit value
} lfLong;
// unsigned long leaf
typedef struct lfULong {
unsigned short leaf; // LF_ULONG
unsigned long val; // unsigned 32-bit value
} lfULong;
// signed quad leaf
typedef struct lfQuad {
unsigned short leaf; // LF_QUAD
unsigned char val[8]; // signed 64-bit value
} lfQuad;
// unsigned quad leaf
typedef struct lfUQuad {
unsigned short leaf; // LF_UQUAD
unsigned char val[8]; // unsigned 64-bit value
} lfUQuad;
#if CC_BIGINT
// signed int128 leaf
typedef struct lfOct {
unsigned short leaf; // LF_OCT
unsigned char val[16]; // signed 128-bit value
} lfOct;
// unsigned int128 leaf
typedef struct lfUOct {
unsigned short leaf; // LF_UOCT
unsigned char val[16]; // unsigned 128-bit value
} lfUOct;
#endif
// real 32-bit leaf
typedef struct lfReal32 {
unsigned short leaf; // LF_REAL32
float val; // 32-bit real value
} lfReal32;
// real 48-bit leaf
typedef struct lfReal48 {
unsigned short leaf; // LF_REAL48
unsigned char val[6]; // 48-bit real value
} lfReal48;
// real 64-bit leaf
typedef struct lfReal64 {
unsigned short leaf; // LF_REAL64
double val; // 64-bit real value
} lfReal64;
// real 80-bit leaf
typedef struct lfReal80 {
unsigned short leaf; // LF_REAL80
FLOAT10 val; // real 80-bit value
} lfReal80;
// real 128-bit leaf
typedef struct lfReal128 {
unsigned short leaf; // LF_REAL128
char val[16]; // real 128-bit value
} lfReal128;
// complex 32-bit leaf
typedef struct lfCmplx32 {
unsigned short leaf; // LF_COMPLEX32
float val_real; // real component
float val_imag; // imaginary component
} lfCmplx32;
// complex 64-bit leaf
typedef struct lfCmplx64 {
unsigned short leaf; // LF_COMPLEX64
double val_real; // real component
double val_imag; // imaginary component
} flCmplx64;
// complex 80-bit leaf
typedef struct lfCmplx80 {
unsigned short leaf; // LF_COMPLEX80
FLOAT10 val_real; // real component
FLOAT10 val_imag; // imaginary component
} lfCmplx80;
// complex 128-bit leaf
typedef struct lfCmplx128 {
unsigned short leaf; // LF_COMPLEX128
char val_real[16]; // real component
char val_imag[16]; // imaginary component
} lfCmplx128;
// variable length numeric field
typedef struct lfVarString {
unsigned short leaf; // LF_VARSTRING
unsigned short len; // length of value in bytes
unsigned char value[CV_ZEROLEN]; // value
} lfVarString;
//***********************************************************************
// index leaf - contains type index of another leaf
// a major use of this leaf is to allow the compilers to emit a
// long complex list (LF_FIELD) in smaller pieces.
typedef struct lfIndex {
unsigned short leaf; // LF_INDEX
unsigned short pad ;
CV_typ_t index; // type index of referenced leaf
} lfIndex;
// subfield record for base class field
typedef struct lfBClass {
unsigned short leaf; // LF_BCLASS
CV_fldattr_t attr; // attribute
CV_typ_t index; // type index of base class
unsigned char offset[CV_ZEROLEN]; // variable length offset of base within class
} lfBClass;
// subfield record for direct and indirect virtual base class field
typedef struct lfVBClass {
unsigned short leaf; // LF_VBCLASS | LV_IVBCLASS
CV_fldattr_t attr; // attribute
CV_typ_t index; // type index of direct virtual base class
CV_typ_t vbptr; // type index of virtual base pointer
unsigned char vbpoff[CV_ZEROLEN]; // virtual base pointer offset from address point
// followed by virtual base offset from vbtable
} lfVBClass;
// subfield record for friend class
typedef struct lfFriendCls {
unsigned short leaf; // LF_FRIENDCLS
CV_typ_t index; // index to type record of friend class
} lfFriendCls;
// subfield record for friend function
typedef struct lfFriendFcn {
unsigned short leaf; // LF_FRIENDFCN
CV_typ_t index; // index to type record of friend function
char Name[1]; // name of friend function
} lfFriendFcn;
// subfield record for non-static data members
typedef struct lfMember {
unsigned short leaf; // LF_MEMBER
CV_fldattr_t attr; // attribute mask
CV_typ_t index; // index of type record for field
unsigned char offset[CV_ZEROLEN]; // variable length offset of field followed
// by length prefixed name of field
} lfMember;
// type record for static data members
typedef struct lfSTMember {
unsigned short leaf; // LF_STMEMBER
CV_fldattr_t attr; // attribute mask
CV_typ_t index; // index of type record for field
char Name[1]; // length prefixed name of field
} lfSTMember;
// subfield record for virtual function table pointer
typedef struct lfVFuncTab {
unsigned short leaf; // LF_VFUNCTAB
CV_typ_t type; // type index of pointer
} lfVFuncTab;
// subfield record for virtual function table pointer with offset
typedef struct lfVFuncOff {
unsigned short leaf; // LF_VFUNCTAB
unsigned short pad ;
CV_typ_t type; // type index of pointer
CV_off32_t offset; // offset of virtual function table pointer
} lfVFuncOff;
// subfield record for overloaded method list
typedef struct lfMethod {
unsigned short leaf; // LF_METHOD
unsigned short count; // number of occurances of function
CV_typ_t mList; // index to LF_METHODLIST record
char Name[1]; // length prefixed name of method
} lfMethod;
// subfield record for nonoverloaded method
typedef struct lfOneMethod {
unsigned short leaf; // LF_ONEMETHOD
CV_fldattr_t attr; // method attribute
CV_typ_t index; // index to type record for procedure
unsigned long vbaseoff[CV_ZEROLEN]; // offset in vfunctable if
// intro virtual followed by
// length prefixed name of method
} lfOneMethod;
// subfield record for enumerate
typedef struct lfEnumerate {
unsigned short leaf; // LF_ENUMERATE
CV_fldattr_t attr; // access
unsigned char value[CV_ZEROLEN]; // variable length value field followed
// by length prefixed name
} lfEnumerate;
// type record for nested (scoped) type definition
typedef struct lfNestType {
unsigned short leaf; // LF_NESTTYPE
CV_typ_t index; // index of nested type definition
unsigned char Name[1]; // length prefixed type name
} lfNestType;
// type record for pad leaf
typedef struct lfPad {
unsigned char leaf;
} SYM_PAD;
// Symbol definitions
typedef enum SYM_ENUM_e {
S_COMPILE = 0x0001, // Compile flags symbol
S_SSEARCH = 0x0005, // Start Search
S_END = 0x0006, // Block, procedure, "with" or thunk end
S_SKIP = 0x0007, // Reserve symbol space in $$Symbols table
S_CVRESERVE = 0x0008, // Reserved symbol for CV internal use
S_OBJNAME = 0x0009, // path to object file name
S_ENDARG = 0x000a, // end of argument/return list
S_COBOLUDT = 0x000b, // special UDT for cobol that does not symbol pack
S_RETURN = 0x000d, // return description symbol
S_ENTRYTHIS = 0x000e, // description of this pointer on entry
S_BPREL16 = 0x0100, // BP-relative
S_LDATA16 = 0x0101, // Module-local symbol
S_GDATA16 = 0x0102, // Global data symbol
S_PUB16 = 0x0103, // a public symbol
S_LPROC16 = 0x0104, // Local procedure start
S_GPROC16 = 0x0105, // Global procedure start
S_THUNK16 = 0x0106, // Thunk Start
S_BLOCK16 = 0x0107, // block start
S_WITH16 = 0x0108, // with start
S_LABEL16 = 0x0109, // code label
S_CEXMODEL16 = 0x010a, // change execution model
S_VFTABLE16 = 0x010b, // address of virtual function table
S_REGREL16 = 0x010c, // register relative address
S_THUNK32 = 0x0206, // Thunk Start
S_BLOCK32 = 0x0207, // block start
S_WITH32 = 0x0208, // with start
S_LABEL32 = 0x0209, // code label
S_CEXMODEL32 = 0x020a, // change execution model
S_SLINK32 = 0x020f, // static link for MIPS EH implementation
S_LPROCMIPS = 0x0300, // Local procedure start
S_GPROCMIPS = 0x0301, // Global procedure start
S_PROCREF = 0x0400, // Reference to a procedure
S_DATAREF = 0x0401, // Reference to data
S_ALIGN = 0x0402, // Used for page alignment of symbols
S_LPROCREF = 0x0403, // Local Reference to a procedure
S_REGISTER = 0x1001, // Register variable
S_CONSTANT = 0x1002, // constant symbol
S_UDT = 0x1003, // User defined type
S_MANYREG = 0x1005, // Many registers variable
S_BPREL32 = 0x1006, // BP-relative
S_LDATA32 = 0x1007, // Module-local symbol
S_GDATA32 = 0x1008, // Global data symbol
S_PUB32 = 0x1009, // a public symbol (CV internal reserved)
S_LPROC32 = 0x100a, // Local procedure start
S_GPROC32 = 0x100b, // Global procedure start
S_VFTABLE32 = 0x100c, // address of virtual function table
S_REGREL32 = 0x100d, // register relative address
S_LTHREAD32 = 0x100e, // loca
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -