Lint found by Rich and gcc
[deliverable/binutils-gdb.git] / ld / ldlang.h
CommitLineData
2fa0b342 1/* ldlang.h -
c611e285 2
2fa0b342 3 Copyright (C) 1991 Free Software Foundation, Inc.
c611e285 4
2fa0b342 5 This file is part of GLD, the Gnu Linker.
c611e285 6
2fa0b342
DHW
7 GLD 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 1, or (at your option)
10 any later version.
c611e285 11
2fa0b342
DHW
12 GLD 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.
c611e285 16
2fa0b342
DHW
17 You should have received a copy of the GNU General Public License
18 along with GLD; see the file COPYING. If not, write to
19 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
20
21
22typedef enum {
23 lang_input_file_is_l_enum,
24 lang_input_file_is_symbols_only_enum,
25 lang_input_file_is_marker_enum,
26 lang_input_file_is_fake_enum,
c611e285 27 lang_input_file_is_search_file_enum,
2fa0b342
DHW
28 lang_input_file_is_file_enum } lang_input_file_enum_type;
29
30typedef unsigned short fill_type;
31typedef struct statement_list {
32 union lang_statement_union *head;
33 union lang_statement_union **tail;
34} lang_statement_list_type;
35
36
c611e285 37
2fa0b342
DHW
38
39typedef struct memory_region_struct {
40 char *name;
41 struct memory_region_struct *next;
42 bfd_vma origin;
43 bfd_offset length;
44 bfd_vma current;
c611e285 45 int flags;
1bd1fa2d
SC
46 boolean had_full_message;
47
2fa0b342
DHW
48} lang_memory_region_type ;
49
50typedef struct lang_statement_header_struct
c611e285
SC
51 {
52 union lang_statement_union *next;
53 enum statement_enum {
54 lang_output_section_statement_enum,
55 lang_assignment_statement_enum,
56 lang_input_statement_enum,
57 lang_address_statement_enum,
58 lang_wild_statement_enum,
59 lang_input_section_enum,
60 lang_object_symbols_statement_enum,
61 lang_fill_statement_enum,
62 lang_data_statement_enum,
63 lang_target_statement_enum,
64 lang_output_statement_enum,
65 lang_padding_statement_enum,
66
67 lang_afile_asection_pair_statement_enum,
68 lang_constructors_statement_enum
69 } type;
70
71 } lang_statement_header_type;
2fa0b342
DHW
72
73
74typedef struct
c611e285
SC
75 {
76 lang_statement_header_type header;
77 union etree_union *exp;
78 } lang_assignment_statement_type;
2fa0b342
DHW
79
80
81typedef struct lang_target_statement_struct {
82 lang_statement_header_type header;
1418c83b 83 CONST char *target;
2fa0b342
DHW
84} lang_target_statement_type;
85
86
87typedef struct lang_output_statement_struct {
88 lang_statement_header_type header;
1418c83b 89 CONST char *name;
2fa0b342
DHW
90} lang_output_statement_type;
91
92
93typedef struct lang_output_section_statement_struct
c611e285
SC
94 {
95 lang_statement_header_type header;
96 union etree_union *addr_tree;
97 lang_statement_list_type children;
98 CONST char *memspec;
99 union lang_statement_union *next;
100 CONST char *name;
101 unsigned long subsection_alignment;
102 boolean processed;
103
104 asection *bfd_section;
105 int flags;
106 struct memory_region_struct *region;
107 size_t block_value;
108 fill_type fill;
109 } lang_output_section_statement_type;
2fa0b342
DHW
110
111
112typedef struct {
113 lang_statement_header_type header;
114} lang_common_statement_type;
115
116typedef struct {
117 lang_statement_header_type header;
118} lang_object_symbols_statement_type;
119
120typedef struct {
121 lang_statement_header_type header;
1418c83b 122 fill_type fill;
2fa0b342
DHW
123} lang_fill_statement_type;
124
125typedef struct {
126 lang_statement_header_type header;
127 unsigned int type;
128 union etree_union *exp;
129 bfd_vma value;
130 asection *output_section;
131 bfd_vma output_vma;
132} lang_data_statement_type;
133
134
135
136
137typedef struct lang_input_statement_struct
138 {
139 lang_statement_header_type header;
140 /* Name of this file. */
1418c83b 141 CONST char *filename;
2fa0b342
DHW
142 /* Name to use for the symbol giving address of text start */
143 /* Usually the same as filename, but for a file spec'd with -l
144 this is the -l switch itself rather than the filename. */
1418c83b 145 CONST char *local_sym_name;
c611e285 146
2fa0b342 147 bfd *the_bfd;
c611e285 148
2fa0b342
DHW
149 boolean closed;
150 file_ptr passive_position;
c611e285 151
2fa0b342
DHW
152 /* Symbol table of the file. */
153 asymbol **asymbols;
154 unsigned int symbol_count;
c611e285 155
2fa0b342 156 /* For library members only */
c611e285 157
2fa0b342
DHW
158 /* For a library, points to chain of entries for the library members. */
159 struct lang_input_statement_struct *subfiles;
160 /* For a library member, offset of the member within the archive.
161 Zero for files that are not library members. */
162 /* int starting_offset;*/
163 /* Size of contents of this file, if library member. */
c611e285 164 bfd_size_type total_size;
2fa0b342
DHW
165 /* For library member, points to the library's own entry. */
166 struct lang_input_statement_struct *superfile;
167 /* For library member, points to next entry for next member. */
168 struct lang_input_statement_struct *chain;
1418c83b
SC
169 /* Point to the next file - whatever it is, wanders up and down
170 archives */
c611e285 171
2fa0b342
DHW
172 union lang_statement_union *next;
173 /* Point to the next file, but skips archive contents */
174 union lang_statement_union *next_real_file;
c611e285 175
2fa0b342 176 boolean is_archive;
c611e285 177
2fa0b342
DHW
178 /* 1 means search a set of directories for this file. */
179 boolean search_dirs_flag;
c611e285 180
2fa0b342
DHW
181 /* 1 means this is base file of incremental load.
182 Do not load this file's text or data.
183 Also default text_start to after this file's bss. */
c611e285 184
2fa0b342 185 boolean just_syms_flag;
c611e285 186
2fa0b342 187 boolean loaded;
c611e285
SC
188
189
2fa0b342 190 /* unsigned int globals_in_this_file;*/
1418c83b 191 CONST char *target;
2fa0b342 192 boolean real;
c611e285 193
2fa0b342
DHW
194 asection *common_section;
195 asection *common_output_section;
196 } lang_input_statement_type;
197
198typedef struct {
199 lang_statement_header_type header;
200 asection *section;
201 lang_input_statement_type *ifile;
c611e285 202
2fa0b342
DHW
203} lang_input_section_type;
204
205
206typedef struct {
207 lang_statement_header_type header;
208 asection *section;
209 union lang_statement_union *file;
210} lang_afile_asection_pair_statement_type;
211
212typedef struct lang_wild_statement_struct {
213 lang_statement_header_type header;
c611e285
SC
214 CONST char *section_name;
215 CONST char *filename;
2fa0b342
DHW
216 lang_statement_list_type children;
217} lang_wild_statement_type;
218
219typedef struct lang_address_statement_struct {
220 lang_statement_header_type header;
1418c83b 221 CONST char *section_name;
2fa0b342
DHW
222 union etree_union *address;
223} lang_address_statement_type;
224
225typedef struct {
226 lang_statement_header_type header;
227 bfd_vma output_offset;
228 size_t size;
229 asection *output_section;
230 fill_type fill;
231} lang_padding_statement_type;
232
233typedef union lang_statement_union
c611e285
SC
234 {
235 lang_statement_header_type header;
236 union lang_statement_union *next;
237 lang_wild_statement_type wild_statement;
238 lang_data_statement_type data_statement;
239 lang_address_statement_type address_statement;
240 lang_output_section_statement_type output_section_statement;
241 lang_afile_asection_pair_statement_type afile_asection_pair_statement;
242 lang_assignment_statement_type assignment_statement;
243 lang_input_statement_type input_statement;
244 lang_target_statement_type target_statement;
245 lang_output_statement_type output_statement;
246 lang_input_section_type input_section;
247 lang_common_statement_type common_statement;
248 lang_object_symbols_statement_type object_symbols_statement;
249 lang_fill_statement_type fill_statement;
250 lang_padding_statement_type padding_statement;
251 } lang_statement_union_type;
2fa0b342
DHW
252
253
254
255PROTO(void,lang_init,(void));
1418c83b
SC
256PROTO(struct memory_region_struct ,
257 *lang_memory_region_lookup,(CONST
258 char *CONST));
2fa0b342 259
1418c83b 260
1bd1fa2d 261PROTO(void ,lang_map,(void));
c611e285 262PROTO(void,lang_set_flags,(int *, CONST char *));
1418c83b 263PROTO(void,lang_add_output,(CONST char *));
2fa0b342
DHW
264
265PROTO(void,lang_final,(void));
b6316534 266PROTO(struct symbol_cache_entry *,create_symbol,(CONST char *, unsigned int, struct sec *));
2fa0b342 267PROTO(void ,lang_process,(void));
1418c83b
SC
268PROTO(void ,lang_section_start,(CONST char *, union etree_union *));
269PROTO(void,lang_add_entry,(CONST char *));
270PROTO(void,lang_add_target,(CONST char *));
271PROTO(void,lang_add_wild,(CONST char *CONST , CONST char *CONST));
272PROTO(void,lang_add_map,(CONST char *));
2fa0b342
DHW
273PROTO(void,lang_add_fill,(int));
274PROTO(void,lang_add_assignment,(union etree_union *));
275PROTO(void,lang_add_attribute,(enum statement_enum));
1418c83b 276PROTO(void,lang_startup,(CONST char *));
c611e285 277PROTO(void,lang_float,(enum bfd_boolean));
1418c83b
SC
278PROTO(void,lang_leave_output_section_statement,(bfd_vma, CONST char *));
279PROTO(void,lang_abs_symbol_at_end_of,(CONST char *, CONST char *));
280PROTO(void,lang_abs_symbol_at_beginning_of,(CONST char *, CONST char *));
2fa0b342
DHW
281PROTO(void,lang_statement_append,(struct statement_list *, union lang_statement_union *, union lang_statement_union **));
282PROTO(void, lang_for_each_file,(void (*dothis)(lang_input_statement_type *)));
283
c611e285 284
2fa0b342
DHW
285#define LANG_FOR_EACH_INPUT_STATEMENT(statement) \
286 extern lang_statement_list_type file_chain; \
287 lang_input_statement_type *statement; \
288 for (statement = (lang_input_statement_type *)file_chain.head;\
289 statement != (lang_input_statement_type *)NULL; \
290 statement = (lang_input_statement_type *)statement->next)\
c611e285 291
2fa0b342 292#define LANG_FOR_EACH_INPUT_SECTION(statement, abfd, section, x) \
c611e285
SC
293 { extern lang_statement_list_type file_chain; \
294 lang_input_statement_type *statement; \
295 for (statement = (lang_input_statement_type *)file_chain.head;\
296 statement != (lang_input_statement_type *)NULL; \
297 statement = (lang_input_statement_type *)statement->next)\
298 { \
299 asection *section; \
300 bfd *abfd = statement->the_bfd; \
2fa0b342
DHW
301 for (section = abfd->sections; \
302 section != (asection *)NULL; \
303 section = section->next) { \
c611e285
SC
304 x; \
305 } \
306 } \
2fa0b342
DHW
307 }
308
309#define LANG_FOR_EACH_OUTPUT_SECTION(section, x) \
c611e285
SC
310 { extern bfd *output_bfd; \
311 asection *section; \
312 for (section = output_bfd->sections; \
313 section != (asection *)NULL; \
314 section = section->next) \
315 { x; } \
316 }
317
2fa0b342
DHW
318
319PROTO(void, lang_process,(void));
320PROTO(void, ldlang_add_file,(lang_input_statement_type *));
321
1418c83b
SC
322PROTO(lang_output_section_statement_type
323 *,lang_output_section_find,(CONST char * CONST));
2fa0b342
DHW
324
325PROTO(lang_input_statement_type *,
1bd1fa2d 326 lang_add_input_file,(CONST char *name,
c611e285 327 lang_input_file_enum_type file_type,
1bd1fa2d 328 CONST char *target));
2fa0b342 329PROTO(lang_output_section_statement_type *,
c611e285 330 lang_output_section_statement_lookup,(CONST char * CONST name));
1418c83b
SC
331
332PROTO(void, ldlang_add_undef,(CONST char *CONST name));
a37cc0c0 333PROTO(void, lang_add_output_format,(CONST char *));
c611e285
SC
334
335
336void EXFUN(lang_list_init,( lang_statement_list_type*));
337
338void EXFUN(lang_add_data,(int type, union etree_union *));
1bd1fa2d
SC
339
340void EXFUN(lang_for_each_statement,(void (*func)()));
341
This page took 0.058086 seconds and 4 git commands to generate.