aboutsummaryrefslogtreecommitdiff
path: root/src/debug/elf
diff options
context:
space:
mode:
Diffstat (limited to 'src/debug/elf')
-rw-r--r--src/debug/elf/file.go41
1 files changed, 25 insertions, 16 deletions
diff --git a/src/debug/elf/file.go b/src/debug/elf/file.go
index 25b72642d8..b2adc2834f 100644
--- a/src/debug/elf/file.go
+++ b/src/debug/elf/file.go
@@ -1112,6 +1112,17 @@ func (f *File) applyRelocationsSPARC64(dst []byte, rels []byte) error {
}
func (f *File) DWARF() (*dwarf.Data, error) {
+ dwarfSuffix := func(s *Section) string {
+ switch {
+ case strings.HasPrefix(s.Name, ".debug_"):
+ return s.Name[7:]
+ case strings.HasPrefix(s.Name, ".zdebug_"):
+ return s.Name[8:]
+ default:
+ return ""
+ }
+
+ }
// sectionData gets the data for s, checks its size, and
// applies any applicable relations.
sectionData := func(i int, s *Section) ([]byte, error) {
@@ -1160,13 +1171,8 @@ func (f *File) DWARF() (*dwarf.Data, error) {
// Don't bother loading others.
var dat = map[string][]byte{"abbrev": nil, "info": nil, "str": nil, "line": nil, "ranges": nil}
for i, s := range f.Sections {
- suffix := ""
- switch {
- case strings.HasPrefix(s.Name, ".debug_"):
- suffix = s.Name[7:]
- case strings.HasPrefix(s.Name, ".zdebug_"):
- suffix = s.Name[8:]
- default:
+ suffix := dwarfSuffix(s)
+ if suffix == "" {
continue
}
if _, ok := dat[suffix]; !ok {
@@ -1186,16 +1192,19 @@ func (f *File) DWARF() (*dwarf.Data, error) {
// Look for DWARF4 .debug_types sections.
for i, s := range f.Sections {
- if s.Name == ".debug_types" {
- b, err := sectionData(i, s)
- if err != nil {
- return nil, err
- }
+ suffix := dwarfSuffix(s)
+ if suffix != "types" {
+ continue
+ }
- err = d.AddTypes(fmt.Sprintf("types-%d", i), b)
- if err != nil {
- return nil, err
- }
+ b, err := sectionData(i, s)
+ if err != nil {
+ return nil, err
+ }
+
+ err = d.AddTypes(fmt.Sprintf("types-%d", i), b)
+ if err != nil {
+ return nil, err
}
}