[Bug debug/56376] New: gdb needs a way to associate a vtable symbol with a class type
tromey at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Feb 18 14:20:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56376
Bug #: 56376
Summary: gdb needs a way to associate a vtable symbol with a
class type
Classification: Unclassified
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: debug
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: tromey@gcc.gnu.org
gdb needs a way to associate a vtable symbol with a type.
Some background:
gdb has a feature ("set print object on") where it tries to
examine an object's vtable to find the object's real, dynamic
type.
It examines the vtable pointer, then finds the vtable's ELF symbol,
demangles the symbol name, and finally (ewwww....) strips off
"vtable for" from the demangled name and looks up the result
as a type name in the DWARF.
However, this approach doesn't work in some cases. For example,
it fails if the type is defined locally to a function.
See http://sourceware.org/bugzilla/show_bug.cgi?id=14235
Here (at least in the example in comment #10), there is no way to
associate a vtable with the appropriate type.
To solve these problems it would be nice if, at the very least for
the defined-in-a-function case, GCC emitted some DWARF that would
associate a vtable with a type. I think for this to really work
it would have to do this for all vtables thus defined -- e.g., so that
inspecting an object that is partially constructed would also DTRT.
One approach would be to emit it as an artificial variable.
For gdb it would be more convenient if it were top-level, but anywhere
sane would work. Like:
DW_TAG_variable
DW_AT_linkage_name _Zblahblah
DW_AT_artificial
DW_AT_containing_type <class die ref>
But perhaps this is too magical and a new DW_TAG_GNU_vtable would
be better.
More information about the Gcc-bugs
mailing list