From 5b4e192aca75d338181e6f262a0f39e1731e142a Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Sat, 29 Jan 2011 20:37:58 +0100 Subject: [PATCH] winedump: Added definition and dumping of thread local variables. --- include/wine/mscvpdb.h | 32 ++++++++++++++++++++++++++++++++ tools/winedump/msc.c | 23 +++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/include/wine/mscvpdb.h b/include/wine/mscvpdb.h index e72bee5a350..4755c5a8638 100644 --- a/include/wine/mscvpdb.h +++ b/include/wine/mscvpdb.h @@ -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 diff --git a/tools/winedump/msc.c b/tools/winedump/msc.c index 5b276fb8634..950eb599353 100644 --- a/tools/winedump/msc.c +++ b/tools/winedump/msc.c @@ -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, " ");