go/src/debug/dwarf
Than McIntosh 8314544bd6 debug/dwarf: fix problems with handling of bit offsets for bitfields
This patch reworks the handling of the DWARF DW_AT_bit_offset and
DW_AT_data_bit_offset attributes to resolve problems arising from
a previous related change (CL 328709).

In CL 328709 the DWARF type reader was updated to look for and use
the DW_AT_data_bit_offset attribute for structure fields, handling
the value of the attribute in the same way as for DW_AT_bit_offset.
This caused problems for clients, since the two attributes have very
different semantics.

This CL effectively reverts CL 328709 and moves to a scheme in which
we detect and report the two attributes separately/independently.

This patch also corrects a problem in the DWARF type reader in the
code that detects and fixes up the type of struct fields corresponding
to zero-length arrays; the code in question was testing the
DW_AT_bit_offset attribute value but assuming DW_AT_data_bit_offset
semantics, meaning that it would fail to fix up cases such as

  typedef struct another_struct {
    unsigned short quix;
    int xyz[0];
    unsigned  x:1;
    long long array[40];
  } t;

The code in question has been changed to avoid using BitOffset and
instead consider only ByteOffset and BitSize.

Fixes #50685.
Updates #46784.

Change-Id: Ic15ce01c851af38ebd81af827973ec49badcab6f
Reviewed-on: https://go-review.googlesource.com/c/go/+/380714
Trust: Than McIntosh <thanm@google.com>
Run-TryBot: Than McIntosh <thanm@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
2022-01-28 20:07:54 +00:00
..
testdata debug/dwarf: fix problems with handling of bit offsets for bitfields 2022-01-28 20:07:54 +00:00
attr_string.go
buf.go
class_string.go
const.go all: remove duplicate words 2021-03-13 11:56:59 +00:00
dwarf5ranges_test.go debug/dwarf: don't try to parse addr/rnglists header 2020-12-14 18:06:06 +00:00
entry.go all: gofmt -w -r 'interface{} -> any' src 2021-12-13 18:45:54 +00:00
entry_test.go all: gofmt -w -r 'interface{} -> any' src 2021-12-13 18:45:54 +00:00
export_test.go
line.go cmd/link: emit include directories in DWARF line table prologue 2020-10-30 18:01:54 +00:00
line_test.go debug/dwarf: support DW_FORM_rnglistx aka formRnglistx 2021-03-17 00:54:09 +00:00
open.go debug/dwarf: don't try to parse addr/rnglists header 2020-12-14 18:06:06 +00:00
tag_string.go
type.go debug/dwarf: fix problems with handling of bit offsets for bitfields 2022-01-28 20:07:54 +00:00
type_test.go debug/dwarf: fix problems with handling of bit offsets for bitfields 2022-01-28 20:07:54 +00:00
typeunit.go
unit.go debug/dwarf: skip over zero-length compilation units 2021-04-23 21:42:56 +00:00