Deleted Added
full compact
bfdlink.h (89857) bfdlink.h (104834)
1/* bfdlink.h -- header file for BFD link routines
1/* bfdlink.h -- header file for BFD link routines
2 Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
2 Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002
3 Free Software Foundation, Inc.
4 Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support.
5
3 Free Software Foundation, Inc.
4 Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support.
5
6This file is part of BFD, the Binary File Descriptor library.
6 This file is part of BFD, the Binary File Descriptor library.
7
7
8This program is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2 of the License, or
11(at your option) any later version.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
17
18You should have received a copy of the GNU General Public License
19along with this program; if not, write to the Free Software
20Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
21
22#ifndef BFDLINK_H
23#define BFDLINK_H
24
25/* Which symbols to strip during a link. */
26enum bfd_link_strip
27{
28 strip_none, /* Don't strip any symbols. */

--- 149 unchanged lines hidden (view full) ---

178extern void bfd_link_hash_traverse
179 PARAMS ((struct bfd_link_hash_table *,
180 boolean (*) (struct bfd_link_hash_entry *, PTR),
181 PTR));
182
183/* Add an entry to the undefs list. */
184extern void bfd_link_add_undef
185 PARAMS ((struct bfd_link_hash_table *, struct bfd_link_hash_entry *));
21
22#ifndef BFDLINK_H
23#define BFDLINK_H
24
25/* Which symbols to strip during a link. */
26enum bfd_link_strip
27{
28 strip_none, /* Don't strip any symbols. */

--- 149 unchanged lines hidden (view full) ---

178extern void bfd_link_hash_traverse
179 PARAMS ((struct bfd_link_hash_table *,
180 boolean (*) (struct bfd_link_hash_entry *, PTR),
181 PTR));
182
183/* Add an entry to the undefs list. */
184extern void bfd_link_add_undef
185 PARAMS ((struct bfd_link_hash_table *, struct bfd_link_hash_entry *));
186
187struct bfd_sym_chain
188{
189 struct bfd_sym_chain *next;
190 const char *name;
191};
186
187/* This structure holds all the information needed to communicate
188 between BFD and the linker when doing a link. */
189
190struct bfd_link_info
191{
192 /* Function callbacks. */
193 const struct bfd_link_callbacks *callbacks;
192
193/* This structure holds all the information needed to communicate
194 between BFD and the linker when doing a link. */
195
196struct bfd_link_info
197{
198 /* Function callbacks. */
199 const struct bfd_link_callbacks *callbacks;
200
194 /* true if BFD should generate a relocateable object file. */
195 boolean relocateable;
201 /* true if BFD should generate a relocateable object file. */
202 boolean relocateable;
196 /* true if BFD should generate relocation information in the final executable. */
203
204 /* true if BFD should generate relocation information in the final
205 executable. */
197 boolean emitrelocations;
206 boolean emitrelocations;
207
198 /* true if BFD should generate a "task linked" object file,
208 /* true if BFD should generate a "task linked" object file,
199 similar to relocatable but also with globals converted to statics. */
209 similar to relocatable but also with globals converted to
210 statics. */
200 boolean task_link;
211 boolean task_link;
212
201 /* true if BFD should generate a shared object. */
202 boolean shared;
213 /* true if BFD should generate a shared object. */
214 boolean shared;
215
203 /* true if BFD should pre-bind symbols in a shared object. */
204 boolean symbolic;
216 /* true if BFD should pre-bind symbols in a shared object. */
217 boolean symbolic;
218
205 /* true if BFD should export all symbols in the dynamic symbol table
206 of an executable, rather than only those used. */
207 boolean export_dynamic;
219 /* true if BFD should export all symbols in the dynamic symbol table
220 of an executable, rather than only those used. */
221 boolean export_dynamic;
222
208 /* true if shared objects should be linked directly, not shared. */
209 boolean static_link;
223 /* true if shared objects should be linked directly, not shared. */
224 boolean static_link;
225
210 /* true if the output file should be in a traditional format. This
211 is equivalent to the setting of the BFD_TRADITIONAL_FORMAT flag
212 on the output file, but may be checked when reading the input
213 files. */
214 boolean traditional_format;
226 /* true if the output file should be in a traditional format. This
227 is equivalent to the setting of the BFD_TRADITIONAL_FORMAT flag
228 on the output file, but may be checked when reading the input
229 files. */
230 boolean traditional_format;
231
215 /* true if we want to produced optimized output files. This might
216 need much more time and therefore must be explicitly selected. */
217 boolean optimize;
232 /* true if we want to produced optimized output files. This might
233 need much more time and therefore must be explicitly selected. */
234 boolean optimize;
235
218 /* true if BFD should generate errors for undefined symbols
219 even if generating a shared object. */
220 boolean no_undefined;
236 /* true if BFD should generate errors for undefined symbols
237 even if generating a shared object. */
238 boolean no_undefined;
239
221 /* true if BFD should allow undefined symbols in shared objects even
222 when no_undefined is set to disallow undefined symbols. The net
223 result will be that undefined symbols in regular objects will
224 still trigger an error, but undefined symbols in shared objects
225 will be ignored. The implementation of no_undefined makes the
226 assumption that the runtime linker will choke on undefined
227 symbols. However there is at least one system (BeOS) where
228 undefined symbols in shared libraries is normal since the kernel
229 patches them at load time to select which function is most
230 appropriate for the current architecture. I.E. dynamically
231 select an appropriate memset function. Apparently it is also
232 normal for HPPA shared libraries to have undefined symbols. */
233 boolean allow_shlib_undefined;
240 /* true if BFD should allow undefined symbols in shared objects even
241 when no_undefined is set to disallow undefined symbols. The net
242 result will be that undefined symbols in regular objects will
243 still trigger an error, but undefined symbols in shared objects
244 will be ignored. The implementation of no_undefined makes the
245 assumption that the runtime linker will choke on undefined
246 symbols. However there is at least one system (BeOS) where
247 undefined symbols in shared libraries is normal since the kernel
248 patches them at load time to select which function is most
249 appropriate for the current architecture. I.E. dynamically
250 select an appropriate memset function. Apparently it is also
251 normal for HPPA shared libraries to have undefined symbols. */
252 boolean allow_shlib_undefined;
253
254 /* true if ok to have multiple definition. */
255 boolean allow_multiple_definition;
256
257 /* true if ok to have version with no definition. */
258 boolean allow_undefined_version;
259
234 /* Which symbols to strip. */
235 enum bfd_link_strip strip;
260 /* Which symbols to strip. */
261 enum bfd_link_strip strip;
262
236 /* Which local symbols to discard. */
237 enum bfd_link_discard discard;
263 /* Which local symbols to discard. */
264 enum bfd_link_discard discard;
265
238 /* true if symbols should be retained in memory, false if they
239 should be freed and reread. */
240 boolean keep_memory;
266 /* true if symbols should be retained in memory, false if they
267 should be freed and reread. */
268 boolean keep_memory;
269
241 /* The list of input BFD's involved in the link. These are chained
242 together via the link_next field. */
243 bfd *input_bfds;
270 /* The list of input BFD's involved in the link. These are chained
271 together via the link_next field. */
272 bfd *input_bfds;
273
244 /* If a symbol should be created for each input BFD, this is section
245 where those symbols should be placed. It must be a section in
246 the output BFD. It may be NULL, in which case no such symbols
247 will be created. This is to support CREATE_OBJECT_SYMBOLS in the
248 linker command language. */
249 asection *create_object_symbols_section;
274 /* If a symbol should be created for each input BFD, this is section
275 where those symbols should be placed. It must be a section in
276 the output BFD. It may be NULL, in which case no such symbols
277 will be created. This is to support CREATE_OBJECT_SYMBOLS in the
278 linker command language. */
279 asection *create_object_symbols_section;
280
281 /* List of global symbol names that are starting points for marking
282 sections against garbage collection. */
283 struct bfd_sym_chain *gc_sym_list;
284
250 /* Hash table handled by BFD. */
251 struct bfd_link_hash_table *hash;
285 /* Hash table handled by BFD. */
286 struct bfd_link_hash_table *hash;
287
252 /* Hash table of symbols to keep. This is NULL unless strip is
253 strip_some. */
254 struct bfd_hash_table *keep_hash;
288 /* Hash table of symbols to keep. This is NULL unless strip is
289 strip_some. */
290 struct bfd_hash_table *keep_hash;
291
255 /* true if every symbol should be reported back via the notice
256 callback. */
257 boolean notice_all;
292 /* true if every symbol should be reported back via the notice
293 callback. */
294 boolean notice_all;
295
258 /* Hash table of symbols to report back via the notice callback. If
259 this is NULL, and notice_all is false, then no symbols are
260 reported back. */
261 struct bfd_hash_table *notice_hash;
296 /* Hash table of symbols to report back via the notice callback. If
297 this is NULL, and notice_all is false, then no symbols are
298 reported back. */
299 struct bfd_hash_table *notice_hash;
300
262 /* Hash table of symbols which are being wrapped (the --wrap linker
263 option). If this is NULL, no symbols are being wrapped. */
264 struct bfd_hash_table *wrap_hash;
301 /* Hash table of symbols which are being wrapped (the --wrap linker
302 option). If this is NULL, no symbols are being wrapped. */
303 struct bfd_hash_table *wrap_hash;
304
265 /* If a base output file is wanted, then this points to it */
266 PTR base_file;
267
268 /* If non-zero, specifies that branches which are problematic for the
269 MPC860 C0 (or earlier) should be checked for and modified. It gives the
270 number of bytes that should be checked at the end of each text page. */
271 int mpc860c0;
272
273 /* The function to call when the executable or shared object is
274 loaded. */
275 const char *init_function;
305 /* If a base output file is wanted, then this points to it */
306 PTR base_file;
307
308 /* If non-zero, specifies that branches which are problematic for the
309 MPC860 C0 (or earlier) should be checked for and modified. It gives the
310 number of bytes that should be checked at the end of each text page. */
311 int mpc860c0;
312
313 /* The function to call when the executable or shared object is
314 loaded. */
315 const char *init_function;
316
276 /* The function to call when the executable or shared object is
277 unloaded. */
278 const char *fini_function;
279
280 /* true if the new ELF dynamic tags are enabled. */
281 boolean new_dtags;
282
283 /* May be used to set DT_FLAGS for ELF. */
284 bfd_vma flags;
285
286 /* May be used to set DT_FLAGS_1 for ELF. */
287 bfd_vma flags_1;
288
317 /* The function to call when the executable or shared object is
318 unloaded. */
319 const char *fini_function;
320
321 /* true if the new ELF dynamic tags are enabled. */
322 boolean new_dtags;
323
324 /* May be used to set DT_FLAGS for ELF. */
325 bfd_vma flags;
326
327 /* May be used to set DT_FLAGS_1 for ELF. */
328 bfd_vma flags_1;
329
289 /* True if auto-import thunks for DATA items in pei386 DLLs
290 should be generated/linked against. */
291 boolean pei386_auto_import;
330 /* Non-zero if auto-import thunks for DATA items in pei386 DLLs
331 should be generated/linked against. Set to 1 if this feature
332 is explicitly requested by the user, -1 if enabled by default. */
333 int pei386_auto_import;
292
293 /* True if non-PLT relocs should be merged into one reloc section
294 and sorted so that relocs against the same symbol come together. */
295 boolean combreloc;
296
297 /* True if executable should not contain copy relocs.
298 Setting this true may result in a non-sharable text segment. */
299 boolean nocopyreloc;

--- 141 unchanged lines hidden (view full) ---

441 include input data in the output file. */
442
443/* These are the types of link_order structures. */
444
445enum bfd_link_order_type
446{
447 bfd_undefined_link_order, /* Undefined. */
448 bfd_indirect_link_order, /* Built from a section. */
334
335 /* True if non-PLT relocs should be merged into one reloc section
336 and sorted so that relocs against the same symbol come together. */
337 boolean combreloc;
338
339 /* True if executable should not contain copy relocs.
340 Setting this true may result in a non-sharable text segment. */
341 boolean nocopyreloc;

--- 141 unchanged lines hidden (view full) ---

483 include input data in the output file. */
484
485/* These are the types of link_order structures. */
486
487enum bfd_link_order_type
488{
489 bfd_undefined_link_order, /* Undefined. */
490 bfd_indirect_link_order, /* Built from a section. */
449 bfd_fill_link_order, /* Fill with a 16 bit constant. */
450 bfd_data_link_order, /* Set to explicit data. */
451 bfd_section_reloc_link_order, /* Relocate against a section. */
452 bfd_symbol_reloc_link_order /* Relocate against a symbol. */
453};
454
455/* This is the link_order structure itself. These form a chain
456 attached to the section whose contents they are describing. */
457

--- 17 unchanged lines hidden (view full) ---

475 link_order is attached to, section->output_offset must
476 equal the link_order offset field, and section->_raw_size
477 must equal the link_order size field. Maybe these
478 restrictions should be relaxed someday. */
479 asection *section;
480 } indirect;
481 struct
482 {
491 bfd_data_link_order, /* Set to explicit data. */
492 bfd_section_reloc_link_order, /* Relocate against a section. */
493 bfd_symbol_reloc_link_order /* Relocate against a symbol. */
494};
495
496/* This is the link_order structure itself. These form a chain
497 attached to the section whose contents they are describing. */
498

--- 17 unchanged lines hidden (view full) ---

516 link_order is attached to, section->output_offset must
517 equal the link_order offset field, and section->_raw_size
518 must equal the link_order size field. Maybe these
519 restrictions should be relaxed someday. */
520 asection *section;
521 } indirect;
522 struct
523 {
483 /* Value to fill with. */
484 unsigned int value;
485 } fill;
486 struct
487 {
488 /* Data to put into file. The size field gives the number
489 of bytes which this field points to. */
524 /* Size of contents, or zero when contents size == size
525 within output section.
526 A non-zero value allows filling of the output section
527 with an arbitrary repeated pattern. */
528 unsigned int size;
529 /* Data to put into file. */
490 bfd_byte *contents;
491 } data;
492 struct
493 {
494 /* Description of reloc to generate. Used for
495 bfd_section_reloc_link_order and
496 bfd_symbol_reloc_link_order. */
497 struct bfd_link_order_reloc *p;

--- 50 unchanged lines hidden (view full) ---

548struct bfd_elf_version_expr
549{
550 /* Next regular expression for this version. */
551 struct bfd_elf_version_expr *next;
552 /* Regular expression. */
553 const char *pattern;
554 /* Matching function. */
555 int (*match) PARAMS((struct bfd_elf_version_expr *, const char *));
530 bfd_byte *contents;
531 } data;
532 struct
533 {
534 /* Description of reloc to generate. Used for
535 bfd_section_reloc_link_order and
536 bfd_symbol_reloc_link_order. */
537 struct bfd_link_order_reloc *p;

--- 50 unchanged lines hidden (view full) ---

588struct bfd_elf_version_expr
589{
590 /* Next regular expression for this version. */
591 struct bfd_elf_version_expr *next;
592 /* Regular expression. */
593 const char *pattern;
594 /* Matching function. */
595 int (*match) PARAMS((struct bfd_elf_version_expr *, const char *));
596 /* Defined by ".symver". */
597 unsigned int symver: 1;
598 /* Defined by version script. */
599 unsigned int script : 1;
556};
557
558/* Version dependencies. */
559
560struct bfd_elf_version_deps
561{
562 /* Next dependency for this version. */
563 struct bfd_elf_version_deps *next;

--- 27 unchanged lines hidden ---
600};
601
602/* Version dependencies. */
603
604struct bfd_elf_version_deps
605{
606 /* Next dependency for this version. */
607 struct bfd_elf_version_deps *next;

--- 27 unchanged lines hidden ---