[Lldb-commits] [PATCH] D49410: [PDB] Parse UDT symbols and pointers to members
Zachary Turner via lldb-commits
lldb-commits at lists.llvm.org
Fri Jul 20 04:35:28 PDT 2018
I think the problem is in lld, we don’t emit S_UDT symbols because it
caused weird problems in WinDbg. There’s a comment explaining it in
PDB.cpp. But after some recent fixes this may just work. So we should
probably try again to emit the S_UDT in lld, I think that should fix it
On Fri, Jul 20, 2018 at 1:01 AM Hui Huang via Phabricator <
reviews at reviews.llvm.org> wrote:
> Hui added inline comments.
>
>
> ================
> Comment at: lit/SymbolFile/PDB/Inputs/ClassLayoutTest.cpp:37
> + };
> + union { // Test unnamed union. MSVC treats it as `int a; float b;`
> + int a;
> ----------------
> aleksandr.urakov wrote:
> > Here is a problem. `MicrosoftRecordLayoutBuilder` asserts every field or
> base offset, but in our case fields `a` and `b` are treated as `struct
> Complex`'s fields, not `union`'s, so lldb crashes in debug on this. I can't
> find enough info in PDB to restore the unnamed union here. Do you have any
> ideas about it?
>
> Based on MSVC cl yielded PDB, you could have full information to restore
> the unnamed UDT.
>
> From my experience, PDB yielded by clang-cl (/Z7 or /Zi) is slightly
> different from the one by cl.
>
> Both contain information about forwarded unnamed UDT.
> However PDB yielded by clang-cl more or less lacks the member
> information. See below.
>
> The CodeView info is good. Maybe you need to look at LLC?
>
> CodeView
>
> ```
> FieldList (0x1044) {
> TypeLeafKind: LF_FIELDLIST (0x1203)
> DataMember {
> TypeLeafKind: LF_MEMBER (0x150D)
> AccessSpecifier: Public (0x3)
> Type: int (0x74)
> FieldOffset: 0x0
> Name: a
> }
> DataMember {
> TypeLeafKind: LF_MEMBER (0x150D)
> AccessSpecifier: Public (0x3)
> Type: float (0x40)
> FieldOffset: 0x0
> Name: b
> }
> }
>
> Union (0x1045) {
> TypeLeafKind: LF_UNION (0x1506)
> MemberCount: 2
> Properties [ (0x608)
> HasUniqueName (0x200)
> Nested (0x8)
> Sealed (0x400)
> ]
> FieldList: <field list> (0x1044)
> SizeOf: 4
> Name: Complex::<unnamed-tag>
> LinkageName: .?AT<unnamed-type-$S2>@Complex@@
> }
>
> ```
>
> llvm-pdbutil pdb (clang-cl /z7)
>
> (found unnamed symbol, however size = 0, they will be just ignored. See
> PDBASTParser.cpp #259
> The size should not be zero)
>
>
> ```
> struct Complex::<unnamed-tag> [sizeof = 0] {}
>
> union Complex::<unnamed-tag> [sizeof = 0] {}
>
> struct Complex [sizeof = 728] {
> data +0x00 [sizeof=720] _List* array[90]
> data +0x2d0 [sizeof=4] int x
> data +0x2d4 [sizeof=4] int a
> data +0x2d4 [sizeof=4] float b
> }
>
> ```
>
> llvm-pdbutil pdb ( cl /z7)
>
> ( you have full information to restore unnamed)
> ```
>
> struct Complex [sizeof = 728] {
> data +0x00 [sizeof=720] _List* array[90]
> data +0x2d0 [sizeof=4] int x
> data +0x2d4 [sizeof=4] int a
> data +0x2d4 [sizeof=4] float b
> }
>
> Total padding 3 bytes (25% of class size)
> Immediate padding 3 bytes (25% of class size)
>
> struct Complex::<unnamed-tag> [sizeof = 4] {
> data +0x00 [sizeof=4] int x
> }
>
> union Complex::<unnamed-tag> [sizeof = 4] {
> data +0x00 [sizeof=4] int a
> data +0x00 [sizeof=4] float b
> }
> ```
>
>
>
>
> https://reviews.llvm.org/D49410
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20180720/d945e7dc/attachment.html>
More information about the lldb-commits
mailing list