summaryrefslogtreecommitdiffstats
path: root/include/dlfcn.h
diff options
context:
space:
mode:
authorCarmelo Amoroso <carmelo.amoroso@st.com>2008-07-09 16:47:01 +0000
committerCarmelo Amoroso <carmelo.amoroso@st.com>2008-07-09 16:47:01 +0000
commit62a21af8006ab04282fdc354c5b4dc765f56d058 (patch)
tree568761d58289238aa14cced3f0010809d4d28c00 /include/dlfcn.h
parentef250238dc1572caf859c2b64652f9cdfb0d9e42 (diff)
downloaduClibc-alpine-62a21af8006ab04282fdc354c5b4dc765f56d058.tar.bz2
uClibc-alpine-62a21af8006ab04282fdc354c5b4dc765f56d058.tar.xz
BIG BIG commit: all left files merged from trunk [rev 22714]. Currenntly NPTL sh4 port build and work fine. All committed to allow Khem Ray working on a working branch to integrate the ARM nptl port. MIPS nptl port not tested but should still building and working fine. There are some other part non yet merged with trunk (misc/internals and some headers file that need some more work). Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
Diffstat (limited to 'include/dlfcn.h')
-rw-r--r--include/dlfcn.h110
1 files changed, 106 insertions, 4 deletions
diff --git a/include/dlfcn.h b/include/dlfcn.h
index 282fd076c..2348e436d 100644
--- a/include/dlfcn.h
+++ b/include/dlfcn.h
@@ -1,5 +1,6 @@
/* User functions for run-time dynamic loading.
- Copyright (C) 1995-1999,2000,2001,2003,2004 Free Software Foundation, Inc.
+ Copyright (C) 1995-1999,2000,2001,2003,2004,2006
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -39,6 +40,16 @@
the run-time address of the symbol called NAME in the global scope
is returned. */
# define RTLD_DEFAULT ((void *) 0)
+
+
+# if 0 /* uClibc doesnt support this */
+/* Type for namespace indeces. */
+typedef long int Lmid_t;
+
+/* Special namespace ID values. */
+# define LM_ID_BASE 0 /* Initial namespace. */
+# define LM_ID_NEWLM -1 /* For dlmopen: request new namespace. */
+# endif
#endif
__BEGIN_DECLS
@@ -56,8 +67,10 @@ extern int dlclose (void *__handle) __THROW __nonnull ((1));
extern void *dlsym (void *__restrict __handle,
__const char *__restrict __name) __THROW __nonnull ((2));
-#if 0
-#ifdef __USE_GNU
+#if 0 /*def __USE_GNU*/
+/* Like `dlopen', but request object to be allocated in a new namespace. */
+extern void *dlmopen (Lmid_t __nsid, __const char *__file, int __mode) __THROW;
+
/* Find the run-time address in the shared object HANDLE refers to
of the symbol called NAME with VERSION. */
extern void *dlvsym (void *__restrict __handle,
@@ -65,7 +78,6 @@ extern void *dlvsym (void *__restrict __handle,
__const char *__restrict __version)
__THROW __nonnull ((2, 3));
#endif
-#endif
/* When any of the above functions fails, call this function
to return a string describing the error. Each call resets
@@ -89,10 +101,100 @@ typedef struct
extern int dladdr (__const void *__address, Dl_info *__info)
__THROW __nonnull ((2));
+#if 0 /* not supported by uClibc */
+/* Same as `dladdr', but additionally sets *EXTRA_INFO according to FLAGS. */
+extern int dladdr1 (__const void *__address, Dl_info *__info,
+ void **__extra_info, int __flags) __THROW __nonnull ((2));
+
+/* These are the possible values for the FLAGS argument to `dladdr1'.
+ This indicates what extra information is stored at *EXTRA_INFO.
+ It may also be zero, in which case the EXTRA_INFO argument is not used. */
+enum
+ {
+ /* Matching symbol table entry (const ElfNN_Sym *). */
+ RTLD_DL_SYMENT = 1,
+
+ /* The object containing the address (struct link_map *). */
+ RTLD_DL_LINKMAP = 2
+ };
+
+
+/* Get information about the shared object HANDLE refers to.
+ REQUEST is from among the values below, and determines the use of ARG.
+
+ On success, returns zero. On failure, returns -1 and records an error
+ message to be fetched with `dlerror'. */
+extern int dlinfo (void *__restrict __handle,
+ int __request, void *__restrict __arg)
+ __THROW __nonnull ((1, 3));
+
+/* These are the possible values for the REQUEST argument to `dlinfo'. */
+enum
+ {
+ /* Treat ARG as `lmid_t *'; store namespace ID for HANDLE there. */
+ RTLD_DI_LMID = 1,
+
+ /* Treat ARG as `struct link_map **';
+ store the `struct link_map *' for HANDLE there. */
+ RTLD_DI_LINKMAP = 2,
+
+ RTLD_DI_CONFIGADDR = 3, /* Unsupported, defined by Solaris. */
+
+ /* Treat ARG as `Dl_serinfo *' (see below), and fill in to describe the
+ directories that will be searched for dependencies of this object.
+ RTLD_DI_SERINFOSIZE fills in just the `dls_cnt' and `dls_size'
+ entries to indicate the size of the buffer that must be passed to
+ RTLD_DI_SERINFO to fill in the full information. */
+ RTLD_DI_SERINFO = 4,
+ RTLD_DI_SERINFOSIZE = 5,
+
+ /* Treat ARG as `char *', and store there the directory name used to
+ expand $ORIGIN in this shared object's dependency file names. */
+ RTLD_DI_ORIGIN = 6,
+
+ RTLD_DI_PROFILENAME = 7, /* Unsupported, defined by Solaris. */
+ RTLD_DI_PROFILEOUT = 8, /* Unsupported, defined by Solaris. */
+
+ /* Treat ARG as `size_t *', and store there the TLS module ID
+ of this object's PT_TLS segment, as used in TLS relocations;
+ store zero if this object does not define a PT_TLS segment. */
+ RTLD_DI_TLS_MODID = 9,
+
+ /* Treat ARG as `void **', and store there a pointer to the calling
+ thread's TLS block corresponding to this object's PT_TLS segment.
+ Store a null pointer if this object does not define a PT_TLS
+ segment, or if the calling thread has not allocated a block for it. */
+ RTLD_DI_TLS_DATA = 10,
+
+ RTLD_DI_MAX = 10,
+ };
+
+
+/* This is the type of elements in `Dl_serinfo', below.
+ The `dls_name' member points to space in the buffer passed to `dlinfo'. */
+typedef struct
+{
+ char *dls_name; /* Name of library search path directory. */
+ unsigned int dls_flags; /* Indicates where this directory came from. */
+} Dl_serpath;
+
+/* This is the structure that must be passed (by reference) to `dlinfo' for
+ the RTLD_DI_SERINFO and RTLD_DI_SERINFOSIZE requests. */
+typedef struct
+{
+ size_t dls_size; /* Size in bytes of the whole buffer. */
+ unsigned int dls_cnt; /* Number of elements in `dls_serpath'. */
+ Dl_serpath dls_serpath[1]; /* Actually longer, dls_cnt elements. */
+} Dl_serinfo;
+
+#else
+
/* Get information about the shared objects currently loaded */
extern int dlinfo (void);
#endif
+#endif /* __USE_GNU */
+
__END_DECLS