From b164155447907390e53a02fcfef916dd29325570 Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Sat, 9 Oct 2010 08:51:02 +0200 Subject: [PATCH] dbghelp: Added a couple of missing CodeView base types (used in 64bit compilation). --- dlls/dbghelp/msc.c | 93 ++++++++++++++++++++++++++++-------------- include/wine/mscvpdb.h | 33 +++++++++++++++ 2 files changed, 95 insertions(+), 31 deletions(-) diff --git a/dlls/dbghelp/msc.c b/dlls/dbghelp/msc.c index ee394cd946c..4c41ee06047 100644 --- a/dlls/dbghelp/msc.c +++ b/dlls/dbghelp/msc.c @@ -95,7 +95,7 @@ static void dump(const void* ptr, unsigned len) * Process CodeView type information. */ -#define MAX_BUILTIN_TYPES 0x0604 +#define MAX_BUILTIN_TYPES 0x06FF #define FIRST_DEFINABLE_TYPE 0x1000 static struct symt* cv_basic_types[MAX_BUILTIN_TYPES]; @@ -145,37 +145,68 @@ static void codeview_init_basic_types(struct module* module) cv_basic_types[T_UINT8] = &symt_new_basic(module, btUInt, "UINT8", 8)->symt; cv_basic_types[T_HRESULT]= &symt_new_basic(module, btUInt, "HRESULT", 4)->symt; - cv_basic_types[T_32PVOID] = &symt_new_pointer(module, cv_basic_types[T_VOID])->symt; - cv_basic_types[T_32PCHAR] = &symt_new_pointer(module, cv_basic_types[T_CHAR])->symt; - cv_basic_types[T_32PSHORT] = &symt_new_pointer(module, cv_basic_types[T_SHORT])->symt; - cv_basic_types[T_32PLONG] = &symt_new_pointer(module, cv_basic_types[T_LONG])->symt; - cv_basic_types[T_32PQUAD] = &symt_new_pointer(module, cv_basic_types[T_QUAD])->symt; - cv_basic_types[T_32PUCHAR] = &symt_new_pointer(module, cv_basic_types[T_UCHAR])->symt; - cv_basic_types[T_32PUSHORT] = &symt_new_pointer(module, cv_basic_types[T_USHORT])->symt; - cv_basic_types[T_32PULONG] = &symt_new_pointer(module, cv_basic_types[T_ULONG])->symt; - cv_basic_types[T_32PUQUAD] = &symt_new_pointer(module, cv_basic_types[T_UQUAD])->symt; - cv_basic_types[T_32PBOOL08] = &symt_new_pointer(module, cv_basic_types[T_BOOL08])->symt; - cv_basic_types[T_32PBOOL16] = &symt_new_pointer(module, cv_basic_types[T_BOOL16])->symt; - cv_basic_types[T_32PBOOL32] = &symt_new_pointer(module, cv_basic_types[T_BOOL32])->symt; - cv_basic_types[T_32PBOOL64] = &symt_new_pointer(module, cv_basic_types[T_BOOL64])->symt; - cv_basic_types[T_32PREAL32] = &symt_new_pointer(module, cv_basic_types[T_REAL32])->symt; - cv_basic_types[T_32PREAL64] = &symt_new_pointer(module, cv_basic_types[T_REAL64])->symt; - cv_basic_types[T_32PREAL80] = &symt_new_pointer(module, cv_basic_types[T_REAL80])->symt; - cv_basic_types[T_32PRCHAR] = &symt_new_pointer(module, cv_basic_types[T_RCHAR])->symt; - cv_basic_types[T_32PWCHAR] = &symt_new_pointer(module, cv_basic_types[T_WCHAR])->symt; - cv_basic_types[T_32PINT2] = &symt_new_pointer(module, cv_basic_types[T_INT2])->symt; - cv_basic_types[T_32PUINT2] = &symt_new_pointer(module, cv_basic_types[T_UINT2])->symt; - cv_basic_types[T_32PINT4] = &symt_new_pointer(module, cv_basic_types[T_INT4])->symt; - cv_basic_types[T_32PUINT4] = &symt_new_pointer(module, cv_basic_types[T_UINT4])->symt; - cv_basic_types[T_32PINT8] = &symt_new_pointer(module, cv_basic_types[T_INT8])->symt; - cv_basic_types[T_32PUINT8] = &symt_new_pointer(module, cv_basic_types[T_UINT8])->symt; - cv_basic_types[T_32PHRESULT]= &symt_new_pointer(module, cv_basic_types[T_HRESULT])->symt; + if (sizeof(void*) == 4) + { + cv_basic_types[T_32PVOID] = &symt_new_pointer(module, cv_basic_types[T_VOID])->symt; + cv_basic_types[T_32PCHAR] = &symt_new_pointer(module, cv_basic_types[T_CHAR])->symt; + cv_basic_types[T_32PSHORT] = &symt_new_pointer(module, cv_basic_types[T_SHORT])->symt; + cv_basic_types[T_32PLONG] = &symt_new_pointer(module, cv_basic_types[T_LONG])->symt; + cv_basic_types[T_32PQUAD] = &symt_new_pointer(module, cv_basic_types[T_QUAD])->symt; + cv_basic_types[T_32PUCHAR] = &symt_new_pointer(module, cv_basic_types[T_UCHAR])->symt; + cv_basic_types[T_32PUSHORT] = &symt_new_pointer(module, cv_basic_types[T_USHORT])->symt; + cv_basic_types[T_32PULONG] = &symt_new_pointer(module, cv_basic_types[T_ULONG])->symt; + cv_basic_types[T_32PUQUAD] = &symt_new_pointer(module, cv_basic_types[T_UQUAD])->symt; + cv_basic_types[T_32PBOOL08] = &symt_new_pointer(module, cv_basic_types[T_BOOL08])->symt; + cv_basic_types[T_32PBOOL16] = &symt_new_pointer(module, cv_basic_types[T_BOOL16])->symt; + cv_basic_types[T_32PBOOL32] = &symt_new_pointer(module, cv_basic_types[T_BOOL32])->symt; + cv_basic_types[T_32PBOOL64] = &symt_new_pointer(module, cv_basic_types[T_BOOL64])->symt; + cv_basic_types[T_32PREAL32] = &symt_new_pointer(module, cv_basic_types[T_REAL32])->symt; + cv_basic_types[T_32PREAL64] = &symt_new_pointer(module, cv_basic_types[T_REAL64])->symt; + cv_basic_types[T_32PREAL80] = &symt_new_pointer(module, cv_basic_types[T_REAL80])->symt; + cv_basic_types[T_32PRCHAR] = &symt_new_pointer(module, cv_basic_types[T_RCHAR])->symt; + cv_basic_types[T_32PWCHAR] = &symt_new_pointer(module, cv_basic_types[T_WCHAR])->symt; + cv_basic_types[T_32PINT2] = &symt_new_pointer(module, cv_basic_types[T_INT2])->symt; + cv_basic_types[T_32PUINT2] = &symt_new_pointer(module, cv_basic_types[T_UINT2])->symt; + cv_basic_types[T_32PINT4] = &symt_new_pointer(module, cv_basic_types[T_INT4])->symt; + cv_basic_types[T_32PUINT4] = &symt_new_pointer(module, cv_basic_types[T_UINT4])->symt; + cv_basic_types[T_32PINT8] = &symt_new_pointer(module, cv_basic_types[T_INT8])->symt; + cv_basic_types[T_32PUINT8] = &symt_new_pointer(module, cv_basic_types[T_UINT8])->symt; + cv_basic_types[T_32PHRESULT]= &symt_new_pointer(module, cv_basic_types[T_HRESULT])->symt; - /* The .pdb file can refer to 64 bit pointers values even on 32 bits applications. */ - udt = symt_new_udt(module, "PVOID64", 8, UdtStruct); - symt_add_udt_element(module, udt, "ptr64_low", cv_basic_types[T_LONG], 0, 32); - symt_add_udt_element(module, udt, "ptr64_high", cv_basic_types[T_LONG], 32, 32); - cv_basic_types[0x603]= &udt->symt; + /* The .pdb file can refer to 64 bit pointers values even on 32 bits applications. */ + udt = symt_new_udt(module, "PVOID64", 8, UdtStruct); + symt_add_udt_element(module, udt, "ptr64_low", cv_basic_types[T_LONG], 0, 32); + symt_add_udt_element(module, udt, "ptr64_high", cv_basic_types[T_LONG], 32, 32); + cv_basic_types[T_64PVOID]= &udt->symt; + } + else + { + cv_basic_types[T_64PVOID] = &symt_new_pointer(module, cv_basic_types[T_VOID])->symt; + cv_basic_types[T_64PCHAR] = &symt_new_pointer(module, cv_basic_types[T_CHAR])->symt; + cv_basic_types[T_64PSHORT] = &symt_new_pointer(module, cv_basic_types[T_SHORT])->symt; + cv_basic_types[T_64PLONG] = &symt_new_pointer(module, cv_basic_types[T_LONG])->symt; + cv_basic_types[T_64PQUAD] = &symt_new_pointer(module, cv_basic_types[T_QUAD])->symt; + cv_basic_types[T_64PUCHAR] = &symt_new_pointer(module, cv_basic_types[T_UCHAR])->symt; + cv_basic_types[T_64PUSHORT] = &symt_new_pointer(module, cv_basic_types[T_USHORT])->symt; + cv_basic_types[T_64PULONG] = &symt_new_pointer(module, cv_basic_types[T_ULONG])->symt; + cv_basic_types[T_64PUQUAD] = &symt_new_pointer(module, cv_basic_types[T_UQUAD])->symt; + cv_basic_types[T_64PBOOL08] = &symt_new_pointer(module, cv_basic_types[T_BOOL08])->symt; + cv_basic_types[T_64PBOOL16] = &symt_new_pointer(module, cv_basic_types[T_BOOL16])->symt; + cv_basic_types[T_64PBOOL32] = &symt_new_pointer(module, cv_basic_types[T_BOOL32])->symt; + cv_basic_types[T_64PBOOL64] = &symt_new_pointer(module, cv_basic_types[T_BOOL64])->symt; + cv_basic_types[T_64PREAL32] = &symt_new_pointer(module, cv_basic_types[T_REAL32])->symt; + cv_basic_types[T_64PREAL64] = &symt_new_pointer(module, cv_basic_types[T_REAL64])->symt; + cv_basic_types[T_64PREAL80] = &symt_new_pointer(module, cv_basic_types[T_REAL80])->symt; + cv_basic_types[T_64PRCHAR] = &symt_new_pointer(module, cv_basic_types[T_RCHAR])->symt; + cv_basic_types[T_64PWCHAR] = &symt_new_pointer(module, cv_basic_types[T_WCHAR])->symt; + cv_basic_types[T_64PINT2] = &symt_new_pointer(module, cv_basic_types[T_INT2])->symt; + cv_basic_types[T_64PUINT2] = &symt_new_pointer(module, cv_basic_types[T_UINT2])->symt; + cv_basic_types[T_64PINT4] = &symt_new_pointer(module, cv_basic_types[T_INT4])->symt; + cv_basic_types[T_64PUINT4] = &symt_new_pointer(module, cv_basic_types[T_UINT4])->symt; + cv_basic_types[T_64PINT8] = &symt_new_pointer(module, cv_basic_types[T_INT8])->symt; + cv_basic_types[T_64PUINT8] = &symt_new_pointer(module, cv_basic_types[T_UINT8])->symt; + cv_basic_types[T_64PHRESULT]= &symt_new_pointer(module, cv_basic_types[T_HRESULT])->symt; + } } static int leaf_as_variant(VARIANT* v, const unsigned short int* leaf) diff --git a/include/wine/mscvpdb.h b/include/wine/mscvpdb.h index 2aefa879a90..c9bdb4f212d 100644 --- a/include/wine/mscvpdb.h +++ b/include/wine/mscvpdb.h @@ -996,6 +996,7 @@ union codeview_fieldtype /* 32-bit far pointers to basic types */ #define T_32PFVOID 0x0503 /* 32-bit far pointer to void */ +#define T_32PFHRESULT 0x0508 /* 16:32 far pointer to HRESULT - or error code ??? */ #define T_32PFCHAR 0x0510 /* 16:32 far pointer to 8-bit signed */ #define T_32PFSHORT 0x0511 /* 16:32 far pointer to 16-bit signed */ #define T_32PFLONG 0x0512 /* 16:32 far pointer to 32-bit signed */ @@ -1026,6 +1027,38 @@ union codeview_fieldtype #define T_32PFINT8 0x0576 /* 16:32 far pointer to 64-bit signed int */ #define T_32PFUINT8 0x0577 /* 16:32 far pointer to 64-bit unsigned int */ +/* 64-bit near pointers to basic types */ +#define T_64PVOID 0x0603 /* 64-bit near pointer to void */ +#define T_64PHRESULT 0x0608 /* 64 near pointer to HRESULT - or error code ??? */ +#define T_64PCHAR 0x0610 /* 64 near pointer to 8-bit signed */ +#define T_64PSHORT 0x0611 /* 64 near pointer to 16-bit signed */ +#define T_64PLONG 0x0612 /* 64 near pointer to 32-bit signed */ +#define T_64PQUAD 0x0613 /* 64 near pointer to 64-bit signed */ +#define T_64PUCHAR 0x0620 /* 64 near pointer to 8-bit unsigned */ +#define T_64PUSHORT 0x0621 /* 64 near pointer to 16-bit unsigned */ +#define T_64PULONG 0x0622 /* 64 near pointer to 32-bit unsigned */ +#define T_64PUQUAD 0x0623 /* 64 near pointer to 64-bit unsigned */ +#define T_64PBOOL08 0x0630 /* 64 near pointer to 8-bit Boolean */ +#define T_64PBOOL16 0x0631 /* 64 near pointer to 16-bit Boolean */ +#define T_64PBOOL32 0x0632 /* 64 near pointer to 32-bit Boolean */ +#define T_64PBOOL64 0x0633 /* 64 near pointer to 64-bit Boolean */ +#define T_64PREAL32 0x0640 /* 64 near pointer to 32-bit real */ +#define T_64PREAL64 0x0641 /* 64 near pointer to 64-bit real */ +#define T_64PREAL80 0x0642 /* 64 near pointer to 80-bit real */ +#define T_64PREAL128 0x0643 /* 64 near pointer to 128-bit real */ +#define T_64PREAL48 0x0644 /* 64 near pointer to 48-bit real */ +#define T_64PCPLX32 0x0650 /* 64 near pointer to 32-bit complex */ +#define T_64PCPLX64 0x0651 /* 64 near pointer to 64-bit complex */ +#define T_64PCPLX80 0x0652 /* 64 near pointer to 80-bit complex */ +#define T_64PCPLX128 0x0653 /* 64 near pointer to 128-bit complex */ +#define T_64PRCHAR 0x0670 /* 64 near pointer to a real char */ +#define T_64PWCHAR 0x0671 /* 64 near pointer to a wide char */ +#define T_64PINT2 0x0672 /* 64 near pointer to 16-bit signed int */ +#define T_64PUINT2 0x0673 /* 64 near pointer to 16-bit unsigned int */ +#define T_64PINT4 0x0674 /* 64 near pointer to 32-bit signed int */ +#define T_64PUINT4 0x0675 /* 64 near pointer to 32-bit unsigned int */ +#define T_64PINT8 0x0676 /* 64 near pointer to 64-bit signed int */ +#define T_64PUINT8 0x0677 /* 64 near pointer to 64-bit unsigned int */ /* counts, bit masks, and shift values needed to access various parts of the built-in type numbers */ #define T_MAXPREDEFINEDTYPE 0x0580 /* maximum type index for all built-in types */