From 073f9139497401e019e4357d110c2801c5be31e1 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Tue, 20 Apr 2021 15:41:24 -0400 Subject: [PATCH] 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 --- src/debug/dwarf/unit.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 { -- 2.50.0