]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: pass -Wl,-z,nodelete when creating an ELF shared library
authorIan Lance Taylor <iant@golang.org>
Thu, 8 Oct 2015 17:22:50 +0000 (10:22 -0700)
committerIan Lance Taylor <iant@golang.org>
Thu, 8 Oct 2015 19:51:29 +0000 (19:51 +0000)
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>
src/cmd/link/internal/ld/lib.go

index 23fd44b6a85e920ce7515b2a00b1e902300342d5..3ce22017cfe1e5194e1545f555615f8fbf792490 100644 (file)
@@ -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