Commit 5b4e192a authored by Eric Pouech's avatar Eric Pouech Committed by Alexandre Julliard

winedump: Added definition and dumping of thread local variables.

parent 321e4c0e
...@@ -1554,6 +1554,36 @@ union codeview_symbol ...@@ -1554,6 +1554,36 @@ union codeview_symbol
short int id; short int id;
unsigned int offset; unsigned int offset;
unsigned short segment; 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;
short int id;
unsigned int offset;
unsigned short segment;
} ssearch_v1; } ssearch_v1;
struct struct
...@@ -1646,6 +1676,8 @@ union codeview_symbol ...@@ -1646,6 +1676,8 @@ union codeview_symbol
#define S_LPROC_V3 0x110F #define S_LPROC_V3 0x110F
#define S_GPROC_V3 0x1110 #define S_GPROC_V3 0x1110
#define S_REGREL_V3 0x1111 #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_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_FUNC1_V3 0x1125 /* didn't get the difference between the two */
#define S_PUB_FUNC2_V3 0x1127 #define S_PUB_FUNC2_V3 0x1127
......
...@@ -1352,6 +1352,29 @@ int codeview_dump_symbols(const void* root, unsigned long size) ...@@ -1352,6 +1352,29 @@ int codeview_dump_symbols(const void* root, unsigned long size)
*(const unsigned*)((const char*)sym + 4), (const char*)sym + 8); *(const unsigned*)((const char*)sym + 4), (const char*)sym + 8);
break; 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: default:
printf(">>> Unsupported symbol-id %x sz=%d\n", sym->generic.id, sym->generic.len + 2); printf(">>> Unsupported symbol-id %x sz=%d\n", sym->generic.id, sym->generic.len + 2);
dump_data((const void*)sym, sym->generic.len + 2, " "); dump_data((const void*)sym, sym->generic.len + 2, " ");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment