1 #ifndef _INTERNAL_RELOC_H
2 #define _INTERNAL_RELOC_H
8 #if UINTPTR_MAX == 0xffffffff
9 typedef Elf32_Ehdr Ehdr;
10 typedef Elf32_Phdr Phdr;
11 typedef Elf32_Sym Sym;
12 #define R_TYPE(x) ((x)&255)
13 #define R_SYM(x) ((x)>>8)
15 typedef Elf64_Ehdr Ehdr;
16 typedef Elf64_Phdr Phdr;
17 typedef Elf64_Sym Sym;
18 #define R_TYPE(x) ((x)&0x7fffffff)
19 #define R_SYM(x) ((x)>>32)
22 /* These enum constants provide unmatchable default values for
23 * any relocation type the arch does not use. */
43 struct fdpic_loadseg {
44 uintptr_t addr, p_vaddr, p_memsz;
47 struct fdpic_loadmap {
48 unsigned short version, nsegs;
49 struct fdpic_loadseg segs[];
52 struct fdpic_dummy_loadmap {
53 unsigned short version, nsegs;
54 struct fdpic_loadseg segs[1];
59 #ifndef FDPIC_CONSTDISP_FLAG
60 #define FDPIC_CONSTDISP_FLAG 0
68 #define IS_RELATIVE(x,s) ( \
69 (R_TYPE(x) == REL_RELATIVE) || \
70 (R_TYPE(x) == REL_SYM_OR_REL && !R_SYM(x)) )
72 #define IS_RELATIVE(x,s) ( ( \
73 (R_TYPE(x) == REL_FUNCDESC_VAL) || \
74 (R_TYPE(x) == REL_SYMBOLIC) ) \
75 && (((s)[R_SYM(x)].st_info & 0xf) == STT_SECTION) )
78 #ifndef NEED_MIPS_GOT_RELOCS
79 #define NEED_MIPS_GOT_RELOCS 0
85 typedef void (*stage2_func)(unsigned char *, size_t *);
86 typedef _Noreturn void (*stage3_func)(size_t *);