/* List the relocation types for arm.  -*- C -*-
   Copyright (C) 2005 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)
RELOC_TYPE (ABS32,		REL)
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)
