// 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
// .
//
// Modified by David A. Wheeler 2000-11-28.
// Applied patch by Terran Melconian, aeb, 2001-12-14.
// Modified by Hacksaw 2003-03-13.
// Modified by Matt Domsch, 2003-04-09: _init and _fini obsolete
// Modified by Michael Kerrisk 2003-05-16.
// Modified by Walter Harms: dladdr, dlvsym
// Modified by Petr Baudis , 2008-12-04: dladdr caveat
package dl
//#define _GNU_SOURCE
//#include
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)