[Bug debug/78839] [6/7 Regression] DWARF output different between GCC 5 and 6
toconnor at forcepoint dot com
gcc-bugzilla@gcc.gnu.org
Tue Dec 20 15:53:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78839
--- Comment #10 from Tom O'Connor <toconnor at forcepoint dot com> ---
In regards to GDB, I noticed that when using a macro to get the offset for
these bitfields, with objects built by both GCC 5 and earlier as well as GCC 6,
I always get 0. For example:
(gdb) macro define offsetof(t, f) &((t *) 0)->f)
(gdb) p offsetof(struct s, type)
$1 = (unsigned int *) 0x0
Historically, prior to GCC 6, this always matched up with DWARF's
DW_AT_data_member_location value for bitfields. Yes, I see how GCC 6's
combination of data_member_location and bit_offset can be combined to reach the
true location. Historically, my use case has used the data_member_location
value to get me the offset into say a raw memory image, for where to start
reading data from a field of a structure in memory; I'd do bitfield shifts
after reading from the aligned offset as reported in the DWARF structure.
If using DECL_BIT_FIELD_REPRESENTATIVE as data_member_location is nicer and
doesn't break the Ada use case, I'd be all for that. But if what's currently
being emitted by GCC 6 is considered "more correct" than what previous versions
had emitted, then I'll have to adjust. I only noticed the change between 5 and
6 once I started seeing odd results with the same code built by different GCCs.
More information about the Gcc-bugs
mailing list