/* C-SKY ELF support for BFD.
   Copyright (C) 1998-2019 Free Software Foundation, Inc.
   Contributed by C-SKY Microsystems and Mentor Graphics.

   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_CSKY_H
#define _ELF_CSKY_H

#include "elf/reloc-macros.h"

/* Values of relocation types according to the ABI doc.
   The order should be consistent with csky bfd reloc type
   table in bfd-in2.h.  */
START_RELOC_NUMBERS (elf_csky_reloc_type)
    RELOC_NUMBER (R_CKCORE_NONE,0)
    RELOC_NUMBER (R_CKCORE_ADDR32,1)
    RELOC_NUMBER (R_CKCORE_PCREL_IMM8BY4,2)
    RELOC_NUMBER (R_CKCORE_PCREL_IMM11BY2,3)
    RELOC_NUMBER (R_CKCORE_PCREL_IMM4BY2,4)
    RELOC_NUMBER (R_CKCORE_PCREL32,5)
    RELOC_NUMBER (R_CKCORE_PCREL_JSR_IMM11BY2,6)
    RELOC_NUMBER (R_CKCORE_GNU_VTINHERIT,7)
    RELOC_NUMBER (R_CKCORE_GNU_VTENTRY,8)
    RELOC_NUMBER (R_CKCORE_RELATIVE,9)
    RELOC_NUMBER (R_CKCORE_COPY,10)
    RELOC_NUMBER (R_CKCORE_GLOB_DAT,11)
    RELOC_NUMBER (R_CKCORE_JUMP_SLOT,12)
    RELOC_NUMBER (R_CKCORE_GOTOFF,13)
    RELOC_NUMBER (R_CKCORE_GOTPC,14)
    RELOC_NUMBER (R_CKCORE_GOT32,15)
    RELOC_NUMBER (R_CKCORE_PLT32,16)
    RELOC_NUMBER (R_CKCORE_ADDRGOT,17)
    RELOC_NUMBER (R_CKCORE_ADDRPLT,18)
    RELOC_NUMBER (R_CKCORE_PCREL_IMM26BY2,19)
    RELOC_NUMBER (R_CKCORE_PCREL_IMM16BY2,20)
    RELOC_NUMBER (R_CKCORE_PCREL_IMM16BY4,21)
    RELOC_NUMBER (R_CKCORE_PCREL_IMM10BY2,22)
    RELOC_NUMBER (R_CKCORE_PCREL_IMM10BY4,23)
    RELOC_NUMBER (R_CKCORE_ADDR_HI16,24)
    RELOC_NUMBER (R_CKCORE_ADDR_LO16,25)
    RELOC_NUMBER (R_CKCORE_GOTPC_HI16,26)
    RELOC_NUMBER (R_CKCORE_GOTPC_LO16,27)
    RELOC_NUMBER (R_CKCORE_GOTOFF_HI16,28)
    RELOC_NUMBER (R_CKCORE_GOTOFF_LO16,29)
    RELOC_NUMBER (R_CKCORE_GOT12,30)
    RELOC_NUMBER (R_CKCORE_GOT_HI16,31)
    RELOC_NUMBER (R_CKCORE_GOT_LO16,32)
    RELOC_NUMBER (R_CKCORE_PLT12,33)
    RELOC_NUMBER (R_CKCORE_PLT_HI16,34)
    RELOC_NUMBER (R_CKCORE_PLT_LO16,35)
    RELOC_NUMBER (R_CKCORE_ADDRGOT_HI16,36)
    RELOC_NUMBER (R_CKCORE_ADDRGOT_LO16,37)
    RELOC_NUMBER (R_CKCORE_ADDRPLT_HI16,38)
    RELOC_NUMBER (R_CKCORE_ADDRPLT_LO16,39)
    RELOC_NUMBER (R_CKCORE_PCREL_JSR_IMM26BY2,40)
    RELOC_NUMBER (R_CKCORE_TOFFSET_LO16, 41)
    RELOC_NUMBER (R_CKCORE_DOFFSET_LO16, 42)
    RELOC_NUMBER (R_CKCORE_PCREL_IMM18BY2, 43)
    RELOC_NUMBER (R_CKCORE_DOFFSET_IMM18, 44)
    RELOC_NUMBER (R_CKCORE_DOFFSET_IMM18BY2, 45)
    RELOC_NUMBER (R_CKCORE_DOFFSET_IMM18BY4, 46)
    RELOC_NUMBER (R_CKCORE_GOTOFF_IMM18, 47)
    RELOC_NUMBER (R_CKCORE_GOT_IMM18BY4, 48)
    RELOC_NUMBER (R_CKCORE_PLT_IMM18BY4, 49)
    RELOC_NUMBER (R_CKCORE_PCREL_IMM7BY4, 50)
    RELOC_NUMBER (R_CKCORE_TLS_LE32, 51)
    RELOC_NUMBER (R_CKCORE_TLS_IE32, 52)
    RELOC_NUMBER (R_CKCORE_TLS_GD32, 53)
    RELOC_NUMBER (R_CKCORE_TLS_LDM32, 54)
    RELOC_NUMBER (R_CKCORE_TLS_LDO32, 55)
    RELOC_NUMBER (R_CKCORE_TLS_DTPMOD32, 56)
    RELOC_NUMBER (R_CKCORE_TLS_DTPOFF32, 57)
    RELOC_NUMBER (R_CKCORE_TLS_TPOFF32, 58)
    RELOC_NUMBER (R_CKCORE_PCREL_FLRW_IMM8BY4, 59)
    RELOC_NUMBER (R_CKCORE_NOJSRI, 60)
    RELOC_NUMBER (R_CKCORE_CALLGRAPH, 61)
    RELOC_NUMBER (R_CKCORE_IRELATIVE, 62)
    RELOC_NUMBER (R_CKCORE_PCREL_BLOOP_IMM4BY4, 63)
    RELOC_NUMBER (R_CKCORE_PCREL_BLOOP_IMM12BY4, 64)
END_RELOC_NUMBERS (R_CKCORE_MAX)

#endif /* _ELF_CSKY_H  */
