Subversion Repositories Kolibri OS

Rev

Rev 5191 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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