mirror of
https://github.com/golang/go
synced 2024-11-24 04:40:24 -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 {
|
if HEADTYPE == obj.Hdarwin {
|
||||||
argv = append(argv, "-dynamiclib")
|
argv = append(argv, "-dynamiclib")
|
||||||
} else {
|
} else {
|
||||||
|
// ELF.
|
||||||
argv = append(argv, "-Wl,-Bsymbolic")
|
argv = append(argv, "-Wl,-Bsymbolic")
|
||||||
if UseRelro() {
|
if UseRelro() {
|
||||||
argv = append(argv, "-Wl,-z,relro")
|
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:
|
case BuildmodeShared:
|
||||||
// TODO(mwhudson): unless you do this, dynamic relocations fill
|
// TODO(mwhudson): unless you do this, dynamic relocations fill
|
||||||
|
Loading…
Reference in New Issue
Block a user