MolecularMatters / raw_pdb

A C++11 library for reading Microsoft Program DataBase PDB files
BSD 2-Clause "Simplified" License
675 stars 91 forks source link

Unhandled TypeRecordKind 0x1609 #47

Closed ohz10 closed 1 year ago

ohz10 commented 1 year ago

When running the Example.exe application on Windows, it always "dies" with the error message Unhandled TypeRecordKind 0x1609. Tested against multiple PDB files created with Visual Studio 2019.

ohz10 commented 1 year ago

A CodeView TypeRecord for 0x1609 does not appear to be documented on LLVM's site.

MolecularMatters commented 1 year ago

Thanks for letting us know! We'll look into this as soon as possible. Can you share one of the PDBs with us? Also which Example are you running? There are several.

Please make sure that you don't use /DEBUG:FASTLINK, since that is unsupported.

MolecularMatters commented 1 year ago

I added support for missing T_CHAR8 8-bit unicode types in C++20. I haven't come across any PDBs that use TypeRecordKind 0x1609 though.

@ohz10 Can you please share such a PDB with us? We'd like to get this fixed.

ohz10 commented 1 year ago

@ohz10 Can you please share such a PDB with us?

We'd like to get this fixed.

Unfortunately, I cannot. I no longer have access to the Windows 10 machine I was making those PDBs on.

JustasMasiulis commented 1 year ago

0x1609 is LF_STRUCTURE2. TypePropery/property is extended to 32 bits.

pierricgimmig commented 1 year ago

The dllmain.pdb file in https://github.com/google/orbit/tree/main/src/Symbols/testdata makes raw_pdb assert with:

Unhandled TypeRecordKind 0x1609

pierricgimmig commented 1 year ago

Changing the assert to a log, with the same pdb as above, I also get:

Unhandled TypeRecordKind 1608
Unhandled TypeRecordKind 1609
Unhandled special type 42
lukekasz commented 1 year ago

The dllmain.pdb file in https://github.com/google/orbit/tree/main/src/Symbols/testdata makes raw_pdb assert with:

Unhandled TypeRecordKind 0x1609

Is the source code for dllmain.dll available somewhere?

pierricgimmig commented 1 year ago

@lukekasz , https://github.com/google/orbit/blob/main/src/ObjectUtils/testdata/dllmain.cpp

lukekasz commented 1 year ago

I had a quick look at loading dllmain.pdb from the google/orbit repo and added support for the missing TypeRecordKinds 0x1608 and 0x1609 thanks to the hint from @JustasMasiulis. As well as handle the TypeIndexKind 0x42 (T_REAL80) in GetTypeName.

I'm now able to run all the examples on dllmain.pdb without hitting any asserts.

I have only done some quick testing and I'm traveling from tomorrow and for the rest of this week, so I won't have time to do more testing and open a PR to this repo until next week. Until then you can find the changes here:

  1. https://github.com/lukekasz/raw_pdb/tree/missing-type-record-kinds
  2. https://github.com/MolecularMatters/raw_pdb/compare/main...lukekasz:raw_pdb:missing-type-record-kinds
pierricgimmig commented 1 year ago

That's great @lukekasz, thanks a lot for the quick reply! I'll use your branch, cheers!