1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23: #ifndef LD_H
24: #define LD_H
25:
26: #ifdef HAVE_LOCALE_H
27: #endif
28: #ifndef SEEK_CUR
29: #define SEEK_CUR 1
30: #endif
31: #ifndef SEEK_END
32: #define SEEK_END 2
33: #endif
34:
35: #if defined(__GNUC__) && !defined(C_ALLOCA)
36: # undef alloca
37: # define alloca __builtin_alloca
38: #else
39: # if defined(HAVE_ALLOCA_H) && !defined(C_ALLOCA)
40: # include <alloca.h>
41: # else
42: # ifndef alloca
43: # if !defined (__STDC__) && !defined (__hpux)
44: char *alloca ();
45: # else
46: void *alloca ();
47: # endif
48: # endif
49: # endif
50: #endif
51:
52:
53: #ifdef HAVE_LOCALE_H
54: # ifndef ENABLE_NLS
55:
56:
57:
58:
59:
60: # define _LIBINTL_H
61: # define _LIBGETTEXT_H
62: # endif
63: # include <locale.h>
64: #endif
65:
66: #ifdef ENABLE_NLS
67: # include <libintl.h>
68: # define _(String) gettext (String)
69: # ifdef gettext_noop
70: # define N_(String) gettext_noop (String)
71: # else
72: # define N_(String) (String)
73: # endif
74: #else
75: # define gettext(Msgid) (Msgid)
76: # define dgettext(Domainname, Msgid) (Msgid)
77: # define dcgettext(Domainname, Msgid, Category) (Msgid)
78: # define textdomain(Domainname) while (0)
79: # define bindtextdomain(Domainname, Dirname) while (0)
80: # define _(String) (String)
81: # define N_(String) (String)
82: #endif
83:
84:
85: #define EMULATION_ENVIRON "LDEMULATION"
86:
87:
88:
89: #define TARGET_ENVIRON "GNUTARGET"
90:
91:
92:
93: #define DISCARD_SECTION_NAME "/DISCARD/"
94:
95:
96: typedef struct name_list {
97: const char *name;
98: struct name_list *next;
99: }
100: name_list;
101:
102:
103:
104: typedef enum {
105: none, by_name, by_alignment, by_name_alignment, by_alignment_name
106: } sort_type;
107:
108: extern sort_type sort_section;
109:
110: struct wildcard_spec {
111: const char *name;
112: struct name_list *exclude_name_list;
113: sort_type sorted;
114: };
115:
116: struct wildcard_list {
117: struct wildcard_list *next;
118: struct wildcard_spec spec;
119: };
120:
121: struct map_symbol_def {
122: struct bfd_link_hash_entry *entry;
123: struct map_symbol_def *next;
124: };
125:
126:
127:
128: typedef struct fat_user_section_struct {
129:
130:
131: struct map_symbol_def *map_symbol_def_head;
132: struct map_symbol_def **map_symbol_def_tail;
133: } fat_section_userdata_type;
134:
135: #define get_userdata(x) ((x)->userdata)
136:
137: #define BYTE_SIZE (1)
138: #define SHORT_SIZE (2)
139: #define LONG_SIZE (4)
140: #define QUAD_SIZE (8)
141:
142: typedef struct {
143:
144: bfd_boolean force_common_definition;
145:
146:
147: bfd_boolean inhibit_common_definition;
148: bfd_boolean relax;
149:
150:
151:
152: bfd_boolean embedded_relocs;
153:
154:
155: bfd_boolean force_exe_suffix;
156:
157:
158: bfd_boolean cref;
159:
160:
161:
162: bfd_boolean warn_mismatch;
163:
164:
165:
166: bfd_boolean warn_search_mismatch;
167:
168:
169:
170:
171: bfd_boolean check_section_addresses;
172:
173:
174:
175:
176:
177: bfd_boolean accept_unknown_input_arch;
178:
179:
180: enum { ENDIAN_UNSET = 0, ENDIAN_BIG, ENDIAN_LITTLE } endian;
181:
182:
183: enum
184: {
185: symbolic_unset = 0,
186: symbolic,
187: symbolic_functions,
188: } symbolic;
189:
190:
191:
192: enum
193: {
194: dynamic_list_unset = 0,
195: dynamic_list_data,
196: dynamic_list
197: } dynamic_list;
198:
199:
200: char *interpreter;
201:
202:
203: char *soname;
204:
205:
206: char *rpath;
207:
208:
209:
210: char *rpath_link;
211:
212:
213:
214: char *filter_shlib;
215:
216:
217:
218: char **auxiliary_filters;
219:
220:
221:
222: char *version_exports_section;
223:
224:
225: char *default_script;
226: } args_type;
227:
228: extern args_type command_line;
229:
230: typedef int token_code_type;
231:
232: typedef struct {
233: bfd_boolean magic_demand_paged;
234: bfd_boolean make_executable;
235:
236:
237: bfd_boolean dynamic_link;
238:
239:
240:
241:
242:
243: bfd_boolean has_shared;
244:
245:
246: bfd_boolean build_constructors;
247:
248:
249: bfd_boolean warn_constructors;
250:
251:
252: bfd_boolean warn_common;
253:
254:
255: bfd_boolean warn_once;
256:
257:
258:
259: bfd_boolean warn_multiple_gp;
260:
261:
262:
263: bfd_boolean warn_section_align;
264:
265:
266: bfd_boolean fatal_warnings;
267:
268: bfd_boolean sort_common;
269:
270: bfd_boolean text_read_only;
271:
272: bfd_boolean stats;
273:
274:
275:
276: bfd_boolean unique_orphan_sections;
277:
278:
279:
280: bfd_boolean only_cmd_line_lib_dirs;
281:
282:
283: char rpath_separator;
284:
285: char *map_filename;
286: FILE *map_file;
287:
288: unsigned int split_by_reloc;
289: bfd_size_type split_by_file;
290:
291: bfd_size_type specified_data_size;
292:
293:
294: bfd_size_type hash_table_size;
295:
296:
297: bfd_vma maxpagesize;
298:
299:
300: bfd_vma commonpagesize;
301: } ld_config_type;
302:
303: extern ld_config_type config;
304:
305: extern FILE * saved_script_handle;
306: extern bfd_boolean force_make_executable;
307:
308:
309: extern int parsing_defsym;
310:
311: extern int yyparse (void);
312: extern void add_cref (const char *, bfd *, asection *, bfd_vma);
313: extern bfd_boolean handle_asneeded_cref (bfd *, enum notice_asneeded_action);
314: extern void output_cref (FILE *);
315: extern void check_nocrossrefs (void);
316: extern void ld_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
317:
318:
319: #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6)
320: #define __PRETTY_FUNCTION__ NULL
321: #endif
322:
323: #undef abort
324: #define abort() ld_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__)
325:
326: #endif