winedump: Added definition and dumping of thread local variables.
authorEric Pouech <eric.pouech@orange.fr>
Sat, 29 Jan 2011 19:37:58 +0000 (20:37 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 31 Jan 2011 13:08:37 +0000 (14:08 +0100)
include/wine/mscvpdb.h
tools/winedump/msc.c

index e72bee5..4755c5a 100644 (file)
@@ -1548,6 +1548,36 @@ union codeview_symbol
         char                    name[1];
     } compiland_v3;
 
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            offset;
+        unsigned short          segment;
+        unsigned short          symtype;
+        struct p_string         p_name;
+    } thread_v1;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            symtype;
+        unsigned int            offset;
+        unsigned short          segment;
+        struct p_string         p_name;
+    } thread_v2;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            symtype;
+        unsigned int            offset;
+        unsigned short          segment;
+        char                    name[1];
+    } thread_v3;
+
     struct
     {
         short int               len;
@@ -1646,6 +1676,8 @@ union codeview_symbol
 #define S_LPROC_V3      0x110F
 #define S_GPROC_V3      0x1110
 #define S_REGREL_V3     0x1111
+#define S_LTHREAD_V3    0x1112
+#define S_GTHREAD_V3    0x1113
 #define S_MSTOOL_V3     0x1116  /* compiler command line options and build information */
 #define S_PUB_FUNC1_V3  0x1125  /* didn't get the difference between the two */
 #define S_PUB_FUNC2_V3  0x1127
index 5b276fb..950eb59 100644 (file)
@@ -1352,6 +1352,29 @@ int codeview_dump_symbols(const void* root, unsigned long size)
                    *(const unsigned*)((const char*)sym + 4), (const char*)sym + 8);
             break;
 
+        case S_LTHREAD_V1:
+        case S_GTHREAD_V1:
+            printf("\tS-Thread %s Var V1 '%s' seg=%04x offset=%08x type=%x\n",
+                   sym->generic.id == S_LTHREAD_V1 ? "global" : "local",
+                   p_string(&sym->thread_v1.p_name),
+                   sym->thread_v1.segment, sym->thread_v1.offset, sym->thread_v1.symtype);
+            break;
+
+        case S_LTHREAD_V2:
+        case S_GTHREAD_V2:
+            printf("\tS-Thread %s Var V2 '%s' seg=%04x offset=%08x type=%x\n",
+                   sym->generic.id == S_LTHREAD_V2 ? "global" : "local",
+                   p_string(&sym->thread_v2.p_name),
+                   sym->thread_v2.segment, sym->thread_v2.offset, sym->thread_v2.symtype);
+            break;
+
+        case S_LTHREAD_V3:
+        case S_GTHREAD_V3:
+            printf("\tS-Thread %s Var V3 '%s' seg=%04x offset=%08x type=%x\n",
+                   sym->generic.id == S_LTHREAD_V3 ? "global" : "local", sym->thread_v3.name,
+                   sym->thread_v3.segment, sym->thread_v3.offset, sym->thread_v3.symtype);
+            break;
+
         default:
             printf(">>> Unsupported symbol-id %x sz=%d\n", sym->generic.id, sym->generic.len + 2);
             dump_data((const void*)sym, sym->generic.len + 2, "  ");