Blame include/elf/nds32.h

Packit bbfece
/* NDS32 ELF support for BFD.
Packit bbfece
   Copyright (C) 2012-2018 Free Software Foundation, Inc.
Packit bbfece
   Contributed by Andes Technology Corporation.
Packit bbfece
Packit bbfece
   This file is part of BFD, the Binary File Descriptor library.
Packit bbfece
Packit bbfece
   This program is free software; you can redistribute it and/or modify
Packit bbfece
   it under the terms of the GNU General Public License as published by
Packit bbfece
   the Free Software Foundation; either version 3 of the License, or
Packit bbfece
   (at your option) any later version.
Packit bbfece
Packit bbfece
   This program is distributed in the hope that it will be useful,
Packit bbfece
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit bbfece
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit bbfece
   GNU General Public License for more details.
Packit bbfece
Packit bbfece
   You should have received a copy of the GNU General Public License
Packit bbfece
   along with this program; if not, write to the Free Software
Packit bbfece
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
Packit bbfece
   02110-1301, USA.  */
Packit bbfece
Packit bbfece
#ifndef _ELF_NDS32_H
Packit bbfece
#define _ELF_NDS32_H
Packit bbfece
Packit bbfece
#include "elf/reloc-macros.h"
Packit bbfece
Packit bbfece
/* Relocations.  */
Packit bbfece
START_RELOC_NUMBERS (elf_nds32_reloc_type)
Packit bbfece
  RELOC_NUMBER (R_NDS32_NONE, 0)
Packit bbfece
  /* REL relocations.  */
Packit bbfece
  RELOC_NUMBER (R_NDS32_16, 1)
Packit bbfece
  RELOC_NUMBER (R_NDS32_32, 2)
Packit bbfece
  RELOC_NUMBER (R_NDS32_20, 3)
Packit bbfece
  RELOC_NUMBER (R_NDS32_9_PCREL, 4)
Packit bbfece
  RELOC_NUMBER (R_NDS32_15_PCREL, 5)
Packit bbfece
  RELOC_NUMBER (R_NDS32_17_PCREL, 6)
Packit bbfece
  RELOC_NUMBER (R_NDS32_25_PCREL, 7)
Packit bbfece
  RELOC_NUMBER (R_NDS32_HI20, 8)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LO12S3, 9)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LO12S2, 10)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LO12S1, 11)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LO12S0, 12)
Packit bbfece
  RELOC_NUMBER (R_NDS32_SDA15S3, 13)
Packit bbfece
  RELOC_NUMBER (R_NDS32_SDA15S2, 14)
Packit bbfece
  RELOC_NUMBER (R_NDS32_SDA15S1, 15)
Packit bbfece
  RELOC_NUMBER (R_NDS32_SDA15S0, 16)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GNU_VTINHERIT, 17)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GNU_VTENTRY, 18)
Packit bbfece
Packit bbfece
  /* RELA relocations.  */
Packit bbfece
  RELOC_NUMBER (R_NDS32_16_RELA, 19)
Packit bbfece
  RELOC_NUMBER (R_NDS32_32_RELA, 20)
Packit bbfece
  RELOC_NUMBER (R_NDS32_20_RELA, 21)
Packit bbfece
  RELOC_NUMBER (R_NDS32_9_PCREL_RELA, 22)
Packit bbfece
  RELOC_NUMBER (R_NDS32_15_PCREL_RELA, 23)
Packit bbfece
  RELOC_NUMBER (R_NDS32_17_PCREL_RELA, 24)
Packit bbfece
  RELOC_NUMBER (R_NDS32_25_PCREL_RELA, 25)
Packit bbfece
  RELOC_NUMBER (R_NDS32_HI20_RELA, 26)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LO12S3_RELA, 27)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LO12S2_RELA, 28)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LO12S1_RELA, 29)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LO12S0_RELA, 30)
Packit bbfece
  RELOC_NUMBER (R_NDS32_SDA15S3_RELA, 31)
Packit bbfece
  RELOC_NUMBER (R_NDS32_SDA15S2_RELA, 32)
Packit bbfece
  RELOC_NUMBER (R_NDS32_SDA15S1_RELA, 33)
Packit bbfece
  RELOC_NUMBER (R_NDS32_SDA15S0_RELA, 34)
Packit bbfece
  RELOC_NUMBER (R_NDS32_RELA_GNU_VTINHERIT, 35)
Packit bbfece
  RELOC_NUMBER (R_NDS32_RELA_GNU_VTENTRY, 36)
Packit bbfece
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOT20, 37)
Packit bbfece
  RELOC_NUMBER (R_NDS32_25_PLTREL, 38)
Packit bbfece
  RELOC_NUMBER (R_NDS32_COPY, 39)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GLOB_DAT, 40)
Packit bbfece
  RELOC_NUMBER (R_NDS32_JMP_SLOT, 41)
Packit bbfece
  RELOC_NUMBER (R_NDS32_RELATIVE, 42)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOTOFF, 43)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOTPC20, 44)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOT_HI20, 45)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOT_LO12, 46)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOTPC_HI20, 47)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOTPC_LO12, 48)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOTOFF_HI20, 49)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOTOFF_LO12, 50)
Packit bbfece
  RELOC_NUMBER (R_NDS32_INSN16, 51)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LABEL, 52)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LONGCALL1, 53)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LONGCALL2, 54)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LONGCALL3, 55)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LONGJUMP1, 56)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LONGJUMP2, 57)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LONGJUMP3, 58)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LOADSTORE, 59)
Packit bbfece
  RELOC_NUMBER (R_NDS32_9_FIXED_RELA, 60)
Packit bbfece
  RELOC_NUMBER (R_NDS32_15_FIXED_RELA, 61)
Packit bbfece
  RELOC_NUMBER (R_NDS32_17_FIXED_RELA, 62)
Packit bbfece
  RELOC_NUMBER (R_NDS32_25_FIXED_RELA, 63)
Packit bbfece
  RELOC_NUMBER (R_NDS32_PLTREL_HI20, 64)	/* This is obsoleted.  */
Packit bbfece
  RELOC_NUMBER (R_NDS32_PLTREL_LO12, 65)	/* This is obsoleted.  */
Packit bbfece
  RELOC_NUMBER (R_NDS32_PLT_GOTREL_HI20, 66)
Packit bbfece
  RELOC_NUMBER (R_NDS32_PLT_GOTREL_LO12, 67)
Packit bbfece
  RELOC_NUMBER (R_NDS32_SDA12S2_DP_RELA, 68)
Packit bbfece
  RELOC_NUMBER (R_NDS32_SDA12S2_SP_RELA, 69)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LO12S2_DP_RELA, 70)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LO12S2_SP_RELA, 71)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LO12S0_ORI_RELA, 72)
Packit bbfece
  RELOC_NUMBER (R_NDS32_SDA16S3_RELA, 73)
Packit bbfece
  RELOC_NUMBER (R_NDS32_SDA17S2_RELA, 74)
Packit bbfece
  RELOC_NUMBER (R_NDS32_SDA18S1_RELA, 75)
Packit bbfece
  RELOC_NUMBER (R_NDS32_SDA19S0_RELA, 76)
Packit bbfece
  RELOC_NUMBER (R_NDS32_DWARF2_OP1_RELA, 77)
Packit bbfece
  RELOC_NUMBER (R_NDS32_DWARF2_OP2_RELA, 78)
Packit bbfece
  RELOC_NUMBER (R_NDS32_DWARF2_LEB_RELA, 79)
Packit bbfece
  RELOC_NUMBER (R_NDS32_UPDATE_TA_RELA, 80)	/* This is obsoleted.  */
Packit bbfece
  RELOC_NUMBER (R_NDS32_9_PLTREL, 81)
Packit bbfece
  RELOC_NUMBER (R_NDS32_PLT_GOTREL_LO20, 82)
Packit bbfece
  RELOC_NUMBER (R_NDS32_PLT_GOTREL_LO15, 83)
Packit bbfece
  RELOC_NUMBER (R_NDS32_PLT_GOTREL_LO19, 84)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOT_LO15, 85)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOT_LO19, 86)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOTOFF_LO15, 87)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOTOFF_LO19, 88)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOT15S2_RELA, 89)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOT17S2_RELA, 90)
Packit bbfece
  RELOC_NUMBER (R_NDS32_5_RELA, 91)
Packit bbfece
  RELOC_NUMBER (R_NDS32_10_UPCREL_RELA, 92)	/* This is obsoleted.  */
Packit bbfece
  RELOC_NUMBER (R_NDS32_SDA_FP7U2_RELA, 93)
Packit bbfece
  RELOC_NUMBER (R_NDS32_WORD_9_PCREL_RELA, 94)
Packit bbfece
  RELOC_NUMBER (R_NDS32_25_ABS_RELA, 95)
Packit bbfece
  RELOC_NUMBER (R_NDS32_17IFC_PCREL_RELA, 96)
Packit bbfece
  RELOC_NUMBER (R_NDS32_10IFCU_PCREL_RELA, 97)
Packit bbfece
  RELOC_NUMBER (R_NDS32_TLS_LE_HI20, 98)
Packit bbfece
  RELOC_NUMBER (R_NDS32_TLS_LE_LO12, 99)
Packit bbfece
  RELOC_NUMBER (R_NDS32_TLS_IE_HI20, 100)
Packit bbfece
  RELOC_NUMBER (R_NDS32_TLS_IE_LO12S2, 101)
Packit bbfece
  RELOC_NUMBER (R_NDS32_TLS_TPOFF, 102)
Packit bbfece
  RELOC_NUMBER (R_NDS32_TLS_LE_20, 103)
Packit bbfece
  RELOC_NUMBER (R_NDS32_TLS_LE_15S0, 104)
Packit bbfece
  RELOC_NUMBER (R_NDS32_TLS_LE_15S1, 105)
Packit bbfece
  RELOC_NUMBER (R_NDS32_TLS_LE_15S2, 106)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LONGCALL4, 107)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LONGCALL5, 108)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LONGCALL6, 109)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LONGJUMP4, 110)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LONGJUMP5, 111)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LONGJUMP6, 112)
Packit bbfece
  RELOC_NUMBER (R_NDS32_LONGJUMP7, 113)
Packit bbfece
Packit bbfece
  RELOC_NUMBER (R_NDS32_RELAX_ENTRY, 192)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOT_SUFF, 193)
Packit bbfece
  RELOC_NUMBER (R_NDS32_GOTOFF_SUFF, 194)
Packit bbfece
  RELOC_NUMBER (R_NDS32_PLT_GOT_SUFF, 195)
Packit bbfece
  RELOC_NUMBER (R_NDS32_MULCALL_SUFF, 196)	/* This is obsoleted.  */
Packit bbfece
  RELOC_NUMBER (R_NDS32_PTR, 197)
Packit bbfece
  RELOC_NUMBER (R_NDS32_PTR_COUNT, 198)
Packit bbfece
  RELOC_NUMBER (R_NDS32_PTR_RESOLVED, 199)
Packit bbfece
  RELOC_NUMBER (R_NDS32_PLTBLOCK, 200)		/* This is obsoleted.  */
Packit bbfece
  RELOC_NUMBER (R_NDS32_RELAX_REGION_BEGIN, 201)
Packit bbfece
  RELOC_NUMBER (R_NDS32_RELAX_REGION_END, 202)
Packit bbfece
  RELOC_NUMBER (R_NDS32_MINUEND, 203)
Packit bbfece
  RELOC_NUMBER (R_NDS32_SUBTRAHEND, 204)
Packit bbfece
  RELOC_NUMBER (R_NDS32_DIFF8, 205)
Packit bbfece
  RELOC_NUMBER (R_NDS32_DIFF16, 206)
Packit bbfece
  RELOC_NUMBER (R_NDS32_DIFF32, 207)
Packit bbfece
  RELOC_NUMBER (R_NDS32_DIFF_ULEB128, 208)
Packit bbfece
  RELOC_NUMBER (R_NDS32_DATA, 209)
Packit bbfece
  RELOC_NUMBER (R_NDS32_TRAN, 210)
Packit bbfece
  RELOC_NUMBER (R_NDS32_TLS_LE_ADD, 211)
Packit bbfece
  RELOC_NUMBER (R_NDS32_TLS_LE_LS, 212)
Packit bbfece
  RELOC_NUMBER (R_NDS32_EMPTY, 213)
Packit bbfece
Packit bbfece
END_RELOC_NUMBERS (R_NDS32_max)
Packit bbfece
Packit bbfece
/* Processor specific section indices.  These sections do not actually
Packit bbfece
   exist.  Symbols with a st_shndx field corresponding to one of these
Packit bbfece
   values have a special meaning.  */
Packit bbfece
Packit bbfece
/* Processor specific flags for the ELF header e_flags field.
Packit bbfece
Packit bbfece
   31   28 27		      8 7   4 3       0
Packit bbfece
   ---------------------------------------------
Packit bbfece
   | ARCH | CONFUGURAION FIELD | ABI | ELF_VER |
Packit bbfece
   ---------------------------------------------  */
Packit bbfece
Packit bbfece
/* Architechure definition.  */
Packit bbfece
Packit bbfece
/* 4-bit (b31-b28) nds32 architecture field.
Packit bbfece
   We can have up to 15 architectures; 0000 is for unknown.  */
Packit bbfece
#define EF_NDS_ARCH				0xF0000000
Packit bbfece
#define EF_NDS_ARCH_SHIFT			28
Packit bbfece
/* There could be more architectures. For now, only n1 and n1h.  */
Packit bbfece
#define E_NDS_ARCH_STAR_RESERVED		0x00000000
Packit bbfece
#define E_NDS_ARCH_STAR_V1_0			0x10000000
Packit bbfece
#define E_NDS_ARCH_STAR_V2_0			0x20000000
Packit bbfece
#define E_NDS_ARCH_STAR_V3_0			0x30000000
Packit bbfece
#define E_NDS_ARCH_STAR_V3_M			0x40000000
Packit bbfece
#define E_NDS_ARCH_STAR_V0_9			0x90000000	/* Obsoleted.  */
Packit bbfece
/* n1 code.  */
Packit bbfece
#define E_N1_ARCH			E_NDS_ARCH_STAR_V0_9
Packit bbfece
/* n1h code.  */
Packit bbfece
#define E_N1H_ARCH			E_NDS_ARCH_STAR_V1_0
Packit bbfece
Packit bbfece
Packit bbfece
/* Configuration field definitioans.  */
Packit bbfece
#define EF_NDS_INST				0x0FFFFF00
Packit bbfece
Packit bbfece
/* E_NDS_ARCH_STAR_V1_0 configuration fields.
Packit bbfece
Packit bbfece
   E_NDS_ARCH_STAR_V2_0 configuration fields.
Packit bbfece
   These are discarded in v2.
Packit bbfece
     * E_NDS32_HAS_MFUSR_PC_INST	0x00000100
Packit bbfece
     * E_NDS32_HAS_DIV_INST		0x00002000
Packit bbfece
     * E_NDS32_HAS_NO_MAC_INST		0x00100000
Packit bbfece
   These are added in v2.
Packit bbfece
     * E_NDS32_HAS_DIV_DX_INST		0x00002000
Packit bbfece
     * E_NDS32_HAS_MAC_DX_INST		0x00100000  */
Packit bbfece
Packit bbfece
/* MFUSR rt, PC and correct ISYNC, MSYNC instructions.
Packit bbfece
   Old N1213HC has no such instructions.  */
