Index: fusl/include/link.h |
diff --git a/fusl/include/link.h b/fusl/include/link.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9349cddd5da7de4f7fa3e2abbda8cdad07d47151 |
--- /dev/null |
+++ b/fusl/include/link.h |
@@ -0,0 +1,54 @@ |
+#ifndef _LINK_H |
+#define _LINK_H |
+ |
+#ifdef __cplusplus |
+extern "C" { |
+#endif |
+ |
+#include <elf.h> |
+#define __NEED_size_t |
+#define __NEED_uint32_t |
+#include <bits/alltypes.h> |
+ |
+#if UINTPTR_MAX > 0xffffffff |
+#define ElfW(type) Elf64_ ## type |
+#else |
+#define ElfW(type) Elf32_ ## type |
+#endif |
+ |
+/* this is the same everywhere except alpha and s390 */ |
+typedef uint32_t Elf_Symndx; |
+ |
+struct dl_phdr_info { |
+ ElfW(Addr) dlpi_addr; |
+ const char *dlpi_name; |
+ const ElfW(Phdr) *dlpi_phdr; |
+ ElfW(Half) dlpi_phnum; |
+ unsigned long long int dlpi_adds; |
+ unsigned long long int dlpi_subs; |
+ size_t dlpi_tls_modid; |
+ void *dlpi_tls_data; |
+}; |
+ |
+struct link_map { |
+ ElfW(Addr) l_addr; |
+ char *l_name; |
+ ElfW(Dyn) *l_ld; |
+ struct link_map *l_next, *l_prev; |
+}; |
+ |
+struct r_debug { |
+ int r_version; |
+ struct link_map *r_map; |
+ ElfW(Addr) r_brk; |
+ enum { RT_CONSISTENT, RT_ADD, RT_DELETE } r_state; |
+ ElfW(Addr) r_ldbase; |
+}; |
+ |
+int dl_iterate_phdr(int (*)(struct dl_phdr_info *, size_t, void *), void *); |
+ |
+#ifdef __cplusplus |
+} |
+#endif |
+ |
+#endif |