123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- #ifndef _INTERNAL_RELOC_H
- #define _INTERNAL_RELOC_H
- #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_Phdr Phdr;
- 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
- * any relocation type the arch does not use. */
- enum {
- REL_NONE = 0,
- REL_SYMBOLIC = -100,
- REL_USYMBOLIC,
- 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
- #ifndef DT_DEBUG_INDIRECT
- #define DT_DEBUG_INDIRECT 0
- #endif
- #define AUX_CNT 32
- #define DYN_CNT 32
- typedef void (*stage2_func)(unsigned char *, 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
|