dynlink.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #ifndef _INTERNAL_RELOC_H
  2. #define _INTERNAL_RELOC_H
  3. #include <features.h>
  4. #include <elf.h>
  5. #include <stdint.h>
  6. #if UINTPTR_MAX == 0xffffffff
  7. typedef Elf32_Ehdr Ehdr;
  8. typedef Elf32_Phdr Phdr;
  9. typedef Elf32_Sym Sym;
  10. #define R_TYPE(x) ((x)&255)
  11. #define R_SYM(x) ((x)>>8)
  12. #else
  13. typedef Elf64_Ehdr Ehdr;
  14. typedef Elf64_Phdr Phdr;
  15. typedef Elf64_Sym Sym;
  16. #define R_TYPE(x) ((x)&0x7fffffff)
  17. #define R_SYM(x) ((x)>>32)
  18. #endif
  19. /* These enum constants provide unmatchable default values for
  20. * any relocation type the arch does not use. */
  21. enum {
  22. REL_NONE = 0,
  23. REL_SYMBOLIC = -100,
  24. REL_GOT,
  25. REL_PLT,
  26. REL_RELATIVE,
  27. REL_OFFSET,
  28. REL_OFFSET32,
  29. REL_COPY,
  30. REL_SYM_OR_REL,
  31. REL_DTPMOD,
  32. REL_DTPOFF,
  33. REL_TPOFF,
  34. REL_TPOFF_NEG,
  35. REL_TLSDESC,
  36. };
  37. #include "reloc.h"
  38. #define IS_RELATIVE(x) ( \
  39. (R_TYPE(x) == REL_RELATIVE) || \
  40. (R_TYPE(x) == REL_SYM_OR_REL && !R_SYM(x)) )
  41. #ifndef NEED_MIPS_GOT_RELOCS
  42. #define NEED_MIPS_GOT_RELOCS 0
  43. #endif
  44. #define AUX_CNT 32
  45. #define DYN_CNT 32
  46. typedef void (*stage2_func)(unsigned char *, size_t *);
  47. typedef _Noreturn void (*stage3_func)(size_t *);
  48. #endif