mirror of
https://github.com/golang/go
synced 2024-11-18 10:54:40 -07:00
cmd/link: pass -Wl,-z,nodelete when creating an ELF shared library
Go shared libraries do not support dlclose, and there is no likelihood that they will suppose dlclose in the future. Set the DF_1_NODELETE flag to tell the dynamic linker to not attempt to remove them from memory. This makes the shared library act as though every call to dlopen passed the RTLD_NODELETE flag. Fixes #12582. Update #11100. Update #12873. Change-Id: Id4b6e90a1b54e2e6fc8355b5fb22c5978fc762b4 Reviewed-on: https://go-review.googlesource.com/15605 Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com>
This commit is contained in:
parent
91059de095
commit
bd7de94d7f
@ -982,11 +982,14 @@ func hostlink() {
|
||||
if HEADTYPE == obj.Hdarwin {
|
||||
argv = append(argv, "-dynamiclib")
|
||||
} else {
|
||||
// ELF.
|
||||
argv = append(argv, "-Wl,-Bsymbolic")
|
||||
if UseRelro() {
|
||||
argv = append(argv, "-Wl,-z,relro")
|
||||
}
|
||||
argv = append(argv, "-shared")
|
||||
// Pass -z nodelete to mark the shared library as
|
||||
// non-closeable: a dlclose will do nothing.
|
||||
argv = append(argv, "-shared", "-Wl,-z,nodelete")
|
||||
}
|
||||
case BuildmodeShared:
|
||||
// TODO(mwhudson): unless you do this, dynamic relocations fill
|
||||
|
Loading…
Reference in New Issue
Block a user