X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Finternal%2Fdynlink.h;h=830354eb36efbb430a416a1e501636c36c637a70;hb=d32dadd60efb9d3b255351a3b532f8e4c3dd0db1;hp=53661d62ffa62bd223acc9acd206827c7ac3b7c5;hpb=f3ddd173806fd5c60b3f034528ca24542aecc5b9;p=musl diff --git a/src/internal/dynlink.h b/src/internal/dynlink.h index 53661d62..830354eb 100644 --- a/src/internal/dynlink.h +++ b/src/internal/dynlink.h @@ -4,6 +4,8 @@ #include #include #include +#include +#include #if UINTPTR_MAX == 0xffffffff typedef Elf32_Ehdr Ehdr; @@ -11,12 +13,14 @@ 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 @@ -24,6 +28,7 @@ typedef Elf64_Sym Sym; enum { REL_NONE = 0, REL_SYMBOLIC = -100, + REL_USYMBOLIC, REL_GOT, REL_PLT, REL_RELATIVE, @@ -36,22 +41,73 @@ enum { 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" -#define IS_RELATIVE(x) ( \ +#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 +#define DYN_CNT 37 + +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(); -typedef void (*stage2_func)(unsigned char *); -typedef _Noreturn void (*stage3_func)(size_t *); +hidden extern int __malloc_replaced; +hidden extern int __aligned_alloc_replaced; +hidden void __malloc_donate(char *, char *); +hidden int __malloc_allzerop(void *); #endif