/* i860 ELF support for BFD.
   Copyright (C) 2000-2021 Free Software Foundation, Inc.

   Contributed by Jason Eckhardt <jle@cygnus.com>.

   This file is part of BFD, the Binary File Descriptor library.

   This program 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; either version 3 of the License, or
   (at your option) any later version.

   This program 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 this program; if not, write to the Free Software Foundation,
   Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */

#ifndef _ELF_I860_H
#define _ELF_I860_H

/* Note: i860 ELF is defined to use only RELA relocations.  */

#include "elf/reloc-macros.h"

START_RELOC_NUMBERS (elf_i860_reloc_type)
     RELOC_NUMBER (R_860_NONE,      0x00)	/* No reloc */
     RELOC_NUMBER (R_860_32,        0x01)	/* S+A  */
     RELOC_NUMBER (R_860_COPY,      0x02)	/* No calculation */
     RELOC_NUMBER (R_860_GLOB_DAT,  0x03)	/* S, Create GOT entry */
     RELOC_NUMBER (R_860_JUMP_SLOT, 0x04)	/* S+A, Create PLT entry */
     RELOC_NUMBER (R_860_RELATIVE,  0x05)	/* B+A, Adj by program base */
     RELOC_NUMBER (R_860_PC26,      0x30)	/* (S+A-P) >> 2 */
     RELOC_NUMBER (R_860_PLT26,     0x31)	/* (L+A-P) >> 2 */
     RELOC_NUMBER (R_860_PC16,      0x32)	/* (S+A-P) >> 2 */
     RELOC_NUMBER (R_860_LOW0,      0x40)	/* S+A */
     RELOC_NUMBER (R_860_SPLIT0,    0x42)	/* S+A */
     RELOC_NUMBER (R_860_LOW1,      0x44)	/* S+A */
     RELOC_NUMBER (R_860_SPLIT1,    0x46)	/* S+A */
     RELOC_NUMBER (R_860_LOW2,      0x48)	/* S+A */
     RELOC_NUMBER (R_860_SPLIT2,    0x4A)	/* S+A */
     RELOC_NUMBER (R_860_LOW3,      0x4C)	/* S+A */
     RELOC_NUMBER (R_860_LOGOT0,    0x50)	/* G */
     RELOC_NUMBER (R_860_SPGOT0,    0x52)	/* G */
     RELOC_NUMBER (R_860_LOGOT1,    0x54)	/* G */
     RELOC_NUMBER (R_860_SPGOT1,    0x56)	/* G */
     RELOC_NUMBER (R_860_LOGOTOFF0, 0x60)	/* O */
     RELOC_NUMBER (R_860_SPGOTOFF0, 0x62)	/* O */
     RELOC_NUMBER (R_860_LOGOTOFF1, 0x64)	/* O */
     RELOC_NUMBER (R_860_SPGOTOFF1, 0x66)	/* O */
     RELOC_NUMBER (R_860_LOGOTOFF2, 0x68)	/* O */
     RELOC_NUMBER (R_860_LOGOTOFF3, 0x6C)	/* O */
     RELOC_NUMBER (R_860_LOPC,      0x70)	/* (S+A-P) >> 2 */
     RELOC_NUMBER (R_860_HIGHADJ,   0x80)	/* hiadj(S+A) */
     RELOC_NUMBER (R_860_HAGOT,     0x90)	/* hiadj(G) */
     RELOC_NUMBER (R_860_HAGOTOFF,  0xA0)	/* hiadj(O) */
     RELOC_NUMBER (R_860_HAPC,      0xB0)	/* hiadj((S+A-P) >> 2) */
     RELOC_NUMBER (R_860_HIGH,      0xC0)	/* (S+A) >> 16 */
     RELOC_NUMBER (R_860_HIGOT,     0xD0)	/* G >> 16 */
     RELOC_NUMBER (R_860_HIGOTOFF,  0xE0)	/* O */
END_RELOC_NUMBERS (R_860_max)

#endif
