]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: mark DWARF function symbols as reachable
authorIan Lance Taylor <iant@golang.org>
Tue, 24 Jan 2017 01:30:41 +0000 (17:30 -0800)
committerIan Lance Taylor <iant@golang.org>
Tue, 24 Jan 2017 03:37:56 +0000 (03:37 +0000)
Otherwise we don't emit any required ELF relocations when doing an
external link, because elfrelocsect skips unreachable symbols.

Fixes #18745.

Change-Id: Ia3583c41bb6c5ebb7579abd26ed8689370311cd6
Reviewed-on: https://go-review.googlesource.com/35590
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: David Crawshaw <crawshaw@golang.org>
src/cmd/link/internal/ld/dwarf.go
src/runtime/runtime-gdb_test.go

index 61d3e4fb720ecd1299540652816fcc2e11a90807..22d2c548c373e0c3b91f4805e8035fd3f64192cf 100644 (file)
@@ -1080,7 +1080,7 @@ func writelines(ctxt *Link, syms []*Symbol) ([]*Symbol, []*Symbol) {
                epcs = s
 
                dsym := ctxt.Syms.Lookup(dwarf.InfoPrefix+s.Name, int(s.Version))
-               dsym.Attr |= AttrHidden
+               dsym.Attr |= AttrHidden | AttrReachable
                dsym.Type = obj.SDWARFINFO
                for _, r := range dsym.R {
                        if r.Type == obj.R_DWARFREF && r.Sym.Size == 0 {
index c2844375f7ac98472e64a8c9f47ccdf85b6fb5a2..f886961d6ad3dad94e7f2ac1d613cd75c092a79f 100644 (file)
@@ -7,6 +7,7 @@ package runtime_test
 import (
        "bytes"
        "fmt"
+       "go/build"
        "internal/testenv"
        "io/ioutil"
        "os"
@@ -67,7 +68,6 @@ func checkGdbPython(t *testing.T) {
 }
 
 const helloSource = `
-package main
 import "fmt"
 var gslice []string
 func main() {
@@ -85,9 +85,20 @@ func main() {
 `
 
 func TestGdbPython(t *testing.T) {
+       testGdbPython(t, false)
+}
+
+func TestGdbPythonCgo(t *testing.T) {
+       testGdbPython(t, true)
+}
+
+func testGdbPython(t *testing.T, cgo bool) {
        if runtime.GOARCH == "mips64" {
                testenv.SkipFlaky(t, 18173)
        }
+       if cgo && !build.Default.CgoEnabled {
+               t.Skip("skipping because cgo is not enabled")
+       }
 
        t.Parallel()
        checkGdbEnvironment(t)
@@ -100,8 +111,15 @@ func TestGdbPython(t *testing.T) {
        }
        defer os.RemoveAll(dir)
 
+       var buf bytes.Buffer
+       buf.WriteString("package main\n")
+       if cgo {
+               buf.WriteString(`import "C"` + "\n")
+       }
+       buf.WriteString(helloSource)
+
        src := filepath.Join(dir, "main.go")
-       err = ioutil.WriteFile(src, []byte(helloSource), 0644)
+       err = ioutil.WriteFile(src, buf.Bytes(), 0644)
        if err != nil {
                t.Fatalf("failed to create file: %v", err)
        }