/* List the relocation types for SH.  -*- 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,		0)
RELOC_TYPE (DIR32,		REL|DYN)
RELOC_TYPE (REL32,		REL|DYN)
RELOC_TYPE (DIR8WPN,		REL)
RELOC_TYPE (IND12W,		REL)
RELOC_TYPE (DIR8WPL,		REL)
RELOC_TYPE (DIR8WPZ,		REL)
RELOC_TYPE (DIR8BP,		REL)
RELOC_TYPE (DIR8W,		REL)
RELOC_TYPE (DIR8L,		REL)
RELOC_TYPE (SWITCH16,		REL)
RELOC_TYPE (SWITCH32,		REL)
RELOC_TYPE (USES,		REL)
RELOC_TYPE (COUNT,		REL)
RELOC_TYPE (ALIGN,		REL)
RELOC_TYPE (CODE,		REL)
RELOC_TYPE (DATA,		REL)
RELOC_TYPE (LABEL,		REL)
RELOC_TYPE (SWITCH8,		REL)
RELOC_TYPE (GNU_VTINHERIT,	REL)
RELOC_TYPE (GNU_VTENTRY,	REL)
RELOC_TYPE (TLS_GD_32,		REL)
RELOC_TYPE (TLS_LD_32,		REL)
RELOC_TYPE (TLS_LDO_32,		REL)
RELOC_TYPE (TLS_IE_32,		REL)
RELOC_TYPE (TLS_LE_32,		REL)
RELOC_TYPE (TLS_DTPMOD32,	DYN)
RELOC_TYPE (TLS_DTPOFF32,	DYN)
RELOC_TYPE (TLS_TPOFF32,	DYN)
RELOC_TYPE (GOT32,		REL)
RELOC_TYPE (PLT32,		REL)
RELOC_TYPE (COPY,		EXEC)
RELOC_TYPE (GLOB_DAT,		EXEC|DYN)
RELOC_TYPE (JMP_SLOT,		EXEC|DYN)
RELOC_TYPE (RELATIVE,		EXEC|DYN)
RELOC_TYPE (GOTOFF,		REL)
RELOC_TYPE (GOTPC,		REL)
