#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_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
#define DYN_CNT 32
typedef void (*stage2_func)(unsigned char *, size_t *);
-typedef _Noreturn void (*stage3_func)(size_t *);
+typedef void (*stage3_func)(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();
#endif