#ifndef _INTERNAL_RELOC_H
#define _INTERNAL_RELOC_H

#include <features.h>
#include <elf.h>
#include <stdint.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)
#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)
#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_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*);
typedef _Noreturn void (*stage3_func)(size_t*);

#endif
