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 |
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 */ |