| Index: fusl/src/internal/dynlink.h
|
| diff --git a/fusl/src/internal/dynlink.h b/fusl/src/internal/dynlink.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9c494e43966e0d7f0c80b621c6178f5cc4871a6d
|
| --- /dev/null
|
| +++ b/fusl/src/internal/dynlink.h
|
| @@ -0,0 +1,92 @@
|
| +#ifndef _INTERNAL_RELOC_H
|
| +#define _INTERNAL_RELOC_H
|
| +
|
| +#include <features.h>
|
| +#include <elf.h>
|
| +#include <stdint.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)
|
| +#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)
|
| +#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_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
|
| +
|
| +#define AUX_CNT 32
|
| +#define DYN_CNT 32
|
| +
|
| +typedef void (*stage2_func)(unsigned char *, size_t *);
|
| +typedef _Noreturn void (*stage3_func)(size_t *);
|
| +
|
| +#endif
|
|
|