
#ifndef ELF_RELOC
#error "ELF_RELOC must be defined"
#endif

// glibc's PowerPC asm/sigcontext.h, when compiling for PPC64, has the
// unfortunate behavior of including asm/elf.h, which defines R_PPC_NONE, etc.
// to their corresponding integer values. As a result, we need to undef them
// here before continuing.

#undef R_PPC64_NONE
#undef R_PPC64_ADDR32
#undef R_PPC64_ADDR24
#undef R_PPC64_ADDR16
#undef R_PPC64_ADDR16_LO
#undef R_PPC64_ADDR16_HI
#undef R_PPC64_ADDR16_HA
#undef R_PPC64_ADDR14
#undef R_PPC64_ADDR14_BRTAKEN
#undef R_PPC64_ADDR14_BRNTAKEN
#undef R_PPC64_REL24
#undef R_PPC64_REL14
#undef R_PPC64_REL14_BRTAKEN
#undef R_PPC64_REL14_BRNTAKEN
#undef R_PPC64_GOT16
#undef R_PPC64_GOT16_LO
#undef R_PPC64_GOT16_HI
#undef R_PPC64_GOT16_HA
#undef R_PPC64_GLOB_DAT
#undef R_PPC64_JMP_SLOT
#undef R_PPC64_RELATIVE
#undef R_PPC64_REL32
#undef R_PPC64_ADDR64
#undef R_PPC64_ADDR16_HIGHER
#undef R_PPC64_ADDR16_HIGHERA
#undef R_PPC64_ADDR16_HIGHEST
#undef R_PPC64_ADDR16_HIGHESTA
#undef R_PPC64_REL64
#undef R_PPC64_TOC16
#undef R_PPC64_TOC16_LO
#undef R_PPC64_TOC16_HI
#undef R_PPC64_TOC16_HA
#undef R_PPC64_TOC
#undef R_PPC64_ADDR16_DS
#undef R_PPC64_ADDR16_LO_DS
#undef R_PPC64_GOT16_DS
#undef R_PPC64_GOT16_LO_DS
#undef R_PPC64_TOC16_DS
#undef R_PPC64_TOC16_LO_DS
#undef R_PPC64_TLS
#undef R_PPC64_DTPMOD64
#undef R_PPC64_TPREL16
#undef R_PPC64_TPREL16_LO
#undef R_PPC64_TPREL16_HI
#undef R_PPC64_TPREL16_HA
#undef R_PPC64_TPREL64
#undef R_PPC64_DTPREL16
#undef R_PPC64_DTPREL16_LO
#undef R_PPC64_DTPREL16_HI
#undef R_PPC64_DTPREL16_HA
#undef R_PPC64_DTPREL64
#undef R_PPC64_GOT_TLSGD16
#undef R_PPC64_GOT_TLSGD16_LO
#undef R_PPC64_GOT_TLSGD16_HI
#undef R_PPC64_GOT_TLSGD16_HA
#undef R_PPC64_GOT_TLSLD16
#undef R_PPC64_GOT_TLSLD16_LO
#undef R_PPC64_GOT_TLSLD16_HI
#undef R_PPC64_GOT_TLSLD16_HA
#undef R_PPC64_GOT_TPREL16_DS
#undef R_PPC64_GOT_TPREL16_LO_DS
#undef R_PPC64_GOT_TPREL16_HI
#undef R_PPC64_GOT_TPREL16_HA
#undef R_PPC64_GOT_DTPREL16_DS
#undef R_PPC64_GOT_DTPREL16_LO_DS
#undef R_PPC64_GOT_DTPREL16_HI
#undef R_PPC64_GOT_DTPREL16_HA
#undef R_PPC64_TPREL16_DS
#undef R_PPC64_TPREL16_LO_DS
#undef R_PPC64_TPREL16_HIGHER
#undef R_PPC64_TPREL16_HIGHERA
#undef R_PPC64_TPREL16_HIGHEST
#undef R_PPC64_TPREL16_HIGHESTA
#undef R_PPC64_DTPREL16_DS
#undef R_PPC64_DTPREL16_LO_DS
#undef R_PPC64_DTPREL16_HIGHER
#undef R_PPC64_DTPREL16_HIGHERA
#undef R_PPC64_DTPREL16_HIGHEST
#undef R_PPC64_DTPREL16_HIGHESTA
#undef R_PPC64_TLSGD
#undef R_PPC64_TLSLD
#undef R_PPC64_ADDR16_HIGH
#undef R_PPC64_ADDR16_HIGHA
#undef R_PPC64_TPREL16_HIGH
#undef R_PPC64_TPREL16_HIGHA
#undef R_PPC64_DTPREL16_HIGH
#undef R_PPC64_DTPREL16_HIGHA
#undef R_PPC64_IRELATIVE
#undef R_PPC64_REL16
#undef R_PPC64_REL16_LO
#undef R_PPC64_REL16_HI
#undef R_PPC64_REL16_HA

ELF_RELOC(R_PPC64_NONE,                 0)
ELF_RELOC(R_PPC64_ADDR32,               1)
ELF_RELOC(R_PPC64_ADDR24,               2)
ELF_RELOC(R_PPC64_ADDR16,               3)
ELF_RELOC(R_PPC64_ADDR16_LO,            4)
ELF_RELOC(R_PPC64_ADDR16_HI,            5)
ELF_RELOC(R_PPC64_ADDR16_HA,            6)
ELF_RELOC(R_PPC64_ADDR14,               7)
ELF_RELOC(R_PPC64_ADDR14_BRTAKEN,       8)
ELF_RELOC(R_PPC64_ADDR14_BRNTAKEN,      9)
ELF_RELOC(R_PPC64_REL24,                10)
ELF_RELOC(R_PPC64_REL14,                11)
ELF_RELOC(R_PPC64_REL14_BRTAKEN,        12)
ELF_RELOC(R_PPC64_REL14_BRNTAKEN,       13)
ELF_RELOC(R_PPC64_GOT16,                14)
ELF_RELOC(R_PPC64_GOT16_LO,             15)
ELF_RELOC(R_PPC64_GOT16_HI,             16)
ELF_RELOC(R_PPC64_GOT16_HA,             17)
ELF_RELOC(R_PPC64_GLOB_DAT,             20)
ELF_RELOC(R_PPC64_JMP_SLOT,             21)
ELF_RELOC(R_PPC64_RELATIVE,             22)
ELF_RELOC(R_PPC64_REL32,                26)
ELF_RELOC(R_PPC64_ADDR64,               38)
ELF_RELOC(R_PPC64_ADDR16_HIGHER,        39)
ELF_RELOC(R_PPC64_ADDR16_HIGHERA,       40)
ELF_RELOC(R_PPC64_ADDR16_HIGHEST,       41)
ELF_RELOC(R_PPC64_ADDR16_HIGHESTA,      42)
ELF_RELOC(R_PPC64_REL64,                44)
ELF_RELOC(R_PPC64_TOC16,                47)
ELF_RELOC(R_PPC64_TOC16_LO,             48)
ELF_RELOC(R_PPC64_TOC16_HI,             49)
ELF_RELOC(R_PPC64_TOC16_HA,             50)
ELF_RELOC(R_PPC64_TOC,                  51)
ELF_RELOC(R_PPC64_ADDR16_DS,            56)
ELF_RELOC(R_PPC64_ADDR16_LO_DS,         57)
ELF_RELOC(R_PPC64_GOT16_DS,             58)
ELF_RELOC(R_PPC64_GOT16_LO_DS,          59)
ELF_RELOC(R_PPC64_TOC16_DS,             63)
ELF_RELOC(R_PPC64_TOC16_LO_DS,          64)
ELF_RELOC(R_PPC64_TLS,                  67)
ELF_RELOC(R_PPC64_DTPMOD64,             68)
ELF_RELOC(R_PPC64_TPREL16,              69)
ELF_RELOC(R_PPC64_TPREL16_LO,           70)
ELF_RELOC(R_PPC64_TPREL16_HI,           71)
ELF_RELOC(R_PPC64_TPREL16_HA,           72)
ELF_RELOC(R_PPC64_TPREL64,              73)
ELF_RELOC(R_PPC64_DTPREL16,             74)
ELF_RELOC(R_PPC64_DTPREL16_LO,          75)
ELF_RELOC(R_PPC64_DTPREL16_HI,          76)
ELF_RELOC(R_PPC64_DTPREL16_HA,          77)
ELF_RELOC(R_PPC64_DTPREL64,             78)
ELF_RELOC(R_PPC64_GOT_TLSGD16,          79)
ELF_RELOC(R_PPC64_GOT_TLSGD16_LO,       80)
ELF_RELOC(R_PPC64_GOT_TLSGD16_HI,       81)
ELF_RELOC(R_PPC64_GOT_TLSGD16_HA,       82)
ELF_RELOC(R_PPC64_GOT_TLSLD16,          83)
ELF_RELOC(R_PPC64_GOT_TLSLD16_LO,       84)
ELF_RELOC(R_PPC64_GOT_TLSLD16_HI,       85)
ELF_RELOC(R_PPC64_GOT_TLSLD16_HA,       86)
ELF_RELOC(R_PPC64_GOT_TPREL16_DS,       87)
ELF_RELOC(R_PPC64_GOT_TPREL16_LO_DS,    88)
ELF_RELOC(R_PPC64_GOT_TPREL16_HI,       89)
ELF_RELOC(R_PPC64_GOT_TPREL16_HA,       90)
ELF_RELOC(R_PPC64_GOT_DTPREL16_DS,      91)
ELF_RELOC(R_PPC64_GOT_DTPREL16_LO_DS,   92)
ELF_RELOC(R_PPC64_GOT_DTPREL16_HI,      93)
ELF_RELOC(R_PPC64_GOT_DTPREL16_HA,      94)
ELF_RELOC(R_PPC64_TPREL16_DS,           95)
ELF_RELOC(R_PPC64_TPREL16_LO_DS,        96)
ELF_RELOC(R_PPC64_TPREL16_HIGHER,       97)
ELF_RELOC(R_PPC64_TPREL16_HIGHERA,      98)
ELF_RELOC(R_PPC64_TPREL16_HIGHEST,      99)
ELF_RELOC(R_PPC64_TPREL16_HIGHESTA,     100)
ELF_RELOC(R_PPC64_DTPREL16_DS,          101)
ELF_RELOC(R_PPC64_DTPREL16_LO_DS,       102)
ELF_RELOC(R_PPC64_DTPREL16_HIGHER,      103)
ELF_RELOC(R_PPC64_DTPREL16_HIGHERA,     104)
ELF_RELOC(R_PPC64_DTPREL16_HIGHEST,     105)
ELF_RELOC(R_PPC64_DTPREL16_HIGHESTA,    106)
ELF_RELOC(R_PPC64_TLSGD,                107)
ELF_RELOC(R_PPC64_TLSLD,                108)
ELF_RELOC(R_PPC64_ADDR16_HIGH,          110)
ELF_RELOC(R_PPC64_ADDR16_HIGHA,         111)
ELF_RELOC(R_PPC64_TPREL16_HIGH,         112)
ELF_RELOC(R_PPC64_TPREL16_HIGHA,        113)
ELF_RELOC(R_PPC64_DTPREL16_HIGH,        114)
ELF_RELOC(R_PPC64_DTPREL16_HIGHA,       115)
ELF_RELOC(R_PPC64_IRELATIVE,            248)
ELF_RELOC(R_PPC64_REL16,                249)
ELF_RELOC(R_PPC64_REL16_LO,             250)
ELF_RELOC(R_PPC64_REL16_HI,             251)
ELF_RELOC(R_PPC64_REL16_HA,             252)
