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