Eric Pouech : mscvpdb.h: Update symbol header for linetab2's block size.
Alexandre Julliard
julliard at winehq.org
Tue Nov 2 17:27:45 CDT 2021
Module: wine
Branch: master
Commit: f0b8518333bd58aacb13c975f50b77c134c770f7
URL: https://source.winehq.org/git/wine.git/?a=commit;h=f0b8518333bd58aacb13c975f50b77c134c770f7
Author: Eric Pouech <eric.pouech at gmail.com>
Date: Tue Nov 2 15:31:16 2021 +0100
mscvpdb.h: Update symbol header for linetab2's block size.
Signed-off-by: Eric Pouech <eric.pouech at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/dbghelp/msc.c | 7 ++++---
include/wine/mscvpdb.h | 4 ++--
tools/winedump/pdb.c | 24 ++++++++++++------------
3 files changed, 18 insertions(+), 17 deletions(-)
diff --git a/dlls/dbghelp/msc.c b/dlls/dbghelp/msc.c
index a1f009cf678..4aaee196370 100644
--- a/dlls/dbghelp/msc.c
+++ b/dlls/dbghelp/msc.c
@@ -2424,6 +2424,7 @@ static void pdb_convert_symbol_file(const PDB_SYMBOLS* symbols,
sfile->range.index = sym_file->range.index;
sfile->symbol_size = sym_file->symbol_size;
sfile->lineno_size = sym_file->lineno_size;
+ sfile->lineno2_size = sym_file->lineno2_size;
*size = sizeof(PDB_SYMBOL_FILE) - 1;
}
else
@@ -2818,14 +2819,14 @@ static BOOL pdb_process_internal(const struct process* pcs,
codeview_snarf(msc_dbg, modimage, sizeof(DWORD),
sfile.symbol_size, TRUE);
+ if (sfile.lineno_size && sfile.lineno2_size) FIXME("Both line info present... only supporting first\n");
if (sfile.lineno_size)
codeview_snarf_linetab(msc_dbg,
modimage + sfile.symbol_size,
sfile.lineno_size,
pdb_file->kind == PDB_JG);
- if (files_image)
- codeview_snarf_linetab2(msc_dbg, modimage + sfile.symbol_size + sfile.lineno_size,
- pdb_get_file_size(pdb_file, sfile.file) - sfile.symbol_size - sfile.lineno_size,
+ else if (sfile.lineno2_size && files_image)
+ codeview_snarf_linetab2(msc_dbg, modimage + sfile.symbol_size, sfile.lineno2_size,
files_image + 12, files_size);
pdb_free(modimage);
diff --git a/include/wine/mscvpdb.h b/include/wine/mscvpdb.h
index 1ede937abc4..53eeec96916 100644
--- a/include/wine/mscvpdb.h
+++ b/include/wine/mscvpdb.h
@@ -2343,7 +2343,7 @@ typedef struct _PDB_SYMBOL_FILE
WORD file;
DWORD symbol_size;
DWORD lineno_size;
- DWORD unknown2;
+ DWORD lineno2_size;
DWORD nSrcFiles;
DWORD attribute;
CHAR filename[1];
@@ -2357,7 +2357,7 @@ typedef struct _PDB_SYMBOL_FILE_EX
WORD file;
DWORD symbol_size;
DWORD lineno_size;
- DWORD unknown2;
+ DWORD lineno2_size;
DWORD nSrcFiles;
DWORD attribute;
DWORD reserved[2];
diff --git a/tools/winedump/pdb.c b/tools/winedump/pdb.c
index 71a2bc49cc8..bbaf1cb94e8 100644
--- a/tools/winedump/pdb.c
+++ b/tools/winedump/pdb.c
@@ -466,7 +466,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
file = (const char*)symbols + sizeof(PDB_SYMBOLS);
while (file - (const char*)symbols < sizeof(PDB_SYMBOLS) + symbols->module_size)
{
- int file_nr, symbol_size, lineno_size;
+ int file_nr, symbol_size, lineno_size, lineno2_size;
const char* file_name;
if (symbols->version < 19970000)
@@ -476,6 +476,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
file_name = sym_file->filename;
symbol_size = sym_file->symbol_size;
lineno_size = sym_file->lineno_size;
+ lineno2_size = sym_file->lineno2_size;
printf("\t--------symbol file----------- %s\n", file_name);
printf("\tgot symbol_file\n"
"\t\tunknown1: %08x\n"
@@ -491,7 +492,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
"\t\tfile: %04x\n"
"\t\tsymb size: %08x\n"
"\t\tline size: %08x\n"
- "\t\tunknown2: %08x\n"
+ "\t\tline2 size: %08x\n"
"\t\tnSrcFiles: %08x\n"
"\t\tattribute: %08x\n",
sym_file->unknown1,
@@ -506,7 +507,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
sym_file->file,
sym_file->symbol_size,
sym_file->lineno_size,
- sym_file->unknown2,
+ sym_file->lineno2_size,
sym_file->nSrcFiles,
sym_file->attribute);
}
@@ -517,6 +518,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
file_name = sym_file->filename;
symbol_size = sym_file->symbol_size;
lineno_size = sym_file->lineno_size;
+ lineno2_size = sym_file->lineno2_size;
printf("\t--------symbol file----------- %s\n", file_name);
printf("\t\tunknown1: %08x\n"
"\t\trange\n"
@@ -533,7 +535,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
"\t\tfile: %04x\n"
"\t\tsymb size: %08x\n"
"\t\tline size: %08x\n"
- "\t\tunknown2: %08x\n"
+ "\t\tline2 size: %08x\n"
"\t\tnSrcFiles: %08x\n"
"\t\tattribute: %08x\n"
"\t\treserved/0: %08x\n"
@@ -552,7 +554,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
sym_file->file,
sym_file->symbol_size,
sym_file->lineno_size,
- sym_file->unknown2,
+ sym_file->lineno2_size,
sym_file->nSrcFiles,
sym_file->attribute,
sym_file->reserved[0],
@@ -569,15 +571,13 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
/* line number info */
if (lineno_size)
codeview_dump_linetab((const char*)modimage + symbol_size, TRUE, " ");
- /* anyway, lineno_size doesn't see to really be the size of the line number information, and
- * it's not clear yet when to call for linetab2...
- */
- codeview_dump_linetab2((const char*)modimage + symbol_size + lineno_size,
- total_size - (symbol_size + lineno_size),
- filesimage ? filesimage + 12 : NULL, filessize, " ");
+ else if (lineno2_size) /* actually, only one of the 2 lineno should be present */
+ codeview_dump_linetab2((const char*)modimage + symbol_size, lineno2_size,
+ filesimage ? filesimage + 12 : NULL, filessize, " ");
/* what's that part ??? */
if (0)
- dump_data(modimage + symbol_size + lineno_size, total_size - (symbol_size + lineno_size), " ");
+ dump_data(modimage + symbol_size + lineno_size + lineno2_size,
+ total_size - (symbol_size + lineno_size + lineno2_size), " ");
free(modimage);
}
More information about the wine-cvs
mailing list