summaryrefslogtreecommitdiff
path: root/include/elf/tic6x.h
blob: d800097216979a87e8928bba3278646526af7ed4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/* TI C6X ELF support for BFD.
   Copyright (C) 2010-2015 Free Software Foundation, Inc.

   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_TIC6X_H
#define _ELF_TIC6X_H

#include "elf/reloc-macros.h"

/* Relocation types.  */
START_RELOC_NUMBERS (elf_tic6x_reloc_type)
  RELOC_NUMBER (R_C6000_NONE, 0)
  RELOC_NUMBER (R_C6000_ABS32, 1)
  RELOC_NUMBER (R_C6000_ABS16, 2)
  RELOC_NUMBER (R_C6000_ABS8, 3)
  RELOC_NUMBER (R_C6000_PCR_S21, 4)
  RELOC_NUMBER (R_C6000_PCR_S12, 5)
  RELOC_NUMBER (R_C6000_PCR_S10, 6)
  RELOC_NUMBER (R_C6000_PCR_S7, 7)
  RELOC_NUMBER (R_C6000_ABS_S16, 8)
  RELOC_NUMBER (R_C6000_ABS_L16, 9)
  RELOC_NUMBER (R_C6000_ABS_H16, 10)
  RELOC_NUMBER (R_C6000_SBR_U15_B, 11)
  RELOC_NUMBER (R_C6000_SBR_U15_H, 12)
  RELOC_NUMBER (R_C6000_SBR_U15_W, 13)
  RELOC_NUMBER (R_C6000_SBR_S16, 14)
  RELOC_NUMBER (R_C6000_SBR_L16_B, 15)
  RELOC_NUMBER (R_C6000_SBR_L16_H, 16)
  RELOC_NUMBER (R_C6000_SBR_L16_W, 17)
  RELOC_NUMBER (R_C6000_SBR_H16_B, 18)
  RELOC_NUMBER (R_C6000_SBR_H16_H, 19)
  RELOC_NUMBER (R_C6000_SBR_H16_W, 20)
  RELOC_NUMBER (R_C6000_SBR_GOT_U15_W, 21)
  RELOC_NUMBER (R_C6000_SBR_GOT_L16_W, 22)
  RELOC_NUMBER (R_C6000_SBR_GOT_H16_W, 23)
  RELOC_NUMBER (R_C6000_DSBT_INDEX, 24)
  RELOC_NUMBER (R_C6000_PREL31, 25)
  RELOC_NUMBER (R_C6000_COPY, 26)
  RELOC_NUMBER (R_C6000_JUMP_SLOT, 27)
  RELOC_NUMBER (R_C6000_EHTYPE, 28)
  RELOC_NUMBER (R_C6000_PCR_H16, 29)
  RELOC_NUMBER (R_C6000_PCR_L16, 30)
  RELOC_NUMBER (R_C6000_ALIGN, 253)
  RELOC_NUMBER (R_C6000_FPHEAD, 254)
  RELOC_NUMBER (R_C6000_NOCMP, 255)
END_RELOC_NUMBERS (R_TIC6X_max)

/* Processor-specific flags.  */

/* File contains static relocation information.  */
#define EF_C6000_REL		0x1

/* Processor-specific section types.  */

/* Unwind function table for stack unwinding.  */
#define SHT_C6000_UNWIND	0x70000001

/* DLL dynamic linking pre-emption map.  */
#define SHT_C6000_PREEMPTMAP	0x70000002

/* Object file compatibility attributes.  */
#define SHT_C6000_ATTRIBUTES	0x70000003

/* Intermediate code for link-time optimization.  */
#define SHT_TI_ICODE		0x7F000000

/* Symbolic cross reference information.  */
#define SHT_TI_XREF		0x7F000001

/* Reserved.  */
#define SHT_TI_HANDLER		0x7F000002

/* Compressed data for initializing C variables.  */
#define SHT_TI_INITINFO		0x7F000003

/* Extended program header attributes.  */
#define SHT_TI_PHATTRS		0x7F000004

/* Processor specific section indices.  These sections do not actually
   exist.  Symbols with a st_shndx field corresponding to one of these
   values have a special meaning.  */

/* Small data area common symbol.  */
#define SHN_TIC6X_SCOMMON	SHN_LORESERVE

/* Processor-specific segment types.  */

/* Extended Segment Attributes.  */
#define PT_C6000_PHATTR		0x70000000

/* Processor-specific dynamic tags.  */

/* Undocumented.  */
#define DT_C6000_GSYM_OFFSET	0x6000000D

/* Undocumented.  */
#define DT_C6000_GSTR_OFFSET	0x6000000F

/* Statically linked base address of data segment.  */
#define DT_C6000_DSBT_BASE	0x70000000

/* Number of entries in this module's DSBT.  */
#define DT_C6000_DSBT_SIZE	0x70000001

/* Undocumented.  */
#define DT_C6000_PREEMPTMAP	0x70000002

/* The hard-coded DSBT index for this module, if any.  */
#define DT_C6000_DSBT_INDEX	0x70000003

/* Extended program header attributes.  */

/* Terminate a segment.  */
#define PHA_NULL		0x0

/* Segment's address bound to the final address.  */
#define PHA_BOUND		0x1

/* Segment cannot be further relocated.  */
#define PHA_READONLY		0x2

/* Build attributes.  */
enum
  {
#define TAG(tag, value) tag = value,
#include "elf/tic6x-attrs.h"
#undef TAG
    Tag_C6XABI_last
  };

/* Values for Tag_ISA.  GNU-specific names; the ABI does not specify
   names for these values.  */
enum
  {
    C6XABI_Tag_ISA_none = 0,
    C6XABI_Tag_ISA_C62X = 1,
    C6XABI_Tag_ISA_C67X = 3,
    C6XABI_Tag_ISA_C67XP = 4,
    C6XABI_Tag_ISA_C64X = 6,
    C6XABI_Tag_ISA_C64XP = 7,
    C6XABI_Tag_ISA_C674X = 8
  };

/* Special section names.  */
#define ELF_STRING_C6000_unwind           ".c6xabi.exidx"
#define ELF_STRING_C6000_unwind_info      ".c6xabi.extab"
#define ELF_STRING_C6000_unwind_once      ".gnu.linkonce.c6xabi.exidx."
#define ELF_STRING_C6000_unwind_info_once ".gnu.linkonce.c6xabi.extab."

#endif /* _ELF_TIC6X_H */