xref: /dflybsd-src/contrib/binutils-2.34/include/elf/tic6x.h (revision b52ef7118d1621abed722c5bbbd542210290ecef)
1*fae548d3Szrj /* TI C6X ELF support for BFD.
2*fae548d3Szrj    Copyright (C) 2010-2020 Free Software Foundation, Inc.
3*fae548d3Szrj 
4*fae548d3Szrj    This file is part of BFD, the Binary File Descriptor library.
5*fae548d3Szrj 
6*fae548d3Szrj    This program is free software; you can redistribute it and/or modify
7*fae548d3Szrj    it under the terms of the GNU General Public License as published by
8*fae548d3Szrj    the Free Software Foundation; either version 3 of the License, or
9*fae548d3Szrj    (at your option) any later version.
10*fae548d3Szrj 
11*fae548d3Szrj    This program is distributed in the hope that it will be useful,
12*fae548d3Szrj    but WITHOUT ANY WARRANTY; without even the implied warranty of
13*fae548d3Szrj    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*fae548d3Szrj    GNU General Public License for more details.
15*fae548d3Szrj 
16*fae548d3Szrj    You should have received a copy of the GNU General Public License
17*fae548d3Szrj    along with this program; if not, write to the Free Software
18*fae548d3Szrj    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19*fae548d3Szrj    MA 02110-1301, USA.  */
20*fae548d3Szrj 
21*fae548d3Szrj #ifndef _ELF_TIC6X_H
22*fae548d3Szrj #define _ELF_TIC6X_H
23*fae548d3Szrj 
24*fae548d3Szrj #include "elf/reloc-macros.h"
25*fae548d3Szrj 
26*fae548d3Szrj /* Relocation types.  */
27*fae548d3Szrj START_RELOC_NUMBERS (elf_tic6x_reloc_type)
28*fae548d3Szrj   RELOC_NUMBER (R_C6000_NONE, 0)
29*fae548d3Szrj   RELOC_NUMBER (R_C6000_ABS32, 1)
30*fae548d3Szrj   RELOC_NUMBER (R_C6000_ABS16, 2)
31*fae548d3Szrj   RELOC_NUMBER (R_C6000_ABS8, 3)
32*fae548d3Szrj   RELOC_NUMBER (R_C6000_PCR_S21, 4)
33*fae548d3Szrj   RELOC_NUMBER (R_C6000_PCR_S12, 5)
34*fae548d3Szrj   RELOC_NUMBER (R_C6000_PCR_S10, 6)
35*fae548d3Szrj   RELOC_NUMBER (R_C6000_PCR_S7, 7)
36*fae548d3Szrj   RELOC_NUMBER (R_C6000_ABS_S16, 8)
37*fae548d3Szrj   RELOC_NUMBER (R_C6000_ABS_L16, 9)
38*fae548d3Szrj   RELOC_NUMBER (R_C6000_ABS_H16, 10)
39*fae548d3Szrj   RELOC_NUMBER (R_C6000_SBR_U15_B, 11)
40*fae548d3Szrj   RELOC_NUMBER (R_C6000_SBR_U15_H, 12)
41*fae548d3Szrj   RELOC_NUMBER (R_C6000_SBR_U15_W, 13)
42*fae548d3Szrj   RELOC_NUMBER (R_C6000_SBR_S16, 14)
43*fae548d3Szrj   RELOC_NUMBER (R_C6000_SBR_L16_B, 15)
44*fae548d3Szrj   RELOC_NUMBER (R_C6000_SBR_L16_H, 16)
45*fae548d3Szrj   RELOC_NUMBER (R_C6000_SBR_L16_W, 17)
46*fae548d3Szrj   RELOC_NUMBER (R_C6000_SBR_H16_B, 18)
47*fae548d3Szrj   RELOC_NUMBER (R_C6000_SBR_H16_H, 19)
48*fae548d3Szrj   RELOC_NUMBER (R_C6000_SBR_H16_W, 20)
49*fae548d3Szrj   RELOC_NUMBER (R_C6000_SBR_GOT_U15_W, 21)
50*fae548d3Szrj   RELOC_NUMBER (R_C6000_SBR_GOT_L16_W, 22)
51*fae548d3Szrj   RELOC_NUMBER (R_C6000_SBR_GOT_H16_W, 23)
52*fae548d3Szrj   RELOC_NUMBER (R_C6000_DSBT_INDEX, 24)
53*fae548d3Szrj   RELOC_NUMBER (R_C6000_PREL31, 25)
54*fae548d3Szrj   RELOC_NUMBER (R_C6000_COPY, 26)
55*fae548d3Szrj   RELOC_NUMBER (R_C6000_JUMP_SLOT, 27)
56*fae548d3Szrj   RELOC_NUMBER (R_C6000_EHTYPE, 28)
57*fae548d3Szrj   RELOC_NUMBER (R_C6000_PCR_H16, 29)
58*fae548d3Szrj   RELOC_NUMBER (R_C6000_PCR_L16, 30)
59*fae548d3Szrj   RELOC_NUMBER (R_C6000_ALIGN, 253)
60*fae548d3Szrj   RELOC_NUMBER (R_C6000_FPHEAD, 254)
61*fae548d3Szrj   RELOC_NUMBER (R_C6000_NOCMP, 255)
62*fae548d3Szrj END_RELOC_NUMBERS (R_TIC6X_max)
63*fae548d3Szrj 
64*fae548d3Szrj /* Processor-specific flags.  */
65*fae548d3Szrj 
66*fae548d3Szrj /* File contains static relocation information.  */
67*fae548d3Szrj #define EF_C6000_REL		0x1
68*fae548d3Szrj 
69*fae548d3Szrj /* Processor-specific section types.  */
70*fae548d3Szrj 
71*fae548d3Szrj /* Unwind function table for stack unwinding.  */
72*fae548d3Szrj #define SHT_C6000_UNWIND	0x70000001
73*fae548d3Szrj 
74*fae548d3Szrj /* DLL dynamic linking pre-emption map.  */
75*fae548d3Szrj #define SHT_C6000_PREEMPTMAP	0x70000002
76*fae548d3Szrj 
77*fae548d3Szrj /* Object file compatibility attributes.  */
78*fae548d3Szrj #define SHT_C6000_ATTRIBUTES	0x70000003
79*fae548d3Szrj 
80*fae548d3Szrj /* Intermediate code for link-time optimization.  */
81*fae548d3Szrj #define SHT_TI_ICODE		0x7F000000
82*fae548d3Szrj 
83*fae548d3Szrj /* Symbolic cross reference information.  */
84*fae548d3Szrj #define SHT_TI_XREF		0x7F000001
85*fae548d3Szrj 
86*fae548d3Szrj /* Reserved.  */
87*fae548d3Szrj #define SHT_TI_HANDLER		0x7F000002
88*fae548d3Szrj 
89*fae548d3Szrj /* Compressed data for initializing C variables.  */
90*fae548d3Szrj #define SHT_TI_INITINFO		0x7F000003
91*fae548d3Szrj 
92*fae548d3Szrj /* Extended program header attributes.  */
93*fae548d3Szrj #define SHT_TI_PHATTRS		0x7F000004
94*fae548d3Szrj 
95*fae548d3Szrj /* Processor specific section indices.  These sections do not actually
96*fae548d3Szrj    exist.  Symbols with a st_shndx field corresponding to one of these
97*fae548d3Szrj    values have a special meaning.  */
98*fae548d3Szrj 
99*fae548d3Szrj /* Small data area common symbol.  */
100*fae548d3Szrj #define SHN_TIC6X_SCOMMON	SHN_LORESERVE
101*fae548d3Szrj 
102*fae548d3Szrj /* Processor-specific segment types.  */
103*fae548d3Szrj 
104*fae548d3Szrj /* Extended Segment Attributes.  */
105*fae548d3Szrj #define PT_C6000_PHATTR		0x70000000
106*fae548d3Szrj 
107*fae548d3Szrj /* Processor-specific dynamic tags.  */
108*fae548d3Szrj 
109*fae548d3Szrj /* Undocumented.  */
110*fae548d3Szrj #define DT_C6000_GSYM_OFFSET	0x6000000D
111*fae548d3Szrj 
112*fae548d3Szrj /* Undocumented.  */
113*fae548d3Szrj #define DT_C6000_GSTR_OFFSET	0x6000000F
114*fae548d3Szrj 
115*fae548d3Szrj /* Statically linked base address of data segment.  */
116*fae548d3Szrj #define DT_C6000_DSBT_BASE	0x70000000
117*fae548d3Szrj 
118*fae548d3Szrj /* Number of entries in this module's DSBT.  */
119*fae548d3Szrj #define DT_C6000_DSBT_SIZE	0x70000001
120*fae548d3Szrj 
121*fae548d3Szrj /* Undocumented.  */
122*fae548d3Szrj #define DT_C6000_PREEMPTMAP	0x70000002
123*fae548d3Szrj 
124*fae548d3Szrj /* The hard-coded DSBT index for this module, if any.  */
125*fae548d3Szrj #define DT_C6000_DSBT_INDEX	0x70000003
126*fae548d3Szrj 
127*fae548d3Szrj /* Extended program header attributes.  */
128*fae548d3Szrj 
129*fae548d3Szrj /* Terminate a segment.  */
130*fae548d3Szrj #define PHA_NULL		0x0
131*fae548d3Szrj 
132*fae548d3Szrj /* Segment's address bound to the final address.  */
133*fae548d3Szrj #define PHA_BOUND		0x1
134*fae548d3Szrj 
135*fae548d3Szrj /* Segment cannot be further relocated.  */
136*fae548d3Szrj #define PHA_READONLY		0x2
137*fae548d3Szrj 
138*fae548d3Szrj /* Build attributes.  */
139*fae548d3Szrj enum
140*fae548d3Szrj   {
141*fae548d3Szrj #define TAG(tag, value) tag = value,
142*fae548d3Szrj #include "elf/tic6x-attrs.h"
143*fae548d3Szrj #undef TAG
144*fae548d3Szrj     Tag_C6XABI_last
145*fae548d3Szrj   };
146*fae548d3Szrj 
147*fae548d3Szrj /* Values for Tag_ISA.  GNU-specific names; the ABI does not specify
148*fae548d3Szrj    names for these values.  */
149*fae548d3Szrj enum
150*fae548d3Szrj   {
151*fae548d3Szrj     C6XABI_Tag_ISA_none = 0,
152*fae548d3Szrj     C6XABI_Tag_ISA_C62X = 1,
153*fae548d3Szrj     C6XABI_Tag_ISA_C67X = 3,
154*fae548d3Szrj     C6XABI_Tag_ISA_C67XP = 4,
155*fae548d3Szrj     C6XABI_Tag_ISA_C64X = 6,
156*fae548d3Szrj     C6XABI_Tag_ISA_C64XP = 7,
157*fae548d3Szrj     C6XABI_Tag_ISA_C674X = 8
158*fae548d3Szrj   };
159*fae548d3Szrj 
160*fae548d3Szrj /* Special section names.  */
161*fae548d3Szrj #define ELF_STRING_C6000_unwind           ".c6xabi.exidx"
162*fae548d3Szrj #define ELF_STRING_C6000_unwind_info      ".c6xabi.extab"
163*fae548d3Szrj #define ELF_STRING_C6000_unwind_once      ".gnu.linkonce.c6xabi.exidx."
164*fae548d3Szrj #define ELF_STRING_C6000_unwind_info_once ".gnu.linkonce.c6xabi.extab."
165*fae548d3Szrj 
166*fae548d3Szrj #endif /* _ELF_TIC6X_H */
167