[PATCH 0/6] MR298: Improve support for types out of PDB files

eric pouech (@epo) wine at gitlab.winehq.org
Wed Jun 22 09:41:14 CDT 2022


Current dbghelp support for reading C/C++ types out of PDB files suffer from some
defaults:
- several records for the same type (ie struct/class/union/enum with same name)
  can be present in a PDB file. This can happen when recompiling a compilation
  unit after modifying the definition of such type (eg adding a field a struct).
  The PDB file seems to be incrementally modified, and ends up with the old and
  new definition of such type inside the PDB file.
- this of course can lead to erroneous information out of dbghelp. When looking
  for a type by name, dbghelp must return the new definition.
- such errors have been experienced in two situations:
  + some type definition are stored in two different records in PDB file. A
    simple example is 'struct list { struct list* next; };' where the circular
    reference is broken by first generating a forward record for struct list,
    followed by the full definition of struct list (using the forward record
    as the type for the 'next' field. Resolution from forward record to find
    implementation record is done by name lookup.
  + finding a type by its name (SymGetTypeFromName)
- PDB uses the order of elements in its hash table to pick up the "newest" one.
- the incremental linker can also modify the hash table order (but I didn't
  find out yet what triggers it), using specific entries (ie like patching
  the hash table order).

This series:
- improve winedump to dump information stored in stream of types' hash
- cleans up some type handling related code
- modifies type loader out of PDB files to handle correctly the defaults listed
  above.

-- 
https://gitlab.winehq.org/wine/wine/-/merge_requests/298



More information about the wine-devel mailing list