Deleted Added
sdiff udiff text old ( 89857 ) new ( 104834 )
full compact
1/* bfdlink.h -- header file for BFD link routines
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
6 This file is part of BFD, the Binary File Descriptor library.
7
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
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
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 *));
186
187struct bfd_sym_chain
188{
189 struct bfd_sym_chain *next;
190 const char *name;
191};
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
201 /* true if BFD should generate a relocateable object file. */
202 boolean relocateable;
203
204 /* true if BFD should generate relocation information in the final
205 executable. */
206 boolean emitrelocations;
207
208 /* true if BFD should generate a "task linked" object file,
209 similar to relocatable but also with globals converted to
210 statics. */
211 boolean task_link;
212
213 /* true if BFD should generate a shared object. */
214 boolean shared;
215
216 /* true if BFD should pre-bind symbols in a shared object. */
217 boolean symbolic;
218
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
223 /* true if shared objects should be linked directly, not shared. */
224 boolean static_link;
225
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
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
236 /* true if BFD should generate errors for undefined symbols
237 even if generating a shared object. */
238 boolean no_undefined;
239
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
260 /* Which symbols to strip. */
261 enum bfd_link_strip strip;
262
263 /* Which local symbols to discard. */
264 enum bfd_link_discard discard;
265
266 /* true if symbols should be retained in memory, false if they
267 should be freed and reread. */
268 boolean keep_memory;
269
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
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
285 /* Hash table handled by BFD. */
286 struct bfd_link_hash_table *hash;
287
288 /* Hash table of symbols to keep. This is NULL unless strip is
289 strip_some. */
290 struct bfd_hash_table *keep_hash;
291
292 /* true if every symbol should be reported back via the notice
293 callback. */
294 boolean notice_all;
295
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
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
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
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
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;
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. */
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 {
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. */
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;
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 ---