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
/* SOM a.out definitions for BFD.
1
/* SOM a.out definitions for BFD.
2
   Copyright 2010  Free Software Foundation, Inc.
2
   Copyright (C) 2010-2015 Free Software Foundation, Inc.
3
   Contributed by Tristan Gingold , AdaCore.
3
   Contributed by Tristan Gingold , AdaCore.
4
 
4
 
5
   This file is part of BFD, the Binary File Descriptor library.
5
   This file is part of BFD, the Binary File Descriptor library.
6
 
6
 
7
   This program is free software; you can redistribute it and/or modify
7
   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
8
   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
9
   the Free Software Foundation; either version 3 of the License, or
10
   (at your option) any later version.
10
   (at your option) any later version.
11
 
11
 
12
   This program is distributed in the hope that it will be useful,
12
   This program is distributed in the hope that it will be useful,
13
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13
   but WITHOUT ANY WARRANTY; without even the implied warranty of
14
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
   GNU General Public License for more details.
15
   GNU General Public License for more details.
16
 
16
 
17
   You should have received a copy of the GNU General Public License
17
   You should have received a copy of the GNU General Public License
18
   along with this program; if not, write to the Free Software Foundation,
18
   along with this program; if not, write to the Free Software Foundation,
19
   Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
19
   Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
20
 
20
 
21
#ifndef _SOM_AOUT_H
21
#ifndef _SOM_AOUT_H
22
#define _SOM_AOUT_H
22
#define _SOM_AOUT_H
23
 
23
 
24
#include "clock.h"
24
#include "clock.h"
25
 
25
 
26
/* Note: SOM uses bit-field in its structure.  All you need to know is:
26
/* Note: SOM uses bit-field in its structure.  All you need to know is:
27
   - CPUs supported by SOM (hppa) are big-endian,
27
   - CPUs supported by SOM (hppa) are big-endian,
28
   - the MSB is numbered 0.  */
28
   - the MSB is numbered 0.  */
29
 
29
 
30
struct som_external_header
30
struct som_external_header
31
{
31
{
32
  unsigned char system_id[2];
32
  unsigned char system_id[2];
33
  unsigned char a_magic[2];
33
  unsigned char a_magic[2];
34
  unsigned char version_id[4];
34
  unsigned char version_id[4];
35
  struct som_external_clock file_time;
35
  struct som_external_clock file_time;
36
  unsigned char entry_space[4];
36
  unsigned char entry_space[4];
37
  unsigned char entry_subspace[4];
37
  unsigned char entry_subspace[4];
38
  unsigned char entry_offset[4];
38
  unsigned char entry_offset[4];
39
  unsigned char aux_header_location[4];
39
  unsigned char aux_header_location[4];
40
  unsigned char aux_header_size[4];
40
  unsigned char aux_header_size[4];
41
  unsigned char som_length[4];
41
  unsigned char som_length[4];
42
  unsigned char presumed_dp[4];
42
  unsigned char presumed_dp[4];
43
  unsigned char space_location[4];
43
  unsigned char space_location[4];
44
  unsigned char space_total[4];
44
  unsigned char space_total[4];
45
  unsigned char subspace_location[4];
45
  unsigned char subspace_location[4];
46
  unsigned char subspace_total[4];
46
  unsigned char subspace_total[4];
47
  unsigned char loader_fixup_location[4];
47
  unsigned char loader_fixup_location[4];
48
  unsigned char loader_fixup_total[4];
48
  unsigned char loader_fixup_total[4];
49
  unsigned char space_strings_location[4];
49
  unsigned char space_strings_location[4];
50
  unsigned char space_strings_size[4];
50
  unsigned char space_strings_size[4];
51
  unsigned char init_array_location[4];
51
  unsigned char init_array_location[4];
52
  unsigned char init_array_total[4];
52
  unsigned char init_array_total[4];
53
  unsigned char compiler_location[4];
53
  unsigned char compiler_location[4];
54
  unsigned char compiler_total[4];
54
  unsigned char compiler_total[4];
55
  unsigned char symbol_location[4];
55
  unsigned char symbol_location[4];
56
  unsigned char symbol_total[4];
56
  unsigned char symbol_total[4];
57
  unsigned char fixup_request_location[4];
57
  unsigned char fixup_request_location[4];
58
  unsigned char fixup_request_total[4];
58
  unsigned char fixup_request_total[4];
59
  unsigned char symbol_strings_location[4];
59
  unsigned char symbol_strings_location[4];
60
  unsigned char symbol_strings_size[4];
60
  unsigned char symbol_strings_size[4];
61
  unsigned char unloadable_sp_location[4];
61
  unsigned char unloadable_sp_location[4];
62
  unsigned char unloadable_sp_size[4];
62
  unsigned char unloadable_sp_size[4];
63
  unsigned char checksum[4];
63
  unsigned char checksum[4];
64
};
64
};
65
 
