/* TILE-Gx ELF support for BFD.
   Copyright 2011 Free Software Foundation, Inc.

   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_TILEGX_H
#define _ELF_TILEGX_H

#include "elf/reloc-macros.h"

/* Relocations.  */
START_RELOC_NUMBERS (elf_tilegx_reloc_type)
  RELOC_NUMBER (R_TILEGX_NONE,              0)

  /* Standard relocations */
  RELOC_NUMBER (R_TILEGX_64,                1)
  RELOC_NUMBER (R_TILEGX_32,                2)
  RELOC_NUMBER (R_TILEGX_16,                3)
  RELOC_NUMBER (R_TILEGX_8,                 4)
  RELOC_NUMBER (R_TILEGX_64_PCREL,          5)
  RELOC_NUMBER (R_TILEGX_32_PCREL,          6)
  RELOC_NUMBER (R_TILEGX_16_PCREL,          7)
  RELOC_NUMBER (R_TILEGX_8_PCREL,           8)

  /* Custom relocations */

  RELOC_NUMBER (R_TILEGX_HW0,               9)
  RELOC_NUMBER (R_TILEGX_HW1,               10)
  RELOC_NUMBER (R_TILEGX_HW2,               11)
  RELOC_NUMBER (R_TILEGX_HW3,               12)
  RELOC_NUMBER (R_TILEGX_HW0_LAST,          13)
  RELOC_NUMBER (R_TILEGX_HW1_LAST,          14)
  RELOC_NUMBER (R_TILEGX_HW2_LAST,          15)

  RELOC_NUMBER (R_TILEGX_COPY,              16)
  RELOC_NUMBER (R_TILEGX_GLOB_DAT,          17)
  RELOC_NUMBER (R_TILEGX_JMP_SLOT,          18)
  RELOC_NUMBER (R_TILEGX_RELATIVE,          19)

  /* Branch/jump offsets */
  RELOC_NUMBER (R_TILEGX_BROFF_X1,          20)
  RELOC_NUMBER (R_TILEGX_JUMPOFF_X1,        21)
  RELOC_NUMBER (R_TILEGX_JUMPOFF_X1_PLT,    22)

  /* Immediate operands. */
  RELOC_NUMBER (R_TILEGX_IMM8_X0,           23)
  RELOC_NUMBER (R_TILEGX_IMM8_Y0,           24)
  RELOC_NUMBER (R_TILEGX_IMM8_X1,           25)
  RELOC_NUMBER (R_TILEGX_IMM8_Y1,           26)
  RELOC_NUMBER (R_TILEGX_DEST_IMM8_X1,      27)
  RELOC_NUMBER (R_TILEGX_MT_IMM14_X1,       28)
  RELOC_NUMBER (R_TILEGX_MF_IMM14_X1,       29)
  RELOC_NUMBER (R_TILEGX_MMSTART_X0,        30)
  RELOC_NUMBER (R_TILEGX_MMEND_X0,          31)
  RELOC_NUMBER (R_TILEGX_SHAMT_X0,          32)
  RELOC_NUMBER (R_TILEGX_SHAMT_X1,          33)
  RELOC_NUMBER (R_TILEGX_SHAMT_Y0,          34)
  RELOC_NUMBER (R_TILEGX_SHAMT_Y1,          35)

  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0,       36)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0,       37)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1,       38)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1,       39)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2,       40)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2,       41)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3,       42)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3,       43)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST,  44)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST,  45)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST,  46)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST,  47)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST,  48)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST,  49)

  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_PCREL,        50)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_PCREL,        51)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_PCREL,        52)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_PCREL,        53)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_PCREL,        54)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_PCREL,        55)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3_PCREL,        56)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3_PCREL,        57)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_PCREL,   58)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_PCREL,   59)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_PCREL,   60)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_PCREL,   61)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST_PCREL,   62)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST_PCREL,   63)

  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_GOT,          64)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_GOT,          65)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_GOT,          66)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_GOT,          67)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_GOT,          68)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_GOT,          69)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3_GOT,          70)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3_GOT,          71)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_GOT,     72)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_GOT,     73)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_GOT,     74)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_GOT,     75)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST_GOT,     76)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST_GOT,     77)

  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_TLS_GD,       78)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_TLS_GD,       79)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_TLS_GD,       80)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_TLS_GD,       81)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_TLS_GD,       82)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_TLS_GD,       83)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3_TLS_GD,       84)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3_TLS_GD,       85)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD,  86)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD,  87)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD,  88)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD,  89)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD,  90)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD,  91)

  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_TLS_IE,       92)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_TLS_IE,       93)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_TLS_IE,       94)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_TLS_IE,       95)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_TLS_IE,       96)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_TLS_IE,       97)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3_TLS_IE,       98)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3_TLS_IE,       99)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE, 100)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE, 101)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE, 102)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE, 103)
  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE, 104)
  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE, 105)

  RELOC_NUMBER (R_TILEGX_TLS_DTPMOD64,             106)
  RELOC_NUMBER (R_TILEGX_TLS_DTPOFF64,             107)
  RELOC_NUMBER (R_TILEGX_TLS_TPOFF64,              108)
  RELOC_NUMBER (R_TILEGX_TLS_DTPMOD32,             109)
  RELOC_NUMBER (R_TILEGX_TLS_DTPOFF32,             110)
  RELOC_NUMBER (R_TILEGX_TLS_TPOFF32,              111)

/* These are GNU extensions to enable C++ vtable garbage collection.  */
  RELOC_NUMBER (R_TILEGX_GNU_VTINHERIT, 128)
  RELOC_NUMBER (R_TILEGX_GNU_VTENTRY, 129)
END_RELOC_NUMBERS (R_TILEGX_max)

#endif /* _ELF_TILEGX_H */
