From: Eric Pouech <epouech@codeweavers.com> Signed-off-by: Eric Pouech <epouech@codeweavers.com> --- include/wine/mscvpdb.h | 14 ++++++++++++++ tools/winedump/msc.c | 29 +++++++++++++++++++++++------ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/include/wine/mscvpdb.h b/include/wine/mscvpdb.h index 34752d9526b..56c2be41796 100644 --- a/include/wine/mscvpdb.h +++ b/include/wine/mscvpdb.h @@ -2127,6 +2127,20 @@ union codeview_symbol cv_typ_t typeid; unsigned int rgl[]; } oem_v3; + + struct + { + unsigned short len; + unsigned short id; + unsigned int base_offset; + unsigned short base_section; + unsigned short switch_type; + unsigned int branch_offset; + unsigned int table_offset; + unsigned short branch_section; + unsigned short table_section; + unsigned int number_entries; + } armswitchtable; }; enum BinaryAnnotationOpcode diff --git a/tools/winedump/msc.c b/tools/winedump/msc.c index 7dd89e3b6da..fe79b964859 100644 --- a/tools/winedump/msc.c +++ b/tools/winedump/msc.c @@ -1440,12 +1440,21 @@ BOOL codeview_dump_symbols(const void* root, unsigned long start, unsigned long case S_PROCREF: case S_LPROCREF: case S_TOKENREF: - printf("%sref V3 '%s' %04x:%08x name:%08x\n", - sym->generic.id == S_DATAREF ? "Data" : - (sym->generic.id == S_PROCREF ? "Proc" : - (sym->generic.id == S_LPROCREF ? "Lproc" : "Token")), - get_symbol_str(sym->refsym2_v3.name), - sym->refsym2_v3.imod, sym->refsym2_v3.ibSym, sym->refsym2_v3.sumName); + case S_ANNOTATIONREF: + { + const char *kind; + switch (sym->generic.id) + { + case S_DATAREF: kind = "Data"; break; + case S_PROCREF: kind = "Proc"; break; + case S_LPROCREF: kind = "LProc"; break; + case S_TOKENREF: kind = "Token"; break; + case S_ANNOTATIONREF: kind = "Annotation"; break; + default: kind = "----"; break; + } + printf("%sref V3 '%s' %04x:%08x name:%08x\n", kind, get_symbol_str(sym->refsym2_v3.name), + sym->refsym2_v3.imod, sym->refsym2_v3.ibSym, sym->refsym2_v3.sumName); + } break; /* @@ -2004,6 +2013,14 @@ BOOL codeview_dump_symbols(const void* root, unsigned long start, unsigned long } break; + case S_ARMSWITCHTABLE: + printf("ARM switch table type=%u base=%04x:%08x branch=%04x:%08x table=%04x:%08x entries=#%u\n", + sym->armswitchtable.switch_type, + sym->armswitchtable.base_section, sym->armswitchtable.base_offset, + sym->armswitchtable.branch_section, sym->armswitchtable.branch_offset, + sym->armswitchtable.table_section, sym->armswitchtable.table_offset, + sym->armswitchtable.number_entries); + 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, " "); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10020