65
 
66
#define OLD_VERSION_ID 85082112
66
#define OLD_VERSION_ID 85082112
67
#define NEW_VERSION_ID 87102412
67
#define NEW_VERSION_ID 87102412
68
 
68
 
69
#define EXECLIBMAGIC	0x0104
69
#define EXECLIBMAGIC	0x0104
70
#define RELOC_MAGIC	0x0106
70
#define RELOC_MAGIC	0x0106
71
#define EXEC_MAGIC	0x0107
71
#define EXEC_MAGIC	0x0107
72
#define SHARE_MAGIC	0x0108
72
#define SHARE_MAGIC	0x0108
73
#define SHMEM_MAGIC	0x0109
73
#define SHMEM_MAGIC	0x0109
74
#define DEMAND_MAGIC	0x010b
74
#define DEMAND_MAGIC	0x010b
75
#define DL_MAGIC	0x010d
75
#define DL_MAGIC	0x010d
76
#define SHL_MAGIC	0x010e
76
#define SHL_MAGIC	0x010e
77
 
77
 
78
struct som_external_aux_id
78
struct som_external_aux_id
79
{
79
{
80
  unsigned char flags[4];
80
  unsigned char flags[4];
81
  unsigned char length[4];
81
  unsigned char length[4];
82
};
82
};
83
 
83
 
84
/* Aux id types.  */
84
/* Aux id types.  */
85
#define VERSION_AUX_ID 6
85
#define VERSION_AUX_ID 6
86
#define COPYRIGHT_AUX_ID 9
86
#define COPYRIGHT_AUX_ID 9
87
 
87
 
88
/* Aux id flags.  */
88
/* Aux id flags.  */
89
#define SOM_AUX_ID_MANDATORY	(1 << 31)
89
#define SOM_AUX_ID_MANDATORY	(1 << 31)
90
#define SOM_AUX_ID_COPY		(1 << 30)
90
#define SOM_AUX_ID_COPY		(1 << 30)
91
#define SOM_AUX_ID_APPEND	(1 << 29)
91
#define SOM_AUX_ID_APPEND	(1 << 29)
92
#define SOM_AUX_ID_IGNORE	(1 << 28)
92
#define SOM_AUX_ID_IGNORE	(1 << 28)
93
#define SOM_AUX_ID_TYPE_SH	0
93
#define SOM_AUX_ID_TYPE_SH	0
94
#define SOM_AUX_ID_TYPE_MASK	0xffff
94
#define SOM_AUX_ID_TYPE_MASK	0xffff
95
 
95
 
96
struct som_external_string_auxhdr
96
struct som_external_string_auxhdr
97
{
97
{
98
  struct som_external_aux_id header_id;
98
  struct som_external_aux_id header_id;
99
 
99
 
100
  /* Length of the string, without the NUL.  */
100
  /* Length of the string, without the NUL.  */
101
  unsigned char string_length[4];
101
  unsigned char string_length[4];
102
 
102
 
103
  /* The string.  */
103
  /* The string.  */
104
};
104
};
105
 
105
 
106
struct som_external_exec_auxhdr
106
struct som_external_exec_auxhdr
107
{
107
{
108
  struct som_external_aux_id som_auxhdr;
108
  struct som_external_aux_id som_auxhdr;
109
 
109
 
110
  unsigned char exec_tsize[4];
110
  unsigned char exec_tsize[4];
111
  unsigned char exec_tmem[4];
111
  unsigned char exec_tmem[4];
112
  unsigned char exec_tfile[4];
112
  unsigned char exec_tfile[4];
113
  unsigned char exec_dsize[4];
113
  unsigned char exec_dsize[4];
114
  unsigned char exec_dmem[4];
114
  unsigned char exec_dmem[4];
115
  unsigned char exec_dfile[4];
115
  unsigned char exec_dfile[4];
116
  unsigned char exec_bsize[4];
116
  unsigned char exec_bsize[4];
117
  unsigned char exec_entry[4];
117
  unsigned char exec_entry[4];
118
  unsigned char exec_flags[4];
118
  unsigned char exec_flags[4];
119
  unsigned char exec_bfill[4];
119
  unsigned char exec_bfill[4];
120
};
120
};
121
 
