[cfe-users] Should clang++ -g produce debugging info for all types?

David Blaikie via cfe-users cfe-users at lists.llvm.org
Fri Aug 9 18:17:15 PDT 2019

On Fri, Aug 9, 2019 at 6:03 PM Bob Eastbrook <baconeater789 at gmail.com>

> On Mon, Aug 5, 2019 at 1:36 PM David Blaikie <dblaikie at gmail.com> wrote:
> > Does it work with gdb?
> It works with gdb.  More info:
> g++ & gdb -- works, even without debuginfo for libstdc++

^ for std::string I'd expect this. For std::fstream, I expect you'd see the
same problem/failure (gcc and clang both rely on fstream being homed in the
standard library's debug info (because of vtables/key functions), but clang
takes it a step further and does this for std::string too (because of
template explicit instantiation decl/def))

> clang++ & gdb -- works
> g++ & lldb -- works

^ again, I expect that would fail with std::fstream, demonstrating that the
same problem exists for both clang and GCC, just clang takes it a bit
further - but it's not fundamentally different between the two.

> clang++ & lldb -- fails
> I now notice these warnings in lldb after installing the debuginfo
> packages:
> warning: (x86_64) /lib64/libstdc++.so.6 unsupported DW_FORM values:
> 0x1f20 0x1f21
> warning: (x86_64) /lib64/libgcc_s.so.1 unsupported DW_FORM values: 0x1f20
> 0x1f21
> I searched the web for details on that error, but came up empty.
> Could it be that the debuginfo packages are just not compatible with
> lldb?

Ooh, yeah, that's possible/likely. Unknown forms can't be ignored because
forms dictate the encoding, so without recognizing the form, the DWARF
can't be parsed (unknown /attributes/ using known forms are fine - because
they can be parsed and the values ignored).

Yeah, looks like 1f20 (DW_FORM_GNU_ref_alt) and 1f21 (DW_FORM_GNU_strp_alt)
are results of the 'dwz' tool that compacts DWARF debug info.

Not sure if it'd be enough to teach lldb how to parse but ignore any
attribute using these forms - I would guess not, I suspect that would
result in holes in the debug info where these forms are used. So you'd
probably have to modify/fix/patch lldb to actually be able to understand
these forms - which might not be too hard. Hmm, nope, probably fairly
involved, since it means reading a new/different file (judging by this
patch and the link to the DWARF standards proposal in it:

Yeah, short of making some relatively significant changes to lldb, I think
you'll probably just have to stick with larger debug info by using
-fstandalone-debug, since the debug info provided by your distribution uses
GNU extensions that lldb doesn't currently support. :/

> > I'd try gdb + gcc + binutils ld (or gold) + libstdc++ (use std::fstream
> as an example of something that gcc will home to the libstdc++ debug info -
> dwarfdump your executable and you'll see it doesn't contain the definition
> of basic_fstream, but verify the debugger can still render the full
> definition). If that works, swap out various parts of that & see where it
> falls apart.
> Good strategy.  I don't quite have the hang of dwarfdump yet though,
> but I'll continue to investigate.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-users/attachments/20190809/d41bc554/attachment.html>

More information about the cfe-users mailing list