Packit bbfece
#define E_NDS32_HAS_MFUSR_PC_INST		0x00000100 /* Reclaimed.  */
Packit bbfece
#define E_NDS32_HAS_EX9_INST			0x00000100 /* v3, ELF 1.4.  */
Packit bbfece
/* C/C++ performance extension instructions.  */
Packit bbfece
#define E_NDS32_HAS_EXT_INST			0x00000200
Packit bbfece
/* Performance extension set II instructions.  */
Packit bbfece
#define E_NDS32_HAS_EXT2_INST			0x00000400
Packit bbfece
/* Single precision Floating point processor instructions.  */
Packit bbfece
#define E_NDS32_HAS_FPU_INST			0x00000800
Packit bbfece
/* Audio instructions with 32-bit audio dx.lo register.  */
Packit bbfece
#define E_NDS32_HAS_AUDIO_INST			0x00001000
Packit bbfece
/* DIV instructions.  */
Packit bbfece
#define E_NDS32_HAS_DIV_INST			0x00002000 /* Reclaimed.  */
Packit bbfece
/* DIV instructions using d0/d1.  */
Packit bbfece
#define E_NDS32_HAS_DIV_DX_INST			0x00002000 /* v2.  */
Packit bbfece
/* 16-bit instructions.  */
Packit bbfece
#define E_NDS32_HAS_16BIT_INST			0x00004000 /* Reclaimed.  */
Packit bbfece
#define E_NDS32_HAS_IFC_INST			0x00004000 /* v3, ELF 1.4.  */
Packit bbfece
/* String operation instructions.  */
Packit bbfece
#define E_NDS32_HAS_STRING_INST			0x00008000
Packit bbfece
/* Reduced register file.  */
Packit bbfece
#define E_NDS32_HAS_REDUCED_REGS		0x00010000
Packit bbfece
/* Video instructions.  */
Packit bbfece
#define E_NDS32_HAS_VIDEO_INST			0x00020000 /* Reclaimed.  */
Packit bbfece
#define E_NDS32_HAS_SATURATION_INST		0x00020000 /* v3, ELF 1.4.  */
Packit bbfece
/* Encription instructions.  */
Packit bbfece
#define E_NDS32_HAS_ENCRIPT_INST		0x00040000
Packit bbfece
/* Doulbe Precision Floating point processor instructions.  */
Packit bbfece
#define E_NDS32_HAS_FPU_DP_INST			0x00080000
Packit bbfece
/* No MAC instruction used.  */
Packit bbfece
#define E_NDS32_HAS_NO_MAC_INST			0x00100000 /* Reclaimed when V2/V3.  */
Packit bbfece
/* MAC instruction using d0/d1.  */
Packit bbfece
#define E_NDS32_HAS_MAC_DX_INST			0x00100000 /* v2.  */
Packit bbfece
/* L2 cache instruction.  */
Packit bbfece
#define E_NDS32_HAS_L2C_INST			0x00200000
Packit bbfece
/* FPU registers configuration when FPU SP/DP presents; 0x00c00000.  */
Packit bbfece
#define E_NDS32_FPU_REG_CONF_SHIFT		22
Packit bbfece
#define E_NDS32_FPU_REG_CONF			(0x3 << E_NDS32_FPU_REG_CONF_SHIFT)
Packit bbfece
#define E_NDS32_FPU_REG_8SP_4DP			0x0
Packit bbfece
#define E_NDS32_FPU_REG_16SP_8DP		0x1
Packit bbfece
#define E_NDS32_FPU_REG_32SP_16DP		0x2
Packit bbfece
#define E_NDS32_FPU_REG_32SP_32DP		0x3
Packit bbfece
/* FPU MAC instruction used.  */
Packit bbfece
#define E_NDS32_HAS_FPU_MAC_INST		0x01000000
Packit bbfece
/* <<<Empty Check>>>.  */
Packit bbfece
#define E_NDS32_NULL				0x02000000
Packit bbfece
/* PIC enabled.  */
Packit bbfece
#define E_NDS32_HAS_PIC				0x04000000
Packit bbfece
/* Use custom section.  */
Packit bbfece
#define E_NDS32_HAS_CUSTOM_SEC			0x08000000
Packit bbfece
Packit bbfece
/* 4-bit for ABI signature, allow up to 16 ABIs
Packit bbfece
   0: for OLD ABI V0, phase out
Packit bbfece
   1: for V1 , starting with V0 toolchain
Packit bbfece
   2: for V2
Packit bbfece
   3: for V2FP (fs0, fs1 as function parameter)
Packit bbfece
   4: for AABI  */
Packit bbfece
/* Only old N1213HC use V0.
Packit bbfece
   New ABI is used due to return register is changed to r0 from r5.  */
Packit bbfece
#define EF_NDS_ABI				0x000000F0
Packit bbfece
#define EF_NDS_ABI_SHIFT			4
Packit bbfece
#define E_NDS_ABI_V0				0x00000000
Packit bbfece
#define E_NDS_ABI_V1				0x00000010
Packit bbfece
#define E_NDS_ABI_V2				0x00000020
Packit bbfece
#define E_NDS_ABI_V2FP				0x00000030
Packit bbfece
#define E_NDS_ABI_AABI				0x00000040
Packit bbfece
#define E_NDS_ABI_V2FP_PLUS			0x00000050
Packit bbfece
Packit bbfece
/* This flag signifies the version of Andes ELF.
Packit bbfece
   Some more information may exist somewhere which is TBD.  */
Packit bbfece
#define EF_NDS32_ELF_VERSION			0x0000000F
Packit bbfece
#define EF_NDS32_ELF_VERSION_SHIFT		0
Packit bbfece
Packit bbfece
/* Andes ELF Version 1.3 and before.  */
Packit bbfece
#define E_NDS32_ELF_VER_1_2			0x0
Packit bbfece
/* Andes ELF Version 1.31.  */
Packit bbfece
#define E_NDS32_ELF_VER_1_3			0x1
Packit bbfece
/* Andes ELF Version 1.4. Change the way we fix .debug_* and .gcc_except_table.
Packit bbfece
   Change three bit for EX9, IFC and SAT.  */
Packit bbfece
#define E_NDS32_ELF_VER_1_4			0x2
Packit bbfece
Packit bbfece
#endif