121
 
122
#define AUX_HDR_SIZE sizeof (struct som_external_exec_auxhdr)
122
#define AUX_HDR_SIZE sizeof (struct som_external_exec_auxhdr)
123
 
123
 
124
struct som_external_space_dictionary_record
124
struct som_external_space_dictionary_record
125
{
125
{
126
  unsigned char name[4];
126
  unsigned char name[4];
127
  unsigned char flags[4];
127
  unsigned char flags[4];
128
  unsigned char space_number[4];
128
  unsigned char space_number[4];
129
  unsigned char subspace_index[4];
129
  unsigned char subspace_index[4];
130
  unsigned char subspace_quantity[4];
130
  unsigned char subspace_quantity[4];
131
  unsigned char loader_fix_index[4];
131
  unsigned char loader_fix_index[4];
132
  unsigned char loader_fix_quantity[4];
132
  unsigned char loader_fix_quantity[4];
133
  unsigned char init_pointer_index[4];
133
  unsigned char init_pointer_index[4];
134
  unsigned char init_pointer_quantity[4];
134
  unsigned char init_pointer_quantity[4];
135
};
135
};
136
 
136
 
137
#define SOM_SPACE_IS_LOADABLE		(1 << 31)
137
#define SOM_SPACE_IS_LOADABLE		(1 << 31)
138
#define SOM_SPACE_IS_DEFINED		(1 << 30)
138
#define SOM_SPACE_IS_DEFINED		(1 << 30)
139
#define SOM_SPACE_IS_PRIVATE		(1 << 29)
139
#define SOM_SPACE_IS_PRIVATE		(1 << 29)
140
#define SOM_SPACE_HAS_INTERMEDIATE_CODE (1 << 28)
140
#define SOM_SPACE_HAS_INTERMEDIATE_CODE (1 << 28)
141
#define SOM_SPACE_IS_TSPECIFIC		(1 << 27)
141
#define SOM_SPACE_IS_TSPECIFIC		(1 << 27)
142
#define SOM_SPACE_SORT_KEY_SH		8
142
#define SOM_SPACE_SORT_KEY_SH		8
143
#define SOM_SPACE_SORT_KEY_MASK		0xff
143
#define SOM_SPACE_SORT_KEY_MASK		0xff
144
 
144
 
145
struct som_external_subspace_dictionary_record
145
struct som_external_subspace_dictionary_record
146
{
146
{
147
  unsigned char space_index[4];
147
  unsigned char space_index[4];
148
  unsigned char flags[4];
148
  unsigned char flags[4];
149
  unsigned char file_loc_init_value[4];
149
  unsigned char file_loc_init_value[4];
150
  unsigned char initialization_length[4];
150
  unsigned char initialization_length[4];
151
  unsigned char subspace_start[4];
151
  unsigned char subspace_start[4];
152
  unsigned char subspace_length[4];
152
  unsigned char subspace_length[4];
153
  unsigned char alignment[4];
153
  unsigned char alignment[4];
154
  unsigned char name[4];
154
  unsigned char name[4];
155
  unsigned char fixup_request_index[4];
155
  unsigned char fixup_request_index[4];
156
  unsigned char fixup_request_quantity[4];
156
  unsigned char fixup_request_quantity[4];
157
};
157
};
158
 
158
 
