Subversion Repositories Kolibri OS

Rev

Rev 5191 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5191 serge 1
/* SOM internal definitions for BFD.
6324 serge 2
   Copyright (C) 2010-2015 Free Software Foundation, Inc.
5191 serge 3
   Contributed by Tristan Gingold , AdaCore.
4
 
5
   This file is part of BFD, the Binary File Descriptor library.
6
 
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
9
   the Free Software Foundation; either version 3 of the License, or
10
   (at your option) any later version.
11
 
12
   This program is distributed in the hope that it will be useful,
13
   but WITHOUT ANY WARRANTY; without even the implied warranty of
14
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
   GNU General Public License for more details.
16
 
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,
19
   Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
20
 
21
#ifndef _SOM_INTERNAL_H
22
#define _SOM_INTERNAL_H
23
 
24
struct som_clock
25
{
26
  unsigned int secs;
27
  unsigned int nanosecs;
28
};
29
 
30
struct som_header
31
{
32
  unsigned short system_id;
33
  unsigned short a_magic;
34
  unsigned int version_id;
35
  struct som_clock file_time;
36
  unsigned int entry_space;
37
  unsigned int entry_subspace;
38
  unsigned int entry_offset;
39
  unsigned int aux_header_location;
40
  unsigned int aux_header_size;
41
  unsigned int som_length;
42
  unsigned int presumed_dp;
43
  unsigned int space_location;
44
  unsigned int space_total;
45
  unsigned int subspace_location;
46
  unsigned int subspace_total;
47
  unsigned int loader_fixup_location;
48
  unsigned int loader_fixup_total;
49
  unsigned int space_strings_location;
50
  unsigned int space_strings_size;
51
  unsigned int init_array_location;
52
  unsigned int init_array_total;
53
  unsigned int compiler_location;
54
  unsigned int compiler_total;
55
  unsigned int symbol_location;
56
  unsigned int symbol_total;
57
  unsigned int fixup_request_location;
58
  unsigned int fixup_request_total;
59
  unsigned int symbol_strings_location;
60
  unsigned int symbol_strings_size;
61
  unsigned int unloadable_sp_location;
62
  unsigned int unloadable_sp_size;
63
  unsigned int checksum;
64
};
65
 
66
struct som_aux_id
67
{
68
  unsigned int mandatory : 1;
69
  unsigned int copy : 1;
70
  unsigned int append : 1;
71
  unsigned int ignore : 1;
72
  unsigned int reserved : 12;
73
 
74
  /* Header type.  */
75
  unsigned int type : 16;
76
 
77
  /* Length of the header in bytes, without the two word identifier.  */
78
  unsigned int length;
79
};
80
 
81
/* Generic auxiliary string header.  */
82
struct som_string_auxhdr
83
{
84
  struct som_aux_id header_id;
85
 
86
  /* Length of the string, without the NUL.  */
87
  unsigned int string_length;
88
 
89
  /* The string.  */
90
  char string[1];
91
};
92
 
93
struct som_name_pt
94
{
95
  char *name;
96
  unsigned int strx;
97
};
98
 
99
struct som_compilation_unit
100
{
101
  /* Source file that produced the SOM.  */
102
  struct som_name_pt name;
103
 
104
  /* Name of the language used when creating this SOM.  */
105
  struct som_name_pt language_name;
106
 
107
  /* Identificaton of the compiler.  */
108
  struct som_name_pt product_id;
109
 
110
  /* Version id of the compiler.  */
111
  struct som_name_pt version_id;
112
 
113
  unsigned int flags;
114
  struct som_clock compile_time;
115
  struct som_clock source_time;
116
};
117
 
118
struct som_exec_auxhdr
119
{
120
  struct som_aux_id som_auxhdr;
121
 
122
  long exec_tsize;
123
  long exec_tmem;
124
  long exec_tfile;
125
  long exec_dsize;
126
  long exec_dmem;
127
  long exec_dfile;
128
  long exec_bsize;
129
  long exec_entry;
130
  long exec_flags;
131
  long exec_bfill;
132
};
133
 
134
struct som_space_dictionary_record
135
{
136
  unsigned int name;
137
  unsigned int is_loadable : 1;
138
  unsigned int is_defined : 1;
139
  unsigned int is_private : 1;
140
  unsigned int has_intermediate_code : 1;
141
  unsigned int is_tspecific : 1;
142
  unsigned int reserved : 11;
143
  unsigned int sort_key : 8;
144
  unsigned int reserved2 : 8;
145
  int space_number;
146
  int subspace_index;
147
  unsigned int subspace_quantity;
148
  int loader_fix_index;
149
  unsigned int loader_fix_quantity;
150
  int init_pointer_index;
151
  unsigned int init_pointer_quantity;
152
};
153
 
154
struct som_subspace_dictionary_record
155
{
156
  int space_index;
157
  unsigned int access_control_bits : 7;
158
  unsigned int memory_resident : 1;
159
  unsigned int dup_common : 1;
160
  unsigned int is_common : 1;
161
  unsigned int is_loadable : 1;
162
  unsigned int quadrant : 2;
163
  unsigned int initially_frozen : 1;
164
  unsigned int is_first : 1;
165
  unsigned int code_only : 1;
166
  unsigned int sort_key : 8;
167
  unsigned int replicate_init : 1;
168
  unsigned int continuation : 1;
169
  unsigned int is_tspecific : 1;
170
  unsigned int is_comdat : 1;
171
  unsigned int reserved : 4;
172
  int file_loc_init_value;
173
  unsigned int initialization_length;
174
  unsigned int subspace_start;
175
  unsigned int subspace_length;
176
  unsigned int reserved2 : 5;
177
  unsigned int alignment : 27;
178
  unsigned int name;
179
  int fixup_request_index;
180
  unsigned int fixup_request_quantity;
181
};
182
 
183
struct som_lst_header
184
{
185
  unsigned short system_id;
186
  unsigned short a_magic;
187
  unsigned int version_id;
188
  struct som_clock file_time;
189
  unsigned int hash_loc;
190
  unsigned int hash_size;
191
  unsigned int module_count;
192
  unsigned int module_limit;
193
  unsigned int dir_loc;
194
  unsigned int export_loc;
195
  unsigned int export_count;
196
  unsigned int import_loc;
197
  unsigned int aux_loc;
198
  unsigned int aux_size;
199
  unsigned int string_loc;
200
  unsigned int string_size;
201
  unsigned int free_list;
202
  unsigned int file_end;
203
  unsigned int checksum;
204
};
205
 
206
#endif /* _SOM_INTERNAL_H */