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