159
#define SOM_SUBSPACE_ACCESS_CONTROL_BITS_SH	25
159
#define SOM_SUBSPACE_ACCESS_CONTROL_BITS_SH	25
160
#define SOM_SUBSPACE_ACCESS_CONTROL_BITS_MASK	0x7f
160
#define SOM_SUBSPACE_ACCESS_CONTROL_BITS_MASK	0x7f
161
#define SOM_SUBSPACE_MEMORY_RESIDENT		(1 << 24)
161
#define SOM_SUBSPACE_MEMORY_RESIDENT		(1 << 24)
162
#define SOM_SUBSPACE_DUP_COMMON			(1 << 23)
162
#define SOM_SUBSPACE_DUP_COMMON			(1 << 23)
163
#define SOM_SUBSPACE_IS_COMMON			(1 << 22)
163
#define SOM_SUBSPACE_IS_COMMON			(1 << 22)
164
#define SOM_SUBSPACE_IS_LOADABLE		(1 << 21)
164
#define SOM_SUBSPACE_IS_LOADABLE		(1 << 21)
165
#define SOM_SUBSPACE_QUADRANT_SH		19
165
#define SOM_SUBSPACE_QUADRANT_SH		19
166
#define SOM_SUBSPACE_QUADRANT_MASK		0x3
166
#define SOM_SUBSPACE_QUADRANT_MASK		0x3
167
#define SOM_SUBSPACE_INITIALLY_FROZEN		(1 << 18)
167
#define SOM_SUBSPACE_INITIALLY_FROZEN		(1 << 18)
168
#define SOM_SUBSPACE_IS_FIRST			(1 << 17)
168
#define SOM_SUBSPACE_IS_FIRST			(1 << 17)
169
#define SOM_SUBSPACE_CODE_ONLY			(1 << 16)
169
#define SOM_SUBSPACE_CODE_ONLY			(1 << 16)
170
#define SOM_SUBSPACE_SORT_KEY_SH		8
170
#define SOM_SUBSPACE_SORT_KEY_SH		8
171
#define SOM_SUBSPACE_SORT_KEY_MASK		0xff
171
#define SOM_SUBSPACE_SORT_KEY_MASK		0xff
172
#define SOM_SUBSPACE_REPLICATE_INIT		(1 << 7)
172
#define SOM_SUBSPACE_REPLICATE_INIT		(1 << 7)
173
#define SOM_SUBSPACE_CONTINUATION		(1 << 6)
173
#define SOM_SUBSPACE_CONTINUATION		(1 << 6)
174
#define SOM_SUBSPACE_IS_TSPECIFIC		(1 << 5)
174
#define SOM_SUBSPACE_IS_TSPECIFIC		(1 << 5)
175
#define SOM_SUBSPACE_IS_COMDAT			(1 << 4)
175
#define SOM_SUBSPACE_IS_COMDAT			(1 << 4)
176
 
176
 
177
struct som_external_compilation_unit
177
struct som_external_compilation_unit
178
{
178
{
179
  unsigned char name[4];
179
  unsigned char name[4];
180
  unsigned char language_name[4];
180
  unsigned char language_name[4];
181
  unsigned char product_id[4];
181
  unsigned char product_id[4];
182
  unsigned char version_id[4];
182
  unsigned char version_id[4];
183
  unsigned char flags[4];
183
  unsigned char flags[4];
184
  struct som_external_clock compile_time;
184
  struct som_external_clock compile_time;
185
  struct som_external_clock source_time;
185
  struct som_external_clock source_time;
186
};
186
};
187
 
187
 
188
struct som_external_symbol_dictionary_record
188
struct som_external_symbol_dictionary_record
189
{
189
{
190
  unsigned char flags[4];
190
  unsigned char flags[4];
191
  unsigned char name[4];
191
  unsigned char name[4];
192
  unsigned char qualifier_name[4];
192
  unsigned char qualifier_name[4];
193
  unsigned char info[4];
193
  unsigned char info[4];
194
  unsigned char symbol_value[4];
194
  unsigned char symbol_value[4];
195
};
195
};
196
 
196
 
