#ifndef _INTERNAL_RELOC_H #define _INTERNAL_RELOC_H #include #include #include #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, }; #include "reloc.h" #define IS_RELATIVE(x) ( \ (R_TYPE(x) == REL_RELATIVE) || \ (R_TYPE(x) == REL_SYM_OR_REL && !R_SYM(x)) ) #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 *); typedef _Noreturn void (*stage3_func)(size_t *); #endif