]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.17] debug/pe,debug/macho: add support for DWARF5 sections
authorAlessandro Arzilli <alessandro.arzilli@gmail.com>
Mon, 15 Nov 2021 09:14:04 +0000 (10:14 +0100)
committerIan Lance Taylor <iant@golang.org>
Thu, 3 Feb 2022 20:56:27 +0000 (20:56 +0000)
Adds the same logic used in debug/elf to load DWARF5 sections.

For #49590
Fixes #50722

Change-Id: Iee05b9927a6f521842b330eab8942ade3fc2bd86
Reviewed-on: https://go-review.googlesource.com/c/go/+/363895
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Than McIntosh <thanm@google.com>
(cherry picked from commit 6c36c332fefdd433cfe6e6468a2542fc310e9f8a)
Reviewed-on: https://go-review.googlesource.com/c/go/+/379914
Trust: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Alessandro Arzilli <alessandro.arzilli@gmail.com>
Reviewed-by: Emmanuel Odeke <emmanuel@orijtech.com>
src/debug/macho/file.go
src/debug/pe/file.go

index 73cfce3c7606e419c3ed3de7f7f9f3811d7eb7a2..cdc500e47623ec93211e68762806b64983e201d1 100644 (file)
@@ -650,10 +650,14 @@ func (f *File) DWARF() (*dwarf.Data, error) {
                return nil, err
        }
 
-       // Look for DWARF4 .debug_types sections.
+       // Look for DWARF4 .debug_types sections and DWARF5 sections.
        for i, s := range f.Sections {
                suffix := dwarfSuffix(s)
-               if suffix != "types" {
+               if suffix == "" {
+                       continue
+               }
+               if _, ok := dat[suffix]; ok {
+                       // Already handled.
                        continue
                }
 
@@ -662,7 +666,11 @@ func (f *File) DWARF() (*dwarf.Data, error) {
                        return nil, err
                }
 
-               err = d.AddTypes(fmt.Sprintf("types-%d", i), b)
+               if suffix == "types" {
+                       err = d.AddTypes(fmt.Sprintf("types-%d", i), b)
+               } else {
+                       err = d.AddSection(".debug_"+suffix, b)
+               }
                if err != nil {
                        return nil, err
                }
index e50229e5a3676b8c4e30ad61de9ca3c326fc7c6d..ab00a48f5cfb7be9eda6d7539d1495874b965a4f 100644 (file)
@@ -272,10 +272,14 @@ func (f *File) DWARF() (*dwarf.Data, error) {
                return nil, err
        }
 
-       // Look for DWARF4 .debug_types sections.
+       // Look for DWARF4 .debug_types sections and DWARF5 sections.
        for i, s := range f.Sections {
                suffix := dwarfSuffix(s)
-               if suffix != "types" {
+               if suffix == "" {
+                       continue
+               }
+               if _, ok := dat[suffix]; ok {
+                       // Already handled.
                        continue
                }
 
@@ -284,7 +288,11 @@ func (f *File) DWARF() (*dwarf.Data, error) {
                        return nil, err
                }
 
-               err = d.AddTypes(fmt.Sprintf("types-%d", i), b)
+               if suffix == "types" {
+                       err = d.AddTypes(fmt.Sprintf("types-%d", i), b)
+               } else {
+                       err = d.AddSection(".debug_"+suffix, b)
+               }
                if err != nil {
                        return nil, err
                }