Eric Pouech : winedump: Add some more codeview entries.
Alexandre Julliard
julliard at winehq.org
Wed Nov 10 15:34:48 CST 2021
Module: wine
Branch: master
Commit: f1e0753cdd0bf1ae18781d58f1b8db547040dc44
URL: https://source.winehq.org/git/wine.git/?a=commit;h=f1e0753cdd0bf1ae18781d58f1b8db547040dc44
Author: Eric Pouech <eric.pouech at gmail.com>
Date: Wed Nov 10 16:42:41 2021 +0100
winedump: Add some more codeview entries.
Signed-off-by: Eric Pouech <eric.pouech at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
include/wine/mscvpdb.h | 37 +++++++++++++++++++++++++++++++++++++
tools/winedump/msc.c | 32 ++++++++++++++++++++++++++++++++
2 files changed, 69 insertions(+)
diff --git a/include/wine/mscvpdb.h b/include/wine/mscvpdb.h
index f7dcbcb6625..b0021ed3c25 100644
--- a/include/wine/mscvpdb.h
+++ b/include/wine/mscvpdb.h
@@ -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
diff --git a/tools/winedump/msc.c b/tools/winedump/msc.c
index 40daf4d50d5..cd91ea63634 100644
--- a/tools/winedump/msc.c
+++ b/tools/winedump/msc.c
@@ -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, " ");
More information about the wine-cvs
mailing list