Module: wine Branch: master Commit: 4f574ee942be99c7401a3bef472a81d0f2bb0b5b URL: http://source.winehq.org/git/wine.git/?a=commit;h=4f574ee942be99c7401a3bef47...
Author: Alexandre Julliard julliard@winehq.org Date: Wed Jan 12 10:45:54 2011 +0100
winedump: Try to load the PDB string table from file number 4 too.
---
tools/winedump/pdb.c | 32 ++++++++++++++++++-------------- 1 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/tools/winedump/pdb.c b/tools/winedump/pdb.c index 5720c40..1b7beeb 100644 --- a/tools/winedump/pdb.c +++ b/tools/winedump/pdb.c @@ -155,6 +155,21 @@ static void pdb_exit(struct pdb_reader* reader) free((char*)reader->u.ds.toc); }
+static void *read_string_table(struct pdb_reader* reader) +{ + void *ret; + + /* FIXME: how to determine the correct file number? */ + /* 4 and 12 have been observed, there may be others */ + ret = reader->read_file(reader, 4); + if (ret && *(const DWORD*)ret == 0xeffeeffe) return ret; + free( ret ); + ret = reader->read_file(reader, 12); + if (ret && *(const DWORD*)ret == 0xeffeeffe) return ret; + free( ret ); + return NULL; +} + static void pdb_dump_symbols(struct pdb_reader* reader) { PDB_SYMBOLS* symbols; @@ -224,20 +239,8 @@ static void pdb_dump_symbols(struct pdb_reader* reader) dump_data(src, symbols->offset_size, " "); }
- filesimage = reader->read_file(reader, 12); /* FIXME: really fixed ??? */ - if (filesimage) - { - if (*(const DWORD*)filesimage == 0xeffeeffe) - { - filessize = *(const DWORD*)(filesimage + 8); - } - else - { - printf("wrong header %x expecting 0xeffeeffe\n", *(const DWORD*)filesimage); - free(filesimage); - filesimage = NULL; - } - } + if (!(filesimage = read_string_table(reader))) printf("string table not found\n"); + else filessize = *(const DWORD*)(filesimage + 8);
if (symbols->srcmodule_size) { @@ -721,6 +724,7 @@ static void pdb_ds_dump(void) * 1: root structure * 2: types * 3: modules + * 4: string table (FIXME: in which case?) * 5: FPO data * 8: segments * 10: extended FPO data