1*c9945492SAndroid Build Coastguard Worker #ifndef _INTERNAL_RELOC_H 2*c9945492SAndroid Build Coastguard Worker #define _INTERNAL_RELOC_H 3*c9945492SAndroid Build Coastguard Worker 4*c9945492SAndroid Build Coastguard Worker #include <features.h> 5*c9945492SAndroid Build Coastguard Worker #include <elf.h> 6*c9945492SAndroid Build Coastguard Worker #include <stdint.h> 7*c9945492SAndroid Build Coastguard Worker #include <stddef.h> 8*c9945492SAndroid Build Coastguard Worker #include <stdarg.h> 9*c9945492SAndroid Build Coastguard Worker 10*c9945492SAndroid Build Coastguard Worker #if UINTPTR_MAX == 0xffffffff 11*c9945492SAndroid Build Coastguard Worker typedef Elf32_Ehdr Ehdr; 12*c9945492SAndroid Build Coastguard Worker typedef Elf32_Phdr Phdr; 13*c9945492SAndroid Build Coastguard Worker typedef Elf32_Sym Sym; 14*c9945492SAndroid Build Coastguard Worker #define R_TYPE(x) ((x)&255) 15*c9945492SAndroid Build Coastguard Worker #define R_SYM(x) ((x)>>8) 16*c9945492SAndroid Build Coastguard Worker #define R_INFO ELF32_R_INFO 17*c9945492SAndroid Build Coastguard Worker #else 18*c9945492SAndroid Build Coastguard Worker typedef Elf64_Ehdr Ehdr; 19*c9945492SAndroid Build Coastguard Worker typedef Elf64_Phdr Phdr; 20*c9945492SAndroid Build Coastguard Worker typedef Elf64_Sym Sym; 21*c9945492SAndroid Build Coastguard Worker #define R_TYPE(x) ((x)&0x7fffffff) 22*c9945492SAndroid Build Coastguard Worker #define R_SYM(x) ((x)>>32) 23*c9945492SAndroid Build Coastguard Worker #define R_INFO ELF64_R_INFO 24*c9945492SAndroid Build Coastguard Worker #endif 25*c9945492SAndroid Build Coastguard Worker 26*c9945492SAndroid Build Coastguard Worker /* These enum constants provide unmatchable default values for 27*c9945492SAndroid Build Coastguard Worker * any relocation type the arch does not use. */ 28*c9945492SAndroid Build Coastguard Worker enum { 29*c9945492SAndroid Build Coastguard Worker REL_NONE = 0, 30*c9945492SAndroid Build Coastguard Worker REL_SYMBOLIC = -100, 31*c9945492SAndroid Build Coastguard Worker REL_USYMBOLIC, 32*c9945492SAndroid Build Coastguard Worker REL_GOT, 33*c9945492SAndroid Build Coastguard Worker REL_PLT, 34*c9945492SAndroid Build Coastguard Worker REL_RELATIVE, 35*c9945492SAndroid Build Coastguard Worker REL_OFFSET, 36*c9945492SAndroid Build Coastguard Worker REL_OFFSET32, 37*c9945492SAndroid Build Coastguard Worker REL_COPY, 38*c9945492SAndroid Build Coastguard Worker REL_SYM_OR_REL, 39*c9945492SAndroid Build Coastguard Worker REL_DTPMOD, 40*c9945492SAndroid Build Coastguard Worker REL_DTPOFF, 41*c9945492SAndroid Build Coastguard Worker REL_TPOFF, 42*c9945492SAndroid Build Coastguard Worker REL_TPOFF_NEG, 43*c9945492SAndroid Build Coastguard Worker REL_TLSDESC, 44*c9945492SAndroid Build Coastguard Worker REL_FUNCDESC, 45*c9945492SAndroid Build Coastguard Worker REL_FUNCDESC_VAL, 46*c9945492SAndroid Build Coastguard Worker }; 47*c9945492SAndroid Build Coastguard Worker 48*c9945492SAndroid Build Coastguard Worker struct fdpic_loadseg { 49*c9945492SAndroid Build Coastguard Worker uintptr_t addr, p_vaddr, p_memsz; 50*c9945492SAndroid Build Coastguard Worker }; 51*c9945492SAndroid Build Coastguard Worker 52*c9945492SAndroid Build Coastguard Worker struct fdpic_loadmap { 53*c9945492SAndroid Build Coastguard Worker unsigned short version, nsegs; 54*c9945492SAndroid Build Coastguard Worker struct fdpic_loadseg segs[]; 55*c9945492SAndroid Build Coastguard Worker }; 56*c9945492SAndroid Build Coastguard Worker 57*c9945492SAndroid Build Coastguard Worker struct fdpic_dummy_loadmap { 58*c9945492SAndroid Build Coastguard Worker unsigned short version, nsegs; 59*c9945492SAndroid Build Coastguard Worker struct fdpic_loadseg segs[1]; 60*c9945492SAndroid Build Coastguard Worker }; 61*c9945492SAndroid Build Coastguard Worker 62*c9945492SAndroid Build Coastguard Worker #include "reloc.h" 63*c9945492SAndroid Build Coastguard Worker 64*c9945492SAndroid Build Coastguard Worker #ifndef FDPIC_CONSTDISP_FLAG 65*c9945492SAndroid Build Coastguard Worker #define FDPIC_CONSTDISP_FLAG 0 66*c9945492SAndroid Build Coastguard Worker #endif 67*c9945492SAndroid Build Coastguard Worker 68*c9945492SAndroid Build Coastguard Worker #ifndef DL_FDPIC 69*c9945492SAndroid Build Coastguard Worker #define DL_FDPIC 0 70*c9945492SAndroid Build Coastguard Worker #endif 71*c9945492SAndroid Build Coastguard Worker 72*c9945492SAndroid Build Coastguard Worker #ifndef DL_NOMMU_SUPPORT 73*c9945492SAndroid Build Coastguard Worker #define DL_NOMMU_SUPPORT 0 74*c9945492SAndroid Build Coastguard Worker #endif 75*c9945492SAndroid Build Coastguard Worker 76*c9945492SAndroid Build Coastguard Worker #ifndef TLSDESC_BACKWARDS 77*c9945492SAndroid Build Coastguard Worker #define TLSDESC_BACKWARDS 0 78*c9945492SAndroid Build Coastguard Worker #endif 79*c9945492SAndroid Build Coastguard Worker 80*c9945492SAndroid Build Coastguard Worker #if !DL_FDPIC 81*c9945492SAndroid Build Coastguard Worker #define IS_RELATIVE(x,s) ( \ 82*c9945492SAndroid Build Coastguard Worker (R_TYPE(x) == REL_RELATIVE) || \ 83*c9945492SAndroid Build Coastguard Worker (R_TYPE(x) == REL_SYM_OR_REL && !R_SYM(x)) ) 84*c9945492SAndroid Build Coastguard Worker #else 85*c9945492SAndroid Build Coastguard Worker #define IS_RELATIVE(x,s) ( ( \ 86*c9945492SAndroid Build Coastguard Worker (R_TYPE(x) == REL_FUNCDESC_VAL) || \ 87*c9945492SAndroid Build Coastguard Worker (R_TYPE(x) == REL_SYMBOLIC) ) \ 88*c9945492SAndroid Build Coastguard Worker && (((s)[R_SYM(x)].st_info & 0xf) == STT_SECTION) ) 89*c9945492SAndroid Build Coastguard Worker #endif 90*c9945492SAndroid Build Coastguard Worker 91*c9945492SAndroid Build Coastguard Worker #ifndef NEED_MIPS_GOT_RELOCS 92*c9945492SAndroid Build Coastguard Worker #define NEED_MIPS_GOT_RELOCS 0 93*c9945492SAndroid Build Coastguard Worker #endif 94*c9945492SAndroid Build Coastguard Worker 95*c9945492SAndroid Build Coastguard Worker #ifndef DT_DEBUG_INDIRECT 96*c9945492SAndroid Build Coastguard Worker #define DT_DEBUG_INDIRECT 0 97*c9945492SAndroid Build Coastguard Worker #endif 98*c9945492SAndroid Build Coastguard Worker 99*c9945492SAndroid Build Coastguard Worker #ifndef DT_DEBUG_INDIRECT_REL 100*c9945492SAndroid Build Coastguard Worker #define DT_DEBUG_INDIRECT_REL 0 101*c9945492SAndroid Build Coastguard Worker #endif 102*c9945492SAndroid Build Coastguard Worker 103*c9945492SAndroid Build Coastguard Worker #define AUX_CNT 32 104*c9945492SAndroid Build Coastguard Worker #define DYN_CNT 37 105*c9945492SAndroid Build Coastguard Worker 106*c9945492SAndroid Build Coastguard Worker typedef void (*stage2_func)(unsigned char *, size_t *); 107*c9945492SAndroid Build Coastguard Worker 108*c9945492SAndroid Build Coastguard Worker hidden void *__dlsym(void *restrict, const char *restrict, void *restrict); 109*c9945492SAndroid Build Coastguard Worker 110*c9945492SAndroid Build Coastguard Worker hidden void __dl_seterr(const char *, ...); 111*c9945492SAndroid Build Coastguard Worker hidden int __dl_invalid_handle(void *); 112*c9945492SAndroid Build Coastguard Worker hidden void __dl_vseterr(const char *, va_list); 113*c9945492SAndroid Build Coastguard Worker 114*c9945492SAndroid Build Coastguard Worker hidden ptrdiff_t __tlsdesc_static(), __tlsdesc_dynamic(); 115*c9945492SAndroid Build Coastguard Worker 116*c9945492SAndroid Build Coastguard Worker hidden extern int __malloc_replaced; 117*c9945492SAndroid Build Coastguard Worker hidden extern int __aligned_alloc_replaced; 118*c9945492SAndroid Build Coastguard Worker hidden void __malloc_donate(char *, char *); 119*c9945492SAndroid Build Coastguard Worker hidden int __malloc_allzerop(void *); 120*c9945492SAndroid Build Coastguard Worker 121*c9945492SAndroid Build Coastguard Worker #endif 122