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>
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
}
// 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