aboutsummaryrefslogtreecommitdiff
path: root/dlfcn
diff options
context:
space:
mode:
Diffstat (limited to 'dlfcn')
-rw-r--r--dlfcn/Makefile2
-rw-r--r--dlfcn/dlfcn.h27
2 files changed, 28 insertions, 1 deletions
diff --git a/dlfcn/Makefile b/dlfcn/Makefile
index 6bbfbb8..3f5c1ba 100644
--- a/dlfcn/Makefile
+++ b/dlfcn/Makefile
@@ -19,7 +19,7 @@ subdir := dlfcn
include ../Makeconfig
-headers := bits/dlfcn.h dlfcn.h
+headers := bits/dlfcn.h bits/dl_find_object.h dlfcn.h
extra-libs := libdl
libdl-routines := libdl-compat
routines = \
diff --git a/dlfcn/dlfcn.h b/dlfcn/dlfcn.h
index 4a3b870..a7e03c0 100644
--- a/dlfcn/dlfcn.h
+++ b/dlfcn/dlfcn.h
@@ -28,6 +28,8 @@
#ifdef __USE_GNU
+#include <bits/dl_find_object.h>
+
/* If the first argument of `dlsym' or `dlvsym' is set to RTLD_NEXT
the run-time address of the symbol called NAME in the next shared
object is returned. The "next" relation is defined by the order
@@ -194,6 +196,31 @@ typedef struct
Dl_serpath dls_serpath[1]; /* Actually longer, dls_cnt elements. */
# endif
} Dl_serinfo;
+
+struct dl_find_object
+{
+ __extension__ unsigned long long int dlfo_flags;
+ void *dlfo_map_start; /* Beginning of mapping containing address. */
+ void *dlfo_map_end; /* End of mapping. */
+ struct link_map *dlfo_link_map;
+ void *dlfo_eh_frame; /* Exception handling data of the object. */
+# if DLFO_STRUCT_HAS_EH_DBASE
+ void *dlfo_eh_dbase; /* Base address for DW_EH_PE_datarel. */
+# if __WORDSIZE == 32
+ unsigned int __dlfo_eh_dbase_pad;
+# endif
+# endif
+# if DLFO_STRUCT_HAS_EH_COUNT
+ int dlfo_eh_count; /* Number of exception handling entries. */
+ unsigned int __dlfo_eh_count_pad;
+# endif
+ __extension__ unsigned long long int __dflo_reserved[7];
+};
+
+/* If ADDRESS is found in an object, fill in *RESULT and return 0.
+ Otherwise, return -1. */
+int _dl_find_object (void *__address, struct dl_find_object *__result) __THROW;
+
#endif /* __USE_GNU */