Commit bd7de94d authored by Ian Lance Taylor's avatar Ian Lance Taylor

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/15605Reviewed-by: 's avatarMichael Hudson-Doyle <michael.hudson@canonical.com>
parent 91059de0
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment