summaryrefslogtreecommitdiffstats
path: root/libc-top-half/musl/src/internal/dynlink.h
diff options
context:
space:
mode:
Diffstat (limited to 'libc-top-half/musl/src/internal/dynlink.h')
-rw-r--r--libc-top-half/musl/src/internal/dynlink.h113
1 files changed, 113 insertions, 0 deletions
diff --git a/libc-top-half/musl/src/internal/dynlink.h b/libc-top-half/musl/src/internal/dynlink.h
new file mode 100644
index 0000000..51c0639
--- /dev/null
+++ b/libc-top-half/musl/src/internal/dynlink.h
@@ -0,0 +1,113 @@
+#ifndef _INTERNAL_RELOC_H
+#define _INTERNAL_RELOC_H
+
+#include <features.h>
+#include <elf.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <stdarg.h>
+
+#if UINTPTR_MAX == 0xffffffff
+typedef Elf32_Ehdr Ehdr;
+typedef Elf32_Phdr Phdr;
+typedef Elf32_Sym Sym;
+#define R_TYPE(x) ((x)&255)
+#define R_SYM(x) ((x)>>8)
+#define R_INFO ELF32_R_INFO
+#else
+typedef Elf64_Ehdr Ehdr;
+typedef Elf64_Phdr Phdr;
+typedef Elf64_Sym Sym;
+#define R_TYPE(x) ((x)&0x7fffffff)
+#define R_SYM(x) ((x)>>32)
+#define R_INFO ELF64_R_INFO
+#endif
+
+/* These enum constants provide unmatchable default values for
+ * any relocation type the arch does not use. */
+enum {
+ REL_NONE = 0,
+ REL_SYMBOLIC = -100,
+ REL_USYMBOLIC,
+ REL_GOT,
+ REL_PLT,
+ REL_RELATIVE,
+ REL_OFFSET,
+ REL_OFFSET32,
+ REL_COPY,
+ REL_SYM_OR_REL,
+ REL_DTPMOD,
+ REL_DTPOFF,
+ REL_TPOFF,
+ REL_TPOFF_NEG,
+ REL_TLSDESC,
+ REL_FUNCDESC,
+ REL_FUNCDESC_VAL,
+};
+
+struct fdpic_loadseg {
+ uintptr_t addr, p_vaddr, p_memsz;
+};
+
+struct fdpic_loadmap {
+ unsigned short version, nsegs;
+ struct fdpic_loadseg segs[];
+};
+
+struct fdpic_dummy_loadmap {
+ unsigned short version, nsegs;
+ struct fdpic_loadseg segs[1];
+};
+
+#include "reloc.h"
+
+#ifndef FDPIC_CONSTDISP_FLAG
+#define FDPIC_CONSTDISP_FLAG 0
+#endif
+
+#ifndef DL_FDPIC
+#define DL_FDPIC 0
+#endif
+
+#ifndef DL_NOMMU_SUPPORT
+#define DL_NOMMU_SUPPORT 0
+#endif
+
+#if !DL_FDPIC
+#define IS_RELATIVE(x,s) ( \
+ (R_TYPE(x) == REL_RELATIVE) || \
+ (R_TYPE(x) == REL_SYM_OR_REL && !R_SYM(x)) )
+#else
+#define IS_RELATIVE(x,s) ( ( \
+ (R_TYPE(x) == REL_FUNCDESC_VAL) || \
+ (R_TYPE(x) == REL_SYMBOLIC) ) \
+ && (((s)[R_SYM(x)].st_info & 0xf) == STT_SECTION) )
+#endif
+
+#ifndef NEED_MIPS_GOT_RELOCS
+#define NEED_MIPS_GOT_RELOCS 0
+#endif
+
+#ifndef DT_DEBUG_INDIRECT
+#define DT_DEBUG_INDIRECT 0
+#endif
+
+#define AUX_CNT 32
+#define DYN_CNT 32
+
+typedef void (*stage2_func)(unsigned char *, size_t *);
+
+hidden void *__dlsym(void *restrict, const char *restrict, void *restrict);
+
+hidden void __dl_seterr(const char *, ...);
+hidden int __dl_invalid_handle(void *);
+hidden void __dl_vseterr(const char *, va_list);
+
+hidden ptrdiff_t __tlsdesc_static(), __tlsdesc_dynamic();
+
+hidden extern int __malloc_replaced;
+hidden extern int __aligned_alloc_replaced;
+hidden void __malloc_donate(char *, char *);
+hidden int __malloc_allzerop(void *);
+
+#endif