1
0
mirror of https://github.com/golang/go synced 2024-11-17 21:14:44 -07:00

cmd/link: fix suspicious code in emitPcln

In cmd/link/internal/ld/pcln.go:emitPcln, the code and the
comment don't match. I think the comment is right. Fix the code.

As a consequence, on Linux/AMD64, internal linking with PIE
buildmode with cgo (at least the cgo packages in the standard
library) now works. Add a test.

Change-Id: I091cf81ba89571052bc0ec1fa0a6a688dec07b04
Reviewed-on: https://go-review.googlesource.com/c/go/+/166017
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
Cherry Zhang 2019-03-06 17:57:35 -05:00
parent 7afd58d458
commit 3a62f4ee40
2 changed files with 12 additions and 4 deletions

11
src/cmd/dist/test.go vendored
View File

@ -579,6 +579,17 @@ func (t *tester) registerTests() {
return nil
},
})
// Also test a cgo package.
if t.cgoEnabled {
t.tests = append(t.tests, distTest{
name: "pie_internal_cgo",
heading: "internal linking of -buildmode=pie",
fn: func(dt *distTest) error {
t.addCmd(dt, "src", t.goTest(), "os/user", "-buildmode=pie", "-ldflags=-linkmode=internal", t.timeout(60))
return nil
},
})
}
}
// sync tests

View File

@ -182,10 +182,7 @@ func emitPcln(ctxt *Link, s *sym.Symbol) bool {
}
// We want to generate func table entries only for the "lowest level" symbols,
// not containers of subsymbols.
if s.Attr.Container() {
return true
}
return true
return !s.Attr.Container()
}
// pclntab initializes the pclntab symbol with