summaryrefslogtreecommitdiff
path: root/src/dl
diff options
context:
space:
mode:
Diffstat (limited to 'src/dl')
-rw-r--r--src/dl/dl_gnu.go82
-rw-r--r--src/dl/dlfcn.go135
-rw-r--r--src/dl/dlsym_reserved.go63
3 files changed, 0 insertions, 280 deletions
diff --git a/src/dl/dl_gnu.go b/src/dl/dl_gnu.go
deleted file mode 100644
index 771e9c4..0000000
--- a/src/dl/dl_gnu.go
+++ /dev/null
@@ -1,82 +0,0 @@
-// 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
-
-package dl
-
-//#define _GNU_SOURCE
-//#include <dlfcn.h>
-import "C"
-
-// These flags to Open() are GNU libc extensions.
-const (
- // 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)
-
- // 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
-// TODO: dlvsym
-// TODO: dladdr
-// - dladdr1
-// TODO: dlinfo
-// - RTLD_DI_LMID
-// - RTLD_DI_LINKMAP
-// - RTLD_DI_ORIGIN
-// - RTLD_DI_SERINFO
-// - RTLD_DI_SERINFOSIZE
-// - RTLD_DI_MODID
-// - RTLD_DI_DATA
-// TODO: dl_iterate_phdr
-// TODO: rtld-audit(7)
diff --git a/src/dl/dlfcn.go b/src/dl/dlfcn.go
deleted file mode 100644
index e240540..0000000
--- a/src/dl/dlfcn.go
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright 2015 Luke Shumaker <lukeshu@sbcglobal.net>.
-//
-// This is free software; 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 to also include the output of
-// any document formatting or typesetting system, including
-// intermediate and printed output.
-//
-// This software 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/>.
-
-// Package dl provides an interface to the POSIX runtime linker.
-package dl
-
-import (
- "errors"
- "sync"
- "unsafe"
-)
-
-//#cgo LDFLAGS: -ldl
-//#include <stdlib.h>
-//#include <dlfcn.h>
-import "C"
-
-var HandleClosedError = errors.New("Handle is already closed")
-
-type Flag int
-
-// POSIX specifies these four flags to Open().
-const (
- // Relocations are performed at an implementation-defined
- // time.
- RTLD_LAZY Flag = C.RTLD_LAZY
-
- // Relocations are performed when the object is loaded.
- RTLD_NOW Flag = C.RTLD_NOW
-
- // All symbols are available for relocation processing of
- // other modules.
- RTLD_GLOBAL Flag = C.RTLD_GLOBAL
-
- // All symbols are not made available for relocation
- // processing by other modules.
- RTLD_LOCAL Flag = C.RTLD_LOCAL
-)
-
-type Handle struct {
- c unsafe.Pointer
- o int
-}
-
-var dllock sync.Mutex
-
-// Open a shared object file, returning a Handle to it, or an error.
-// If name is an empty string, then the returned handle is the global
-// symbol table for the current process; if the name contains a slash,
-// then it is interpretted as a pathname; otherwise, it is
-// interpretted in an implementation-defined manner.
-func Open(name string, flags Flag) (Handle, error) {
- nameC := C.CString(name)
- defer C.free(unsafe.Pointer(nameC))
- if name == "" {
- nameC = nil
- }
-
- dllock.Lock()
- defer dllock.Unlock()
- dlerror()
- ptr := C.dlopen(nameC, C.int(flags))
- if ptr == nil {
- return Handle{}, dlerror()
- }
- return Handle{c: ptr, o: 1}, nil
-}
-
-// Look up a symbol, and return a pointer to it.
-func (h Handle) Sym(symbol string) (unsafe.Pointer, error) {
- dllock.Lock()
- defer dllock.Unlock()
-
- if h.o == 0 {
- return nil, HandleClosedError
- }
-
- symbolC := C.CString(symbol)
- defer C.free(unsafe.Pointer(symbolC))
-
- dlerror()
- ptr := C.dlsym(h.c, symbolC)
- if ptr == nil {
- return nil, dlerror()
- }
- return ptr, nil
-}
-
-// Close this handle on a shared object; decrementint the reference
-// count; if the reference count drops below 0, then the object is
-// unloaded.
-func (h Handle) Close() error {
- dllock.Lock()
- defer dllock.Unlock()
-
- if h.o == 0 {
- return HandleClosedError
- }
-
- dlerror()
- r := C.dlclose(h.c)
- if r != 0 {
- return dlerror()
- }
- if h.o == 1 {
- h.o = 0
- }
- return nil
-}
-
-func dlerror() error {
- strC := C.dlerror()
- if strC == nil {
- return nil
- }
- return errors.New(C.GoString(strC))
-}
diff --git a/src/dl/dlsym_reserved.go b/src/dl/dlsym_reserved.go
deleted file mode 100644
index 081e012..0000000
--- a/src/dl/dlsym_reserved.go
+++ /dev/null
@@ -1,63 +0,0 @@
-// The documentation for RTLD_DEFAULT and RTLD_NEXT is taken from the
-// Linux Programmer's Manual page for dlsym(3).
-//
-// Copyright 1995 Yggdrasil Computing, Incorporated.
-// Copyright 2003, 2015 Michael Kerrisk <mtk.manpages@gmail.com>.
-// Copyright 2015 Luke Shumaker <lukeshu@sbcglobal.net>.
-//
-// 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/>.
-
-package dl
-
-import "unsafe"
-
-//#define _GNU_SOURCE
-//#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 constant values for Handles are reserved by POSIX for future
-// use with these meanings. They are available in GNU libdl if
-// _GNU_SOURCE is defined.
-var (
- // This Handle represents the default 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_DEFAULT Handle
-
- // This Handle represents the shared object 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).
- RTLD_NEXT Handle
-)
-
-func init() {
- RTLD_DEFAULT = Handle{c: unsafe.Pointer(uintptr(C.rtld_default)), o: 2}
- RTLD_DEFAULT = Handle{c: unsafe.Pointer(uintptr(C.rtld_next)), o: 2}
-}