197
/* Flags fields.  */
197
/* Flags fields.  */
198
#define SOM_SYMBOL_HIDDEN (1 << 31)
198
#define SOM_SYMBOL_HIDDEN (1 << 31)
199
#define SOM_SYMBOL_SECONDARY_DEF (1 << 30)
199
#define SOM_SYMBOL_SECONDARY_DEF (1 << 30)
200
#define SOM_SYMBOL_TYPE_SH 24
200
#define SOM_SYMBOL_TYPE_SH 24
201
#define SOM_SYMBOL_TYPE_MASK 0x3f
201
#define SOM_SYMBOL_TYPE_MASK 0x3f
202
#define SOM_SYMBOL_SCOPE_SH 20
202
#define SOM_SYMBOL_SCOPE_SH 20
203
#define SOM_SYMBOL_SCOPE_MASK 0xf
203
#define SOM_SYMBOL_SCOPE_MASK 0xf
204
#define SOM_SYMBOL_CHECK_LEVEL_SH 17
204
#define SOM_SYMBOL_CHECK_LEVEL_SH 17
205
#define SOM_SYMBOL_CHECK_LEVEL_MASK 0x7
205
#define SOM_SYMBOL_CHECK_LEVEL_MASK 0x7
206
#define SOM_SYMBOL_MUST_QUALIFY (1 << 16)
206
#define SOM_SYMBOL_MUST_QUALIFY (1 << 16)
207
#define SOM_SYMBOL_INITIALLY_FROZEN (1 << 15)
207
#define SOM_SYMBOL_INITIALLY_FROZEN (1 << 15)
208
#define SOM_SYMBOL_MEMORY_RESIDENT (1 << 14)
208
#define SOM_SYMBOL_MEMORY_RESIDENT (1 << 14)
209
#define SOM_SYMBOL_IS_COMMON (1 << 13)
209
#define SOM_SYMBOL_IS_COMMON (1 << 13)
210
#define SOM_SYMBOL_DUP_COMMON (1 << 12)
210
#define SOM_SYMBOL_DUP_COMMON (1 << 12)
211
#define SOM_SYMBOL_XLEAST_SH 10
211
#define SOM_SYMBOL_XLEAST_SH 10
212
#define SOM_SYMBOL_XLEAT_MASK 0x3
212
#define SOM_SYMBOL_XLEAT_MASK 0x3
213
#define SOM_SYMBOL_ARG_RELOC_SH 0
213
#define SOM_SYMBOL_ARG_RELOC_SH 0
214
#define SOM_SYMBOL_ARG_RELOC_MASK 0x3ff
214
#define SOM_SYMBOL_ARG_RELOC_MASK 0x3ff
215
 
215
 
216
/* Info fields.  */
216
/* Info fields.  */
217
#define SOM_SYMBOL_HAS_LONG_RETURN (1 << 31)
217
#define SOM_SYMBOL_HAS_LONG_RETURN (1 << 31)
218
#define SOM_SYMBOL_NO_RELOCATION (1 << 30)
218
#define SOM_SYMBOL_NO_RELOCATION (1 << 30)
219
#define SOM_SYMBOL_IS_COMDAT (1 << 29)
219
#define SOM_SYMBOL_IS_COMDAT (1 << 29)
220
#define SOM_SYMBOL_SYMBOL_INFO_SH 0
220
#define SOM_SYMBOL_SYMBOL_INFO_SH 0
221
#define SOM_SYMBOL_SYMBOL_INFO_MASK 0xffffff
221
#define SOM_SYMBOL_SYMBOL_INFO_MASK 0xffffff
222
 
222
 
223
/* Symbol type definition.  */
223
/* Symbol type definition.  */
224
#define ST_NULL		0
224
#define ST_NULL		0
225
#define ST_ABSOLUTE	1
225
#define ST_ABSOLUTE	1
226
#define ST_DATA		2
226
#define ST_DATA		2
227
#define ST_CODE		3
227
#define ST_CODE		3
228
#define ST_PRI_PROG	4
228
#define ST_PRI_PROG	4
229
#define ST_SEC_PROG	5
229
#define ST_SEC_PROG	5
230
#define ST_ENTRY	6
230
#define ST_ENTRY	6
231
#define ST_STORAGE	7
231
#define ST_STORAGE	7
232
#define ST_STUB		8
232
#define ST_STUB		8
233
#define ST_MODULE	9
233
#define ST_MODULE	9
234
#define ST_SYM_EXT	10
234
#define ST_SYM_EXT	10
235
#define ST_ARG_EXT	11
235
#define ST_ARG_EXT	11
236
#define ST_MILLICODE	12
236
#define ST_MILLICODE	12
237
#define ST_PLABEL	13
237
#define ST_PLABEL	13
238
#define ST_OCT_DIS	14
238
#define ST_OCT_DIS	14
239
#define ST_MILLI_EXT	15
239
#define ST_MILLI_EXT	15
240
#define ST_TSTORAGE	16
240
#define ST_TSTORAGE	16
241
#define ST_COMDAT	17
241
#define ST_COMDAT	17
242
 
242
 
243
/* Symbol scope.  */
243
/* Symbol scope.  */
244
#define SS_UNSAT	0
244
#define SS_UNSAT	0
245
#define SS_EXTERNAL	1
245
#define SS_EXTERNAL	1
246
#define SS_LOCAL	2
246
#define SS_LOCAL	2
247
#define SS_UNIVERSAL	3
247
#define SS_UNIVERSAL	3
248
 
248
 
249
#endif /* _SOM_AOUT_H */
249
#endif /* _SOM_AOUT_H */