summaryrefslogtreecommitdiff
path: root/src/dl/dl_gnu.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/dl/dl_gnu.go')
-rw-r--r--src/dl/dl_gnu.go91
1 files changed, 58 insertions, 33 deletions
diff --git a/src/dl/dl_gnu.go b/src/dl/dl_gnu.go
index c7c409b..99ec32c 100644
--- a/src/dl/dl_gnu.go
+++ b/src/dl/dl_gnu.go
@@ -1,44 +1,69 @@
-package dl
+// The code in this file is trivial, and not eligable for copyright.
+//
+// The documentation in this file is taken from the Linux Programmer's
+// Manual page for dlopen(3).
+//
+// Copyright 1995 Yggdrasil Computing, Incorporated.
+// written by Adam J. Richter (adam@yggdrasil.com),
+// with typesetting help from Daniel Quinlan (quinlan@yggdrasil.com).
+// and Copyright 2003, 2015 Michael Kerrisk (mtk.manpages@gmail.com).
+//
+// This is free documentation; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of
+// the License, or (at your option) any later version.
+//
+// The GNU General Public License's references to "object code"
+// and "executables" are to be interpreted as the output of any
+// document formatting or typesetting system, including
+// intermediate and printed output.
+//
+// This manual is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this manual; if not, see
+// <http://www.gnu.org/licenses/>.
+//
+// Modified by David A. Wheeler <dwheeler@dwheeler.com> 2000-11-28.
+// Applied patch by Terran Melconian, aeb, 2001-12-14.
+// Modified by Hacksaw <hacksaw@hacksaw.org> 2003-03-13.
+// Modified by Matt Domsch, 2003-04-09: _init and _fini obsolete
+// Modified by Michael Kerrisk <mtk.manpages@gmail.com> 2003-05-16.
+// Modified by Walter Harms: dladdr, dlvsym
+// Modified by Petr Baudis <pasky@suse.cz>, 2008-12-04: dladdr caveat
-import "unsafe"
+package dl
//#define _GNU_SOURCE
-//#include <stdlib.h>
-//#include <stdint.h>
//#include <dlfcn.h>
-//const uintptr_t rtld_next = (uintptr_t)RTLD_NEXT;
-//const uintptr_t rtld_default = (uintptr_t)RTLD_DEFAULT;
import "C"
+// These flags to Open() are GNU libc extensions.
const (
- RTLD_NOLOAD Flag = C.RTLD_NOLOAD
- RTLD_NODELETE Flag = C.RTLD_NODELETE
- RTLD_DEEPBIND Flag = C.RTLD_DEEPBIND
-)
+ // Do not unload the shared object during Close().
+ // Consequently, the object's static variables are not
+ // reinitialized if the object is reloaded with Open() at a
+ // later time.
+ RTLD_NODELETE Flag = C.RTLD_NODELETE // (since glibc 2.2, also present on Solaris)
-// These are kinda weird in that they aren't required by the standard,
-// but they are reserved by the standard (see the documentation for
-// `dlsym(3)`). On glibc, it takes _GNU_SOURCE to get them.
-//
-// There are two special pseudo-handles that may be specified
-// in handle:
-var (
- RTLD_DEFAULT Handle = Handle{unsafe.Pointer(uintptr(C.rtld_default))}
- // Find the first occurrence of the desired symbol using
- // the default shared object search order. The search will
- // include global symbols in the executable and its
- // dependencies, as well as symbols in shared objects that
- // were dynamically loaded with the RTLD_GLOBAL flag.
- RTLD_NEXT Handle = Handle{unsafe.Pointer(uintptr(C.rtld_next))}
- // Find the next occurrence of the desired symbol in the
- // search order after the current object. This allows one
- // to provide a wrapper around a function in another shared
- // object, so that, for example, the definition of a
- // function in a preloaded shared object (see LD_PRELOAD in
- // ld.so(8)) can find and invoke the "real" function
- // provided in another shared object (or for that matter,
- // the "next" definition of the function in cases where
- // there are multiple layers of preloading).
+ // Don't load the shared object. This can be used to test if
+ // the object is already resident (Open() returns nil if it
+ // is not, or the object's handle if it is resident). This
+ // flag can also be used to promote the flags on a shared
+ // object that is already loaded. For example, a shared
+ // object that was previously loaded with RTLD_LOCAL can be
+ // reopened with RTLD_NOLOAD | RTLD_GLOBAL.
+ RTLD_NOLOAD Flag = C.RTLD_NOLOAD // (since glibc 2.2, also present on Solaris)
+
+ // Place the lookup scope of the symbols in this shared object
+ // ahead of the global scope. This means that a
+ // self-contained object will use its own symbols in
+ // preference to global symbols with the same name contained
+ // in objects that have already been loaded.
+ RTLD_DEEPBIND Flag = C.RTLD_DEEPBIND // (since glibc 2.3.4)
)
// TODO: dlmopen