Signed-off-by: Eric Pouech eric.pouech@gmail.com
--- dlls/dbghelp/msc.c | 4 ++-- include/wine/mscvpdb.h | 4 ++-- tools/winedump/msc.c | 32 +++++++++++++++++++++++++------- 3 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/dlls/dbghelp/msc.c b/dlls/dbghelp/msc.c index 380511d0b55..f77592664ef 100644 --- a/dlls/dbghelp/msc.c +++ b/dlls/dbghelp/msc.c @@ -2058,7 +2058,7 @@ static BOOL codeview_snarf_public(const struct msc_debug_info* msc_dbg, const BY { symt_new_public(msc_dbg->module, compiland, terminate_string(&sym->public_v1.p_name), - sym->public_v1.symtype == SYMTYPE_FUNCTION, + sym->public_v1.pubsymflags == SYMTYPE_FUNCTION, codeview_get_address(msc_dbg, sym->public_v1.segment, sym->public_v1.offset), 1); } break; @@ -2067,7 +2067,7 @@ static BOOL codeview_snarf_public(const struct msc_debug_info* msc_dbg, const BY { symt_new_public(msc_dbg->module, compiland, terminate_string(&sym->public_v2.p_name), - sym->public_v2.symtype == SYMTYPE_FUNCTION, + sym->public_v2.pubsymflags == SYMTYPE_FUNCTION, codeview_get_address(msc_dbg, sym->public_v2.segment, sym->public_v2.offset), 1); } break; diff --git a/include/wine/mscvpdb.h b/include/wine/mscvpdb.h index 2ed9a9fe192..9e544108bdd 100644 --- a/include/wine/mscvpdb.h +++ b/include/wine/mscvpdb.h @@ -1368,7 +1368,7 @@ union codeview_symbol unsigned short int id; unsigned int offset; unsigned short segment; - cv_typ16_t symtype; + unsigned short pubsymflags; struct p_string p_name; } public_v1;
@@ -1376,7 +1376,7 @@ union codeview_symbol { unsigned short int len; unsigned short int id; - cv_typ_t symtype; + unsigned int pubsymflags; unsigned int offset; unsigned short segment; struct p_string p_name; diff --git a/tools/winedump/msc.c b/tools/winedump/msc.c index 7f93f3e7701..c7ca3eea77a 100644 --- a/tools/winedump/msc.c +++ b/tools/winedump/msc.c @@ -457,6 +457,20 @@ static const char* get_callconv(unsigned cc) return callconv; }
+static const char* get_pubflags(unsigned flags) +{ + static char ret[32]; + + ret[0] = '\0'; +#define X(s) {if (ret[0]) strcat(ret, ";"); strcat(ret, s);} + if (flags & 1) X("code"); + if (flags & 2) X("func"); + if (flags & 4) X("manage"); + if (flags & 8) X("msil"); +#undef X + return ret; +} + static void do_field(const unsigned char* start, const unsigned char* end) { /* @@ -1134,21 +1148,25 @@ BOOL codeview_dump_symbols(const void* root, unsigned long size) sym->data_v3.symtype); break;
+ case S_PUB32_16t: + printf("\tS-Public V1 '%s' %04x:%08x flags:%s\n", + get_symbol_str(p_string(&sym->public_v1.p_name)), + sym->public_v1.segment, sym->public_v1.offset, + get_pubflags(sym->public_v1.pubsymflags)); + break; + case S_PUB32_ST: - printf("\tS-Public V2 '%s' %04x:%08x type:%08x\n", + printf("\tS-Public V2 '%s' %04x:%08x flags:%s\n", get_symbol_str(p_string(&sym->public_v2.p_name)), sym->public_v2.segment, sym->public_v2.offset, - sym->public_v2.symtype); + get_pubflags(sym->public_v2.pubsymflags)); break;
case S_PUB32: - printf("\tS-Public V3 '%s' %04x:%08x flags%s%s%s%s\n", + printf("\tS-Public V3 '%s' %04x:%08x flags:%s\n", get_symbol_str(sym->public_v3.name), sym->public_v3.segment, sym->public_v3.offset, - (sym->public_v3.pubsymflags & 1) ? "-code" : "", - (sym->public_v3.pubsymflags & 2) ? "-func" : "", - (sym->public_v3.pubsymflags & 4) ? "-manage" : "", - (sym->public_v3.pubsymflags & 8) ? "-msil" : ""); + get_pubflags(sym->public_v3.pubsymflags)); break;
case S_DATAREF: