mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00: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
1 changed files with 4 additions and 1 deletions
|
|
@ -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…
Add table
Add a link
Reference in a new issue