/* List the relocation types for AArch64.  -*- C -*-
   Copyright (C) 2013, 2014, 2015 Red Hat, Inc.
   This file is part of elfutils.

   This file is free software; you can redistribute it and/or modify
   it under the terms of either

     * the GNU Lesser General Public License as published by the Free
       Software Foundation; either version 3 of the License, or (at
       your option) any later version

   or

     * the GNU General Public License as published by the Free
       Software Foundation; either version 2 of the License, or (at
       your option) any later version

   or both in parallel, as here.

   elfutils is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   General Public License for more details.

   You should have received copies of the GNU General Public License and
   the GNU Lesser General Public License along with this program.  If
   not, see <http://www.gnu.org/licenses/>.  */

/*	    NAME,		REL|EXEC|DYN	*/

RELOC_TYPE (ABS64,		REL|EXEC|DYN)
RELOC_TYPE (ABS32,		REL|EXEC|DYN)
RELOC_TYPE (COPY,		EXEC|DYN)
RELOC_TYPE (GLOB_DAT,		EXEC|DYN)
RELOC_TYPE (JUMP_SLOT,		EXEC|DYN)
RELOC_TYPE (RELATIVE,		EXEC|DYN)
RELOC_TYPE (TLS_DTPMOD,		EXEC|DYN)
RELOC_TYPE (TLS_DTPREL,		EXEC|DYN)
RELOC_TYPE (TLS_TPREL,		EXEC|DYN)
RELOC_TYPE (TLSDESC,		EXEC|DYN)

/* R_AARCH64_NONE records that the section containing the place to be
   relocated depends on the section defining the symbol mentioned in
   the relocation directive[.]  (ARM IHI 0056B).  */
RELOC_TYPE (NONE,		REL)

RELOC_TYPE (ABS16,		REL)
RELOC_TYPE (PREL64,		REL)
RELOC_TYPE (PREL32,		REL)
RELOC_TYPE (PREL16,		REL)
RELOC_TYPE (MOVW_UABS_G0,	REL)
RELOC_TYPE (MOVW_UABS_G0_NC,	REL)
RELOC_TYPE (MOVW_UABS_G1,	REL)
RELOC_TYPE (MOVW_UABS_G1_NC,	REL)
RELOC_TYPE (MOVW_UABS_G2,	REL)
RELOC_TYPE (MOVW_UABS_G2_NC,	REL)
RELOC_TYPE (MOVW_UABS_G3,	REL)
RELOC_TYPE (MOVW_SABS_G0,	REL)
RELOC_TYPE (MOVW_SABS_G1,	REL)
RELOC_TYPE (MOVW_SABS_G2,	REL)
RELOC_TYPE (LD_PREL_LO19,	REL)
RELOC_TYPE (ADR_PREL_LO21,	REL)
RELOC_TYPE (ADR_PREL_PG_HI21,	REL)
RELOC_TYPE (ADR_PREL_PG_HI21_NC, REL)
RELOC_TYPE (ADD_ABS_LO12_NC,	REL)
RELOC_TYPE (LDST8_ABS_LO12_NC,	REL)
RELOC_TYPE (LDST16_ABS_LO12_NC,	REL)
RELOC_TYPE (LDST32_ABS_LO12_NC,	REL)
RELOC_TYPE (LDST64_ABS_LO12_NC,	REL)
RELOC_TYPE (LDST128_ABS_LO12_NC, REL)
RELOC_TYPE (TSTBR14,		REL)
RELOC_TYPE (CONDBR19,		REL)
RELOC_TYPE (JUMP26,		REL)
RELOC_TYPE (CALL26,		REL)
RELOC_TYPE (MOVW_PREL_G0,	REL)
RELOC_TYPE (MOVW_PREL_G0_NC,	REL)
RELOC_TYPE (MOVW_PREL_G1,	REL)
RELOC_TYPE (MOVW_PREL_G1_NC,	REL)
RELOC_TYPE (MOVW_PREL_G2,	REL)
RELOC_TYPE (MOVW_PREL_G2_NC,	REL)
RELOC_TYPE (MOVW_PREL_G3,	REL)
RELOC_TYPE (MOVW_GOTOFF_G0,	REL)
RELOC_TYPE (MOVW_GOTOFF_G0_NC,	REL)
RELOC_TYPE (MOVW_GOTOFF_G1,	REL)
RELOC_TYPE (MOVW_GOTOFF_G1_NC,	REL)
RELOC_TYPE (MOVW_GOTOFF_G2,	REL)
RELOC_TYPE (MOVW_GOTOFF_G2_NC,	REL)
RELOC_TYPE (MOVW_GOTOFF_G3,	REL)
RELOC_TYPE (GOTREL64,		REL)
RELOC_TYPE (GOTREL32,		REL)
RELOC_TYPE (GOT_LD_PREL19,	REL)
RELOC_TYPE (LD64_GOTOFF_LO15,	REL)
RELOC_TYPE (ADR_GOT_PAGE,	REL)
RELOC_TYPE (LD64_GOT_LO12_NC,	REL)
RELOC_TYPE (LD64_GOTPAGE_LO15,	REL)
RELOC_TYPE (TLSGD_ADR_PREL21,	REL)
RELOC_TYPE (TLSGD_ADR_PAGE21,	REL)
RELOC_TYPE (TLSGD_ADD_LO12_NC,	REL)
RELOC_TYPE (TLSGD_MOVW_G1,	REL)
RELOC_TYPE (TLSGD_MOVW_G0_NC,	REL)
RELOC_TYPE (TLSLD_ADR_PREL21,	REL)
RELOC_TYPE (TLSLD_ADR_PAGE21,	REL)
RELOC_TYPE (TLSLD_ADD_LO12_NC,	REL)
RELOC_TYPE (TLSLD_MOVW_G1,	REL)
RELOC_TYPE (TLSLD_MOVW_G0_NC,	REL)
RELOC_TYPE (TLSLD_LD_PREL19,	REL)
RELOC_TYPE (TLSLD_MOVW_DTPREL_G2,	REL)
RELOC_TYPE (TLSLD_MOVW_DTPREL_G1,	REL)
RELOC_TYPE (TLSLD_MOVW_DTPREL_G1_NC,	REL)
RELOC_TYPE (TLSLD_MOVW_DTPREL_G0,	REL)
RELOC_TYPE (TLSLD_MOVW_DTPREL_G0_NC,	REL)
RELOC_TYPE (TLSLD_ADD_DTPREL_HI12,	REL)
RELOC_TYPE (TLSLD_ADD_DTPREL_LO12,	REL)
RELOC_TYPE (TLSLD_ADD_DTPREL_LO12_NC,	REL)
RELOC_TYPE (TLSLD_LDST8_DTPREL_LO12,	REL)
RELOC_TYPE (TLSLD_LDST8_DTPREL_LO12_NC,	REL)
RELOC_TYPE (TLSLD_LDST16_DTPREL_LO12,	REL)
RELOC_TYPE (TLSLD_LDST16_DTPREL_LO12_NC, REL)
RELOC_TYPE (TLSLD_LDST32_DTPREL_LO12,	REL)
RELOC_TYPE (TLSLD_LDST32_DTPREL_LO12_NC, REL)
RELOC_TYPE (TLSLD_LDST64_DTPREL_LO12,	REL)
RELOC_TYPE (TLSLD_LDST64_DTPREL_LO12_NC, REL)
RELOC_TYPE (TLSLD_LDST128_DTPREL_LO12,	REL)
RELOC_TYPE (TLSLD_LDST128_DTPREL_LO12_NC, REL)
RELOC_TYPE (TLSIE_MOVW_GOTTPREL_G1,	REL)
RELOC_TYPE (TLSIE_MOVW_GOTTPREL_G0_NC,	REL)
RELOC_TYPE (TLSIE_ADR_GOTTPREL_PAGE21,	REL)
RELOC_TYPE (TLSIE_LD64_GOTTPREL_LO12_NC, REL)
RELOC_TYPE (TLSIE_LD_GOTTPREL_PREL19,	REL)
RELOC_TYPE (TLSLE_MOVW_TPREL_G2,	REL)
RELOC_TYPE (TLSLE_MOVW_TPREL_G1,	REL)
RELOC_TYPE (TLSLE_MOVW_TPREL_G1_NC,	REL)
RELOC_TYPE (TLSLE_MOVW_TPREL_G0,	REL)
RELOC_TYPE (TLSLE_MOVW_TPREL_G0_NC,	REL)
RELOC_TYPE (TLSLE_ADD_TPREL_HI12,	REL)
RELOC_TYPE (TLSLE_ADD_TPREL_LO12,	REL)
RELOC_TYPE (TLSLE_ADD_TPREL_LO12_NC,	REL)
RELOC_TYPE (TLSLE_LDST8_TPREL_LO12,	REL)
RELOC_TYPE (TLSLE_LDST8_TPREL_LO12_NC,	REL)
RELOC_TYPE (TLSLE_LDST16_TPREL_LO12,	REL)
RELOC_TYPE (TLSLE_LDST16_TPREL_LO12_NC,	REL)
RELOC_TYPE (TLSLE_LDST32_TPREL_LO12,	REL)
RELOC_TYPE (TLSLE_LDST32_TPREL_LO12_NC,	REL)
RELOC_TYPE (TLSLE_LDST64_TPREL_LO12,	REL)
RELOC_TYPE (TLSLE_LDST64_TPREL_LO12_NC,	REL)
RELOC_TYPE (TLSLE_LDST128_TPREL_LO12,	REL)
RELOC_TYPE (TLSLE_LDST128_TPREL_LO12_NC, REL)
RELOC_TYPE (TLSDESC_LD_PREL19,		REL)
RELOC_TYPE (TLSDESC_ADR_PREL21,		REL)
RELOC_TYPE (TLSDESC_ADR_PAGE21,		REL)
RELOC_TYPE (TLSDESC_LD64_LO12,		REL)
RELOC_TYPE (TLSDESC_ADD_LO12,		REL)
RELOC_TYPE (TLSDESC_OFF_G1,		REL)
RELOC_TYPE (TLSDESC_OFF_G0_NC,		REL)
RELOC_TYPE (TLSDESC_LDR,		REL)
RELOC_TYPE (TLSDESC_ADD,		REL)
RELOC_TYPE (TLSDESC_CALL,		REL)
