/* List the relocation types for arm.  -*- C -*-
   Copyright (C) 2005-2010 Red Hat, Inc.
   This file is part of Red Hat elfutils.

   Red Hat elfutils is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by the
   Free Software Foundation; version 2 of the License.

   Red Hat 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 a copy of the GNU General Public License along
   with Red Hat elfutils; if not, write to the Free Software Foundation,
   Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.

   Red Hat elfutils is an included package of the Open Invention Network.
   An included package of the Open Invention Network is a package for which
   Open Invention Network licensees cross-license their patents.  No patent
   license is granted, either expressly or impliedly, by designation as an
   included package.  Should you wish to participate in the Open Invention
   Network licensing program, please visit www.openinventionnetwork.com
   <http://www.openinventionnetwork.com>.  */

/*	    NAME,		REL|EXEC|DYN	*/

RELOC_TYPE (NONE,		REL) /* It really is used in ET_REL on ARM.  */
RELOC_TYPE (PC24,		REL|EXEC|DYN)
RELOC_TYPE (ABS32,		REL|EXEC|DYN)
RELOC_TYPE (REL32,		REL)
RELOC_TYPE (PC13,		REL)
RELOC_TYPE (ABS16,		REL)
RELOC_TYPE (ABS12,		REL)
RELOC_TYPE (THM_ABS5,		REL)
RELOC_TYPE (ABS8,		REL)
RELOC_TYPE (SBREL32,		REL)
RELOC_TYPE (THM_PC22,		REL)
RELOC_TYPE (THM_PC8,		REL)
RELOC_TYPE (AMP_VCALL9,		REL)
RELOC_TYPE (SWI24,		REL)
RELOC_TYPE (THM_SWI8,		REL)
RELOC_TYPE (XPC25,		REL)
RELOC_TYPE (THM_XPC22,		REL)
RELOC_TYPE (TLS_DTPMOD32,	EXEC|DYN)
RELOC_TYPE (TLS_DTPOFF32,	EXEC|DYN)
RELOC_TYPE (TLS_TPOFF32,	EXEC|DYN)
RELOC_TYPE (COPY,		EXEC)
RELOC_TYPE (GLOB_DAT,		EXEC|DYN)
RELOC_TYPE (JUMP_SLOT,		EXEC|DYN)
RELOC_TYPE (RELATIVE,		EXEC|DYN)
RELOC_TYPE (GOTOFF,		REL)
RELOC_TYPE (GOTPC,		REL)
RELOC_TYPE (GOT32,		REL)
RELOC_TYPE (PLT32,		REL)
RELOC_TYPE (ALU_PCREL_7_0,	REL)
RELOC_TYPE (ALU_PCREL_15_8,	REL)
RELOC_TYPE (ALU_PCREL_23_15,	REL)
RELOC_TYPE (LDR_SBREL_11_0,	REL)
RELOC_TYPE (ALU_SBREL_19_12,	REL)
RELOC_TYPE (ALU_SBREL_27_20,	REL)
RELOC_TYPE (GNU_VTENTRY,	REL)
RELOC_TYPE (GNU_VTINHERIT,	REL)
RELOC_TYPE (THM_PC11,		REL)
RELOC_TYPE (THM_PC9,		REL)
RELOC_TYPE (TLS_GD32,		REL)
RELOC_TYPE (TLS_LDM32,		REL)
RELOC_TYPE (TLS_LDO32,		REL)
RELOC_TYPE (TLS_IE32,		REL)
RELOC_TYPE (TLS_LE32,		REL)
RELOC_TYPE (RXPC25,		REL)
RELOC_TYPE (RSBREL32,		REL)
RELOC_TYPE (THM_RPC22,		REL)
RELOC_TYPE (RREL32,		REL)
RELOC_TYPE (RABS22,		REL)
RELOC_TYPE (RPC24,		REL)
RELOC_TYPE (RBASE,		REL)
