From 2cbd7072b18d7eb01c51ff05c7e12ca2bd555d01 Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Sun, 13 Sep 2015 12:49:05 -0400 Subject: [PATCH] debug/dwarf: add test for split DWARF This adds a test that debug/dwarf can read the skeleton DWARF data from a split DWARF image (though it doesn't currently support piecing the external DWARF data back together). This should work because there's nothing particularly different about skeleton DWARF data, but previously failed because of poor handling of unrecognized attributes. Updates #12592. Change-Id: I2fc5f4679883b05ebd7ec9f0b5c398a758181a32 Reviewed-on: https://go-review.googlesource.com/14542 Reviewed-by: Ian Lance Taylor Reviewed-by: jcd . --- src/debug/dwarf/entry_test.go | 36 +++++++++++++++++++++++++++++ src/debug/dwarf/testdata/split.c | 5 ++++ src/debug/dwarf/testdata/split.elf | Bin 0 -> 9509 bytes 3 files changed, 41 insertions(+) create mode 100644 src/debug/dwarf/entry_test.go create mode 100644 src/debug/dwarf/testdata/split.c create mode 100644 src/debug/dwarf/testdata/split.elf diff --git a/src/debug/dwarf/entry_test.go b/src/debug/dwarf/entry_test.go new file mode 100644 index 0000000000..8bd2d2a8ad --- /dev/null +++ b/src/debug/dwarf/entry_test.go @@ -0,0 +1,36 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package dwarf_test + +import ( + . "debug/dwarf" + "testing" +) + +func TestSplit(t *testing.T) { + // debug/dwarf doesn't (currently) support split DWARF, but + // the attributes that pointed to the split DWARF used to + // cause loading the DWARF data to fail entirely (issue + // #12592). Test that we can at least read the DWARF data. + d := elfData(t, "testdata/split.elf") + r := d.Reader() + e, err := r.Next() + if err != nil { + t.Fatal(err) + } + if e.Tag != TagCompileUnit { + t.Fatalf("bad tag: have %s, want %s", e.Tag, TagCompileUnit) + } + // Check that we were able to parse the unknown section offset + // field, even if we can't figure out its DWARF class. + const AttrGNUAddrBase Attr = 0x2133 + f := e.AttrField(AttrGNUAddrBase) + if _, ok := f.Val.(int64); !ok { + t.Fatalf("bad attribute value type: have %T, want int64", f.Val) + } + if f.Class != ClassUnknown { + t.Fatalf("bad class: have %s, want %s", f.Class, ClassUnknown) + } +} diff --git a/src/debug/dwarf/testdata/split.c b/src/debug/dwarf/testdata/split.c new file mode 100644 index 0000000000..0ef3427d2e --- /dev/null +++ b/src/debug/dwarf/testdata/split.c @@ -0,0 +1,5 @@ +// gcc -gsplit-dwarf split.c -o split.elf + +int main() +{ +} diff --git a/src/debug/dwarf/testdata/split.elf b/src/debug/dwarf/testdata/split.elf new file mode 100644 index 0000000000000000000000000000000000000000..99ee2c2f0bb739307cf13bc85abd3421166c0167 GIT binary patch literal 9509 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 literal 0 HcmV?d00001 -- 2.48.1