winedump: Add some more codeview entries.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Eric Pouech 2021-11-10 16:42:41 +01:00 committed by Alexandre Julliard
parent a15e1e8150
commit f1e0753cdd
2 changed files with 69 additions and 0 deletions

View file

@ -482,6 +482,17 @@ union codeview_reftype
unsigned num;
cv_typ_t drvdcls[1];
} derived_v2;
struct
{
unsigned short int len;
unsigned short int id;
cv_typ_t type;
cv_typ_t baseVftable;
unsigned offsetInObjectLayout;
unsigned cbstr;
char names[1]; /* array of len 0-terminated strings (size of cbstr in char:s) */
} vftable_v3;
};
union codeview_fieldtype
@ -1287,6 +1298,7 @@ union codeview_fieldtype
#define LF_METHOD_V3 0x150f
#define LF_NESTTYPE_V3 0x1510
#define LF_ONEMETHOD_V3 0x1511
#define LF_VFTABLE_V3 0x151d
/* leaves found in second type type (aka IPI)
* for simplicity, stored in the same union as other TPI leaves
@ -1988,6 +2000,30 @@ union codeview_symbol
unsigned short int id;
char name[1];
} unamespace_v3;
struct
{
unsigned short int len;
unsigned short int id;
unsigned int pParent;
unsigned int pEnd;
unsigned int length;
unsigned int scf; /* CV_SEPCODEFLAGS */
unsigned int off;
unsigned int offParent;
unsigned short int sect;
unsigned short int sectParent;
} sepcode_v3;
struct
{
unsigned short int len;
unsigned short int id;
unsigned int off;
unsigned short int seg;
unsigned short int csz; /* number of bytes in following array */
char rgsz[1]; /* array of null terminated strings (bounded by csz) */
} annotation_v3;
};
enum BinaryAnnotationOpcode
@ -2061,6 +2097,7 @@ enum BinaryAnnotationOpcode
#define S_GTHREAD32_ST 0x100f
#define S_FRAMEPROC 0x1012
#define S_COMPILE2_ST 0x1013
#define S_ANNOTATION 0x1019
#define S_UNAMESPACE_ST 0x1029
#define S_OBJNAME 0x1101

View file

@ -1102,6 +1102,20 @@ static void codeview_dump_one_type(unsigned curr_type, const union codeview_type
printf("\n");
break;
case LF_VFTABLE_V3:
printf("\t%x => VFTable V3 base:%x baseVfTable:%x offset%u\n",
curr_type, reftype->vftable_v3.type, reftype->vftable_v3.baseVftable, reftype->vftable_v3.offsetInObjectLayout);
{
const char* str = reftype->vftable_v3.names;
const char* last = str + reftype->vftable_v3.cbstr;
while (str < last)
{
printf("\t\t%s\n", str);
str += strlen(str) + 1;
}
}
break;
/* types from IPI (aka #4) stream */
case LF_FUNC_ID:
printf("\t%x => FuncId %s scopeId:%04x type:%04x\n",
@ -1867,6 +1881,24 @@ BOOL codeview_dump_symbols(const void* root, unsigned long size)
printf("UNameSpace V3 '%s'\n", sym->unamespace_v3.name);
break;
case S_SEPCODE:
printf("SepCode V3 pParent:%x pEnd:%x separated:%04x:%08x (#%u) from %04x:%08x\n",
sym->sepcode_v3.pParent, sym->sepcode_v3.pEnd,
sym->sepcode_v3.sect, sym->sepcode_v3.off, sym->sepcode_v3.length,
sym->sepcode_v3.sectParent, sym->sepcode_v3.offParent);
break;
case S_ANNOTATION:
printf("Annotation V3 %04x:%08x\n",
sym->annotation_v3.seg, sym->annotation_v3.off);
{
const char* ptr = sym->annotation_v3.rgsz;
const char* last = ptr + sym->annotation_v3.csz;
for (; ptr < last; ptr += strlen(ptr) + 1)
printf("\t%s\n", ptr);
}
break;
default:
printf("\n\t\t>>> Unsupported symbol-id %x sz=%d\n", sym->generic.id, sym->generic.len + 2);
dump_data((const void*)sym, sym->generic.len + 2, " ");