16f4ced0bSchristos /* C-SKY ELF support for BFD. 2*cb63e24eSchristos Copyright (C) 1998-2024 Free Software Foundation, Inc. 36f4ced0bSchristos Contributed by C-SKY Microsystems and Mentor Graphics. 46f4ced0bSchristos 56f4ced0bSchristos This file is part of BFD, the Binary File Descriptor library. 66f4ced0bSchristos 76f4ced0bSchristos This program is free software; you can redistribute it and/or modify 86f4ced0bSchristos it under the terms of the GNU General Public License as published by 96f4ced0bSchristos the Free Software Foundation; either version 3 of the License, or 106f4ced0bSchristos (at your option) any later version. 116f4ced0bSchristos 126f4ced0bSchristos This program is distributed in the hope that it will be useful, 136f4ced0bSchristos but WITHOUT ANY WARRANTY; without even the implied warranty of 146f4ced0bSchristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 156f4ced0bSchristos GNU General Public License for more details. 166f4ced0bSchristos 176f4ced0bSchristos You should have received a copy of the GNU General Public License 186f4ced0bSchristos along with this program; if not, write to the Free Software Foundation, 196f4ced0bSchristos Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ 206f4ced0bSchristos 216f4ced0bSchristos #ifndef _ELF_CSKY_H 226f4ced0bSchristos #define _ELF_CSKY_H 236f4ced0bSchristos 246f4ced0bSchristos #include "elf/reloc-macros.h" 256f4ced0bSchristos 266f4ced0bSchristos /* Values of relocation types according to the ABI doc. 276f4ced0bSchristos The order should be consistent with csky bfd reloc type 286f4ced0bSchristos table in bfd-in2.h. */ 296f4ced0bSchristos START_RELOC_NUMBERS (elf_csky_reloc_type) 306f4ced0bSchristos RELOC_NUMBER (R_CKCORE_NONE,0) 316f4ced0bSchristos RELOC_NUMBER (R_CKCORE_ADDR32,1) 326f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM8BY4,2) 336f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM11BY2,3) 346f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM4BY2,4) 356f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PCREL32,5) 366f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PCREL_JSR_IMM11BY2,6) 376f4ced0bSchristos RELOC_NUMBER (R_CKCORE_GNU_VTINHERIT,7) 386f4ced0bSchristos RELOC_NUMBER (R_CKCORE_GNU_VTENTRY,8) 396f4ced0bSchristos RELOC_NUMBER (R_CKCORE_RELATIVE,9) 406f4ced0bSchristos RELOC_NUMBER (R_CKCORE_COPY,10) 416f4ced0bSchristos RELOC_NUMBER (R_CKCORE_GLOB_DAT,11) 426f4ced0bSchristos RELOC_NUMBER (R_CKCORE_JUMP_SLOT,12) 436f4ced0bSchristos RELOC_NUMBER (R_CKCORE_GOTOFF,13) 446f4ced0bSchristos RELOC_NUMBER (R_CKCORE_GOTPC,14) 456f4ced0bSchristos RELOC_NUMBER (R_CKCORE_GOT32,15) 466f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PLT32,16) 476f4ced0bSchristos RELOC_NUMBER (R_CKCORE_ADDRGOT,17) 486f4ced0bSchristos RELOC_NUMBER (R_CKCORE_ADDRPLT,18) 496f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM26BY2,19) 506f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM16BY2,20) 516f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM16BY4,21) 526f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM10BY2,22) 536f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM10BY4,23) 546f4ced0bSchristos RELOC_NUMBER (R_CKCORE_ADDR_HI16,24) 556f4ced0bSchristos RELOC_NUMBER (R_CKCORE_ADDR_LO16,25) 566f4ced0bSchristos RELOC_NUMBER (R_CKCORE_GOTPC_HI16,26) 576f4ced0bSchristos RELOC_NUMBER (R_CKCORE_GOTPC_LO16,27) 586f4ced0bSchristos RELOC_NUMBER (R_CKCORE_GOTOFF_HI16,28) 596f4ced0bSchristos RELOC_NUMBER (R_CKCORE_GOTOFF_LO16,29) 606f4ced0bSchristos RELOC_NUMBER (R_CKCORE_GOT12,30) 616f4ced0bSchristos RELOC_NUMBER (R_CKCORE_GOT_HI16,31) 626f4ced0bSchristos RELOC_NUMBER (R_CKCORE_GOT_LO16,32) 636f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PLT12,33) 646f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PLT_HI16,34) 656f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PLT_LO16,35) 666f4ced0bSchristos RELOC_NUMBER (R_CKCORE_ADDRGOT_HI16,36) 676f4ced0bSchristos RELOC_NUMBER (R_CKCORE_ADDRGOT_LO16,37) 686f4ced0bSchristos RELOC_NUMBER (R_CKCORE_ADDRPLT_HI16,38) 696f4ced0bSchristos RELOC_NUMBER (R_CKCORE_ADDRPLT_LO16,39) 706f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PCREL_JSR_IMM26BY2,40) 716f4ced0bSchristos RELOC_NUMBER (R_CKCORE_TOFFSET_LO16, 41) 726f4ced0bSchristos RELOC_NUMBER (R_CKCORE_DOFFSET_LO16, 42) 736f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM18BY2, 43) 746f4ced0bSchristos RELOC_NUMBER (R_CKCORE_DOFFSET_IMM18, 44) 756f4ced0bSchristos RELOC_NUMBER (R_CKCORE_DOFFSET_IMM18BY2, 45) 766f4ced0bSchristos RELOC_NUMBER (R_CKCORE_DOFFSET_IMM18BY4, 46) 776f4ced0bSchristos RELOC_NUMBER (R_CKCORE_GOTOFF_IMM18, 47) 786f4ced0bSchristos RELOC_NUMBER (R_CKCORE_GOT_IMM18BY4, 48) 796f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PLT_IMM18BY4, 49) 806f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PCREL_IMM7BY4, 50) 816f4ced0bSchristos RELOC_NUMBER (R_CKCORE_TLS_LE32, 51) 826f4ced0bSchristos RELOC_NUMBER (R_CKCORE_TLS_IE32, 52) 836f4ced0bSchristos RELOC_NUMBER (R_CKCORE_TLS_GD32, 53) 846f4ced0bSchristos RELOC_NUMBER (R_CKCORE_TLS_LDM32, 54) 856f4ced0bSchristos RELOC_NUMBER (R_CKCORE_TLS_LDO32, 55) 866f4ced0bSchristos RELOC_NUMBER (R_CKCORE_TLS_DTPMOD32, 56) 876f4ced0bSchristos RELOC_NUMBER (R_CKCORE_TLS_DTPOFF32, 57) 886f4ced0bSchristos RELOC_NUMBER (R_CKCORE_TLS_TPOFF32, 58) 896f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PCREL_FLRW_IMM8BY4, 59) 906f4ced0bSchristos RELOC_NUMBER (R_CKCORE_NOJSRI, 60) 916f4ced0bSchristos RELOC_NUMBER (R_CKCORE_CALLGRAPH, 61) 926f4ced0bSchristos RELOC_NUMBER (R_CKCORE_IRELATIVE, 62) 936f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PCREL_BLOOP_IMM4BY4, 63) 946f4ced0bSchristos RELOC_NUMBER (R_CKCORE_PCREL_BLOOP_IMM12BY4, 64) 956f4ced0bSchristos END_RELOC_NUMBERS (R_CKCORE_MAX) 966f4ced0bSchristos 974f645668Schristos /* Additional section types. */ 984f645668Schristos #define SHT_CSKY_ATTRIBUTES 0x70000001 /* Section holds attributes. */ 994f645668Schristos 1004f645668Schristos /* Object attribute tags. */ 1014f645668Schristos enum 1024f645668Schristos { 1034f645668Schristos /* 0-3 are generic. */ 1044f645668Schristos /* Arch name for this object file. */ 1054f645668Schristos Tag_CSKY_ARCH_NAME = 4, 1064f645668Schristos Tag_CSKY_CPU_NAME = 5, 1074f645668Schristos 1084f645668Schristos /* ISA flags for this object file. */ 1094f645668Schristos Tag_CSKY_ISA_FLAGS, 1104f645668Schristos Tag_CSKY_ISA_EXT_FLAGS, 1114f645668Schristos 1124f645668Schristos /* CSKY DSP version used by this object file. */ 1134f645668Schristos Tag_CSKY_DSP_VERSION, 1144f645668Schristos 1154f645668Schristos /* CSKY VDSP version used by this object file. */ 1164f645668Schristos Tag_CSKY_VDSP_VERSION, 1174f645668Schristos 1184f645668Schristos /* CSKY FPU version used by this object file. */ 1194f645668Schristos Tag_CSKY_FPU_VERSION = 0x10, 1204f645668Schristos /* FPU ABI. params: Soft GR/Hard GR/Hard FR. */ 1214f645668Schristos Tag_CSKY_FPU_ABI, 1224f645668Schristos /* Rounding Support. */ 1234f645668Schristos Tag_CSKY_FPU_ROUNDING, 1244f645668Schristos /* Denormal Support. */ 1254f645668Schristos Tag_CSKY_FPU_DENORMAL, 1264f645668Schristos /* Exeception Support. */ 1274f645668Schristos Tag_CSKY_FPU_Exception, 1284f645668Schristos /* Number Module Support("IEEE 754"). */ 1294f645668Schristos Tag_CSKY_FPU_NUMBER_MODULE, 1304f645668Schristos /* Half/Single/Double. */ 1314f645668Schristos Tag_CSKY_FPU_HARDFP, 1324f645668Schristos 1334f645668Schristos Tag_CSKY_MAX, 1344f645668Schristos }; 1354f645668Schristos 1364f645668Schristos /* Object attribute values. */ 1374f645668Schristos enum 1384f645668Schristos { 1394f645668Schristos /* Values defined for Tag_CSKY_DSP_VERSION. */ 1404f645668Schristos VAL_CSKY_DSP_VERSION_EXTENSION = 1, /* hi-lo DSP extension. */ 1414f645668Schristos VAL_CSKY_DSP_VERSION_2 = 2, /* CK803s EDSP. */ 1424f645668Schristos }; 1434f645668Schristos 1444f645668Schristos enum 1454f645668Schristos { 1464f645668Schristos /* Values defined for Tag_CSKY_VDSP_VERSION. */ 1474f645668Schristos VAL_CSKY_VDSP_VERSION_1 = 1, /* VDSP version 1. */ 1484f645668Schristos VAL_CSKY_VDSP_VERSION_2 /* VDSP version 1. */ 1494f645668Schristos }; 1504f645668Schristos 1514f645668Schristos enum 1524f645668Schristos { 1534f645668Schristos /* Values defined for Tag_CSKY_FPU_VERSION. */ 1544f645668Schristos VAL_CSKY_FPU_VERSION_1 = 1, /* ABIV1 FPU. */ 1554f645668Schristos VAL_CSKY_FPU_VERSION_2, /* ABIV2 FPU. */ 1564f645668Schristos }; 1574f645668Schristos 1584f645668Schristos enum 1594f645668Schristos { 1604f645668Schristos VAL_CSKY_FPU_ABI_SOFT = 1, 1614f645668Schristos VAL_CSKY_FPU_ABI_SOFTFP, 1624f645668Schristos VAL_CSKY_FPU_ABI_HARD, 1634f645668Schristos }; 1644f645668Schristos 1654f645668Schristos enum 1664f645668Schristos { 1674f645668Schristos VAL_CSKY_FPU_HARDFP_HALF = 1, 1684f645668Schristos VAL_CSKY_FPU_HARDFP_SINGLE = 2, 1694f645668Schristos VAL_CSKY_FPU_HARDFP_DOUBLE = 4, 1704f645668Schristos }; 1714f645668Schristos 1726f4ced0bSchristos #endif /* _ELF_CSKY_H */ 173