1867d70fcSchristos /* C-SKY ELF support for BFD. 2*c42dbd0eSchristos Copyright (C) 1998-2022 Free Software Foundation, Inc. 3867d70fcSchristos Contributed by C-SKY Microsystems and Mentor Graphics. 4867d70fcSchristos 5867d70fcSchristos This file is part of BFD, the Binary File Descriptor library. 6867d70fcSchristos 7867d70fcSchristos This program is free software; you can redistribute it and/or modify 8867d70fcSchristos it under the terms of the GNU General Public License as published by 9867d70fcSchristos the Free Software Foundation; either version 3 of the License, or 10867d70fcSchristos (at your option) any later version. 11867d70fcSchristos 12867d70fcSchristos This program is distributed in the hope that it will be useful, 13867d70fcSchristos but WITHOUT ANY WARRANTY; without even the implied warranty of 14867d70fcSchristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15867d70fcSchristos GNU General Public License for more details. 16867d70fcSchristos 17867d70fcSchristos You should have received a copy of the GNU General Public License 18867d70fcSchristos along with this program; if not, write to the Free Software Foundation, 19867d70fcSchristos Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ 20867d70fcSchristos 21867d70fcSchristos #ifndef _ELF_CSKY_H 22867d70fcSchristos #define _ELF_CSKY_H 23867d70fcSchristos 24867d70fcSchristos #include "elf/reloc-macros.h" 25867d70fcSchristos 26867d70fcSchristos /* Values of relocation types according to the ABI doc. 27867d70fcSchristos The order should be consistent with csky bfd reloc type 28867d70fcSchristos table in bfd-in2.h. */ 29867d70fcSchristos START_RELOC_NUMBERS (elf_csky_reloc_type) 30867d70fcSchristos RELOC_NUMBER (R_CKCORE_NONE,0) 31867d70fcSchristos RELOC_NUMBER (R_CKCORE_ADDR32,1) 32867d70fcSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM8BY4,2) 33867d70fcSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM11BY2,3) 34867d70fcSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM4BY2,4) 35867d70fcSchristos RELOC_NUMBER (R_CKCORE_PCREL32,5) 36867d70fcSchristos RELOC_NUMBER (R_CKCORE_PCREL_JSR_IMM11BY2,6) 37867d70fcSchristos RELOC_NUMBER (R_CKCORE_GNU_VTINHERIT,7) 38867d70fcSchristos RELOC_NUMBER (R_CKCORE_GNU_VTENTRY,8) 39867d70fcSchristos RELOC_NUMBER (R_CKCORE_RELATIVE,9) 40867d70fcSchristos RELOC_NUMBER (R_CKCORE_COPY,10) 41867d70fcSchristos RELOC_NUMBER (R_CKCORE_GLOB_DAT,11) 42867d70fcSchristos RELOC_NUMBER (R_CKCORE_JUMP_SLOT,12) 43867d70fcSchristos RELOC_NUMBER (R_CKCORE_GOTOFF,13) 44867d70fcSchristos RELOC_NUMBER (R_CKCORE_GOTPC,14) 45867d70fcSchristos RELOC_NUMBER (R_CKCORE_GOT32,15) 46867d70fcSchristos RELOC_NUMBER (R_CKCORE_PLT32,16) 47867d70fcSchristos RELOC_NUMBER (R_CKCORE_ADDRGOT,17) 48867d70fcSchristos RELOC_NUMBER (R_CKCORE_ADDRPLT,18) 49867d70fcSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM26BY2,19) 50867d70fcSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM16BY2,20) 51867d70fcSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM16BY4,21) 52867d70fcSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM10BY2,22) 53867d70fcSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM10BY4,23) 54867d70fcSchristos RELOC_NUMBER (R_CKCORE_ADDR_HI16,24) 55867d70fcSchristos RELOC_NUMBER (R_CKCORE_ADDR_LO16,25) 56867d70fcSchristos RELOC_NUMBER (R_CKCORE_GOTPC_HI16,26) 57867d70fcSchristos RELOC_NUMBER (R_CKCORE_GOTPC_LO16,27) 58867d70fcSchristos RELOC_NUMBER (R_CKCORE_GOTOFF_HI16,28) 59867d70fcSchristos RELOC_NUMBER (R_CKCORE_GOTOFF_LO16,29) 60867d70fcSchristos RELOC_NUMBER (R_CKCORE_GOT12,30) 61867d70fcSchristos RELOC_NUMBER (R_CKCORE_GOT_HI16,31) 62867d70fcSchristos RELOC_NUMBER (R_CKCORE_GOT_LO16,32) 63867d70fcSchristos RELOC_NUMBER (R_CKCORE_PLT12,33) 64867d70fcSchristos RELOC_NUMBER (R_CKCORE_PLT_HI16,34) 65867d70fcSchristos RELOC_NUMBER (R_CKCORE_PLT_LO16,35) 66867d70fcSchristos RELOC_NUMBER (R_CKCORE_ADDRGOT_HI16,36) 67867d70fcSchristos RELOC_NUMBER (R_CKCORE_ADDRGOT_LO16,37) 68867d70fcSchristos RELOC_NUMBER (R_CKCORE_ADDRPLT_HI16,38) 69867d70fcSchristos RELOC_NUMBER (R_CKCORE_ADDRPLT_LO16,39) 70867d70fcSchristos RELOC_NUMBER (R_CKCORE_PCREL_JSR_IMM26BY2,40) 71867d70fcSchristos RELOC_NUMBER (R_CKCORE_TOFFSET_LO16, 41) 72867d70fcSchristos RELOC_NUMBER (R_CKCORE_DOFFSET_LO16, 42) 73867d70fcSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM18BY2, 43) 74867d70fcSchristos RELOC_NUMBER (R_CKCORE_DOFFSET_IMM18, 44) 75867d70fcSchristos RELOC_NUMBER (R_CKCORE_DOFFSET_IMM18BY2, 45) 76867d70fcSchristos RELOC_NUMBER (R_CKCORE_DOFFSET_IMM18BY4, 46) 77867d70fcSchristos RELOC_NUMBER (R_CKCORE_GOTOFF_IMM18, 47) 78867d70fcSchristos RELOC_NUMBER (R_CKCORE_GOT_IMM18BY4, 48) 79867d70fcSchristos RELOC_NUMBER (R_CKCORE_PLT_IMM18BY4, 49) 80867d70fcSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM7BY4, 50) 81867d70fcSchristos RELOC_NUMBER (R_CKCORE_TLS_LE32, 51) 82867d70fcSchristos RELOC_NUMBER (R_CKCORE_TLS_IE32, 52) 83867d70fcSchristos RELOC_NUMBER (R_CKCORE_TLS_GD32, 53) 84867d70fcSchristos RELOC_NUMBER (R_CKCORE_TLS_LDM32, 54) 85867d70fcSchristos RELOC_NUMBER (R_CKCORE_TLS_LDO32, 55) 86867d70fcSchristos RELOC_NUMBER (R_CKCORE_TLS_DTPMOD32, 56) 87867d70fcSchristos RELOC_NUMBER (R_CKCORE_TLS_DTPOFF32, 57) 88867d70fcSchristos RELOC_NUMBER (R_CKCORE_TLS_TPOFF32, 58) 89867d70fcSchristos RELOC_NUMBER (R_CKCORE_PCREL_FLRW_IMM8BY4, 59) 90867d70fcSchristos RELOC_NUMBER (R_CKCORE_NOJSRI, 60) 91867d70fcSchristos RELOC_NUMBER (R_CKCORE_CALLGRAPH, 61) 92867d70fcSchristos RELOC_NUMBER (R_CKCORE_IRELATIVE, 62) 93867d70fcSchristos RELOC_NUMBER (R_CKCORE_PCREL_BLOOP_IMM4BY4, 63) 94867d70fcSchristos RELOC_NUMBER (R_CKCORE_PCREL_BLOOP_IMM12BY4, 64) 95867d70fcSchristos END_RELOC_NUMBERS (R_CKCORE_MAX) 96867d70fcSchristos 97*c42dbd0eSchristos /* Additional section types. */ 98*c42dbd0eSchristos #define SHT_CSKY_ATTRIBUTES 0x70000001 /* Section holds attributes. */ 99*c42dbd0eSchristos 100*c42dbd0eSchristos /* Object attribute tags. */ 101*c42dbd0eSchristos enum 102*c42dbd0eSchristos { 103*c42dbd0eSchristos /* 0-3 are generic. */ 104*c42dbd0eSchristos /* Arch name for this object file. */ 105*c42dbd0eSchristos Tag_CSKY_ARCH_NAME = 4, 106*c42dbd0eSchristos Tag_CSKY_CPU_NAME = 5, 107*c42dbd0eSchristos 108*c42dbd0eSchristos /* ISA flags for this object file. */ 109*c42dbd0eSchristos Tag_CSKY_ISA_FLAGS, 110*c42dbd0eSchristos Tag_CSKY_ISA_EXT_FLAGS, 111*c42dbd0eSchristos 112*c42dbd0eSchristos /* CSKY DSP version used by this object file. */ 113*c42dbd0eSchristos Tag_CSKY_DSP_VERSION, 114*c42dbd0eSchristos 115*c42dbd0eSchristos /* CSKY VDSP version used by this object file. */ 116*c42dbd0eSchristos Tag_CSKY_VDSP_VERSION, 117*c42dbd0eSchristos 118*c42dbd0eSchristos /* CSKY FPU version used by this object file. */ 119*c42dbd0eSchristos Tag_CSKY_FPU_VERSION = 0x10, 120*c42dbd0eSchristos /* FPU ABI. params: Soft GR/Hard GR/Hard FR. */ 121*c42dbd0eSchristos Tag_CSKY_FPU_ABI, 122*c42dbd0eSchristos /* Rounding Support. */ 123*c42dbd0eSchristos Tag_CSKY_FPU_ROUNDING, 124*c42dbd0eSchristos /* Denormal Support. */ 125*c42dbd0eSchristos Tag_CSKY_FPU_DENORMAL, 126*c42dbd0eSchristos /* Exeception Support. */ 127*c42dbd0eSchristos Tag_CSKY_FPU_Exception, 128*c42dbd0eSchristos /* Number Module Support("IEEE 754"). */ 129*c42dbd0eSchristos Tag_CSKY_FPU_NUMBER_MODULE, 130*c42dbd0eSchristos /* Half/Single/Double. */ 131*c42dbd0eSchristos Tag_CSKY_FPU_HARDFP, 132*c42dbd0eSchristos 133*c42dbd0eSchristos Tag_CSKY_MAX, 134*c42dbd0eSchristos }; 135*c42dbd0eSchristos 136*c42dbd0eSchristos /* Object attribute values. */ 137*c42dbd0eSchristos enum 138*c42dbd0eSchristos { 139*c42dbd0eSchristos /* Values defined for Tag_CSKY_DSP_VERSION. */ 140*c42dbd0eSchristos VAL_CSKY_DSP_VERSION_EXTENSION = 1, /* hi-lo DSP extension. */ 141*c42dbd0eSchristos VAL_CSKY_DSP_VERSION_2 = 2, /* CK803s EDSP. */ 142*c42dbd0eSchristos }; 143*c42dbd0eSchristos 144*c42dbd0eSchristos enum 145*c42dbd0eSchristos { 146*c42dbd0eSchristos /* Values defined for Tag_CSKY_VDSP_VERSION. */ 147*c42dbd0eSchristos VAL_CSKY_VDSP_VERSION_1 = 1, /* VDSP version 1. */ 148*c42dbd0eSchristos VAL_CSKY_VDSP_VERSION_2 /* VDSP version 1. */ 149*c42dbd0eSchristos }; 150*c42dbd0eSchristos 151*c42dbd0eSchristos enum 152*c42dbd0eSchristos { 153*c42dbd0eSchristos /* Values defined for Tag_CSKY_FPU_VERSION. */ 154*c42dbd0eSchristos VAL_CSKY_FPU_VERSION_1 = 1, /* ABIV1 FPU. */ 155*c42dbd0eSchristos VAL_CSKY_FPU_VERSION_2, /* ABIV2 FPU. */ 156*c42dbd0eSchristos }; 157*c42dbd0eSchristos 158*c42dbd0eSchristos enum 159*c42dbd0eSchristos { 160*c42dbd0eSchristos VAL_CSKY_FPU_ABI_SOFT = 1, 161*c42dbd0eSchristos VAL_CSKY_FPU_ABI_SOFTFP, 162*c42dbd0eSchristos VAL_CSKY_FPU_ABI_HARD, 163*c42dbd0eSchristos }; 164*c42dbd0eSchristos 165*c42dbd0eSchristos enum 166*c42dbd0eSchristos { 167*c42dbd0eSchristos VAL_CSKY_FPU_HARDFP_HALF = 1, 168*c42dbd0eSchristos VAL_CSKY_FPU_HARDFP_SINGLE = 2, 169*c42dbd0eSchristos VAL_CSKY_FPU_HARDFP_DOUBLE = 4, 170*c42dbd0eSchristos }; 171*c42dbd0eSchristos 172867d70fcSchristos #endif /* _ELF_CSKY_H */ 173