dynlink.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #ifndef _INTERNAL_RELOC_H
  2. #define _INTERNAL_RELOC_H
  3. #include <features.h>
  4. #include <elf.h>
  5. #include <stdint.h>
  6. #include <stddef.h>
  7. #include <stdarg.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)
  14. #define R_INFO ELF32_R_INFO
  15. #else
  16. typedef Elf64_Ehdr Ehdr;
  17. typedef Elf64_Phdr Phdr;
  18. typedef Elf64_Sym Sym;
  19. #define R_TYPE(x) ((x)&0x7fffffff)
  20. #define R_SYM(x) ((x)>>32)
  21. #define R_INFO ELF64_R_INFO
  22. #endif
  23. /* These enum constants provide unmatchable default values for
  24. * any relocation type the arch does not use. */
  25. enum {
  26. REL_NONE = 0,
  27. REL_SYMBOLIC = -100,
  28. REL_USYMBOLIC,
  29. REL_GOT,
  30. REL_PLT,
  31. REL_RELATIVE,
  32. REL_OFFSET,
  33. REL_OFFSET32,
  34. REL_COPY,
  35. REL_SYM_OR_REL,
  36. REL_DTPMOD,
  37. REL_DTPOFF,
  38. REL_TPOFF,
  39. REL_TPOFF_NEG,
  40. REL_TLSDESC,
  41. REL_FUNCDESC,
  42. REL_FUNCDESC_VAL,
  43. };
  44. struct fdpic_loadseg {
  45. uintptr_t addr, p_vaddr, p_memsz;
  46. };
  47. struct fdpic_loadmap {
  48. unsigned short version, nsegs;
  49. struct fdpic_loadseg segs[];
  50. };
  51. struct fdpic_dummy_loadmap {
  52. unsigned short version, nsegs;
  53. struct fdpic_loadseg segs[1];
  54. };
  55. #include "reloc.h"
  56. #ifndef FDPIC_CONSTDISP_FLAG
  57. #define FDPIC_CONSTDISP_FLAG 0
  58. #endif
  59. #ifndef DL_FDPIC
  60. #define DL_FDPIC 0
  61. #endif
  62. #ifndef DL_NOMMU_SUPPORT
  63. #define DL_NOMMU_SUPPORT 0
  64. #endif
  65. #if !DL_FDPIC
  66. #define IS_RELATIVE(x,s) ( \
  67. (R_TYPE(x) == REL_RELATIVE) || \
  68. (R_TYPE(x) == REL_SYM_OR_REL && !R_SYM(x)) )
  69. #else
  70. #define IS_RELATIVE(x,s) ( ( \
  71. (R_TYPE(x) == REL_FUNCDESC_VAL) || \
  72. (R_TYPE(x) == REL_SYMBOLIC) ) \
  73. && (((s)[R_SYM(x)].st_info & 0xf) == STT_SECTION) )
  74. #endif
  75. #ifndef NEED_MIPS_GOT_RELOCS
  76. #define NEED_MIPS_GOT_RELOCS 0
  77. #endif
  78. #ifndef DT_DEBUG_INDIRECT
  79. #define DT_DEBUG_INDIRECT 0
  80. #endif
  81. #define AUX_CNT 32
  82. #define DYN_CNT 32
  83. typedef void (*stage2_func)(unsigned char *, size_t *);
  84. hidden void *__dlsym(void *restrict, const char *restrict, void *restrict);
  85. hidden void __dl_seterr(const char *, ...);
  86. hidden int __dl_invalid_handle(void *);
  87. hidden void __dl_vseterr(const char *, va_list);
  88. hidden ptrdiff_t __tlsdesc_static(), __tlsdesc_dynamic();
  89. #endif