From: Russ Cox Date: Tue, 20 Apr 2021 19:41:24 +0000 (-0400) Subject: debug/dwarf: skip over zero-length compilation units X-Git-Tag: go1.17beta1~472 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=073f9139497401e019e4357d110c2801c5be31e1;p=gostls13.git debug/dwarf: skip over zero-length compilation units DWARF sections generated by mingw-clang seem to include these (not often - only one out of many in the binary that I am looking at). Skipping over them, everything parses correctly. This makes TestDefaultLinkerDWARF pass on windows/arm64. Change-Id: Ie4a7daa1423f51cbc8c4aac88b1d27c3b52ee880 Reviewed-on: https://go-review.googlesource.com/c/go/+/312031 Trust: Russ Cox Run-TryBot: Russ Cox TryBot-Result: Go Bot Reviewed-by: Cherry Zhang --- diff --git a/src/debug/dwarf/unit.go b/src/debug/dwarf/unit.go index 29a744fd18..9b3d6e902d 100644 --- a/src/debug/dwarf/unit.go +++ b/src/debug/dwarf/unit.go @@ -48,7 +48,9 @@ func (d *Data) parseUnits() ([]unit, error) { break } b.skip(int(len)) - nunit++ + if len > 0 { + nunit++ + } } if b.err != nil { return nil, b.err @@ -61,7 +63,9 @@ func (d *Data) parseUnits() ([]unit, error) { u := &units[i] u.base = b.off var n Offset - n, u.is64 = b.unitLength() + for n == 0 { + n, u.is64 = b.unitLength() + } dataOff := b.off vers := b.uint16() if vers < 2 || vers > 5 {