/* BFD back-end data structures for ELF files.
Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
- 2002 Free Software Foundation, Inc.
+ 2002, 2003 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
} elf_symbol_type;
\f
struct elf_strtab_hash;
+struct got_entry;
+struct plt_entry;
/* ELF linker hash table entries. */
and track a size while the symbol is still undefined. It is indexed
via offset/sizeof(target_void_pointer). */
size_t vtable_entries_size;
- boolean *vtable_entries_used;
+ bfd_boolean *vtable_entries_used;
/* Virtual table derivation info. */
struct elf_link_hash_entry *vtable_parent;
/* If this symbol requires an entry in the global offset table, the
processor specific backend uses this field to track usage and
- final offset. We use a union and two names primarily to document
- the intent of any particular piece of code. The field should be
- used as a count until size_dynamic_sections, at which point the
- contents of the .got is fixed. Afterward, if this field is -1,
- then the symbol does not require a global offset table entry. */
- union
+ final offset. Two schemes are supported: The first assumes that
+ a symbol may only have one GOT entry, and uses REFCOUNT until
+ size_dynamic_sections, at which point the contents of the .got is
+ fixed. Afterward, if OFFSET is -1, then the symbol does not
+ require a global offset table entry. The second scheme allows
+ multiple GOT entries per symbol, managed via a linked list
+ pointed to by GLIST. */
+ union gotplt_union
{
bfd_signed_vma refcount;
bfd_vma offset;
+ struct got_entry *glist;
+ struct plt_entry *plist;
} got;
/* Same, but tracks a procedure linkage table entry. */
- union
- {
- bfd_signed_vma refcount;
- bfd_vma offset;
- } plt;
+ union gotplt_union plt;
/* Symbol size. */
bfd_size_type size;
/* Symbol is referenced by a non-GOT/non-PLT relocation. This is
not currently set by all the backends. */
#define ELF_LINK_NON_GOT_REF 010000
+ /* Symbol has a definition in a shared object. */
+#define ELF_LINK_DYNAMIC_DEF 020000
+ /* Symbol is weak in all shared objects. */
+#define ELF_LINK_DYNAMIC_WEAK 040000
};
+/* Will references to this symbol always reference the symbol
+ in this object? STV_PROTECTED is excluded from the visibility test
+ here so that function pointer comparisons work properly. Since
+ function symbols not defined in an app are set to their .plt entry,
+ it's necessary for shared libs to also reference the .plt even
+ though the symbol is really local to the shared lib. */
+#define SYMBOL_REFERENCES_LOCAL(INFO, H) \
+ ((! (INFO)->shared \
+ || (INFO)->symbolic \
+ || (H)->dynindx == -1 \
+ || ELF_ST_VISIBILITY ((H)->other) == STV_INTERNAL \
+ || ELF_ST_VISIBILITY ((H)->other) == STV_HIDDEN \
+ || ((H)->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0) \
+ && ((H)->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
+
+/* Will _calls_ to this symbol always call the version in this object? */
+#define SYMBOL_CALLS_LOCAL(INFO, H) \
+ ((! (INFO)->shared \
+ || (INFO)->symbolic \
+ || (H)->dynindx == -1 \
+ || ELF_ST_VISIBILITY ((H)->other) != STV_DEFAULT \
+ || ((H)->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0) \
+ && ((H)->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
+
/* Records local symbols to be emitted in the dynamic symbol table. */
struct elf_link_local_dynamic_entry
bfd *abfd;
};
-enum elf_link_info_type
-{
- ELF_INFO_TYPE_NONE,
- ELF_INFO_TYPE_STABS,
- ELF_INFO_TYPE_MERGE,
- ELF_INFO_TYPE_EH_FRAME,
- ELF_INFO_TYPE_JUST_SYMS,
- ELF_INFO_TYPE_LAST
-};
-
/* Structures used by the eh_frame optimization code. */
struct cie_header
{
/* TRUE if .eh_frame_hdr should contain the sorted search table.
We build it if we successfully read all .eh_frame input sections
and recognize them. */
- boolean table;
+ bfd_boolean table;
};
/* Cached start, size and alignment of PT_TLS segment. */
/* Whether we have created the special dynamic sections required
when linking against or generating a shared object. */
- boolean dynamic_sections_created;
+ bfd_boolean dynamic_sections_created;
/* The BFD used to hold special sections created by the linker.
This will be the first BFD found which requires these sections to
/* The value to use when initialising got.refcount/offset and
plt.refcount/offset in an elf_link_hash_entry. Set to zero when
- the values are refcounts. Set to -1 in size_dynamic_sections
- when the values may be offsets. */
- bfd_signed_vma init_refcount;
+ the values are refcounts. Set to init_offset in
+ size_dynamic_sections when the values may be offsets. */
+ union gotplt_union init_refcount;
+
+ /* The value to use for got.refcount/offset and plt.refcount/offset
+ when the values may be offsets. Normally (bfd_vma) -1. */
+ union gotplt_union init_offset;
/* The number of symbols found in the link which must be put into
the .dynsym section. */
#define elf_link_hash_traverse(table, func, info) \
(bfd_link_hash_traverse \
(&(table)->root, \
- (boolean (*) PARAMS ((struct bfd_link_hash_entry *, PTR))) (func), \
+ (bfd_boolean (*) PARAMS ((struct bfd_link_hash_entry *, PTR))) (func), \
(info)))
/* Get the ELF linker hash table from a link_info structure. */
#define elf_hash_table(p) ((struct elf_link_hash_table *) ((p)->hash))
-/* Returns true if the hash table is a struct elf_link_hash_table. */
+/* Returns TRUE if the hash table is a struct elf_link_hash_table. */
#define is_elf_hash_table(p) \
((p)->hash->type == bfd_link_elf_hash_table)
handle all back-ends. */
#define MAX_INT_RELS_PER_EXT_REL 3
- unsigned char arch_size, file_align;
+ unsigned char arch_size, log_file_align;
unsigned char elfclass, ev_current;
int (*write_out_phdrs)
PARAMS ((bfd *, const Elf_Internal_Phdr *, unsigned int));
- boolean (*write_shdrs_and_ehdr)
+ bfd_boolean (*write_shdrs_and_ehdr)
PARAMS ((bfd *));
void (*write_relocs)
PARAMS ((bfd *, asection *, PTR));
PARAMS ((bfd *, const PTR, const PTR, Elf_Internal_Sym *));
void (*swap_symbol_out)
PARAMS ((bfd *, const Elf_Internal_Sym *, PTR, PTR));
- boolean (*slurp_reloc_table)
- PARAMS ((bfd *, asection *, asymbol **, boolean));
+ bfd_boolean (*slurp_reloc_table)
+ PARAMS ((bfd *, asection *, asymbol **, bfd_boolean));
long (*slurp_symbol_table)
- PARAMS ((bfd *, asymbol **, boolean));
+ PARAMS ((bfd *, asymbol **, bfd_boolean));
void (*swap_dyn_in)
PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
void (*swap_dyn_out)
size_t locsymcount;
size_t extsymoff;
struct elf_link_hash_entry **sym_hashes;
- boolean bad_symtab;
+ bfd_boolean bad_symtab;
};
/* The level of IRIX compatibility we're striving for. */
This should be NULL for most targets, in which case the correct
thing will be done. MIPS ELF, at least on the Irix 5, has
special requirements. */
- boolean (*elf_backend_sym_is_global)
+ bfd_boolean (*elf_backend_sym_is_global)
PARAMS ((bfd *, asymbol *));
/* The remaining functions are hooks which are called only if they
particular BFD format is relevant for an object file, and to
permit the backend to set any global information it wishes. When
this is called elf_elfheader is set, but anything else should be
- used with caution. If this returns false, the check_format
+ used with caution. If this returns FALSE, the check_format
routine will return a bfd_error_wrong_format error. */
- boolean (*elf_backend_object_p)
+ bfd_boolean (*elf_backend_object_p)
PARAMS ((bfd *));
/* A function to do additional symbol processing when reading the
/* A function to do additional symbol processing after reading the
entire ELF symbol table. */
- boolean (*elf_backend_symbol_table_processing)
+ bfd_boolean (*elf_backend_symbol_table_processing)
PARAMS ((bfd *, elf_symbol_type *, unsigned int));
/* A function to set the type of the info field. Processor-specific
just before writing it out. This is used to set the flags and
type fields for some sections, or to actually write out data for
unusual sections. */
- boolean (*elf_backend_section_processing)
+ bfd_boolean (*elf_backend_section_processing)
PARAMS ((bfd *, Elf_Internal_Shdr *));
/* A function to handle unusual section types when creating BFD
sections from ELF sections. */
- boolean (*elf_backend_section_from_shdr)
+ bfd_boolean (*elf_backend_section_from_shdr)
PARAMS ((bfd *, Elf_Internal_Shdr *, const char *));
/* A function to convert machine dependent section header flags to
BFD internal section header flags. */
- boolean (*elf_backend_section_flags)
+ bfd_boolean (*elf_backend_section_flags)
PARAMS ((flagword *, Elf_Internal_Shdr *));
/* A function to handle unusual program segment types when creating BFD
sections from ELF program segments. */
- boolean (*elf_backend_section_from_phdr)
+ bfd_boolean (*elf_backend_section_from_phdr)
PARAMS ((bfd *, Elf_Internal_Phdr *, int));
/* A function to set up the ELF section header for a BFD section in
preparation for writing it out. This is where the flags and type
fields are set for unusual sections. */
- boolean (*elf_backend_fake_sections)
+ bfd_boolean (*elf_backend_fake_sections)
PARAMS ((bfd *, Elf_Internal_Shdr *, asection *));
/* A function to get the ELF section index for a BFD section. If
- this returns true, the section was found. If it is a normal ELF
+ this returns TRUE, the section was found. If it is a normal ELF
section, *RETVAL should be left unchanged. If it is not a normal
ELF section *RETVAL should be set to the SHN_xxxx index. */
- boolean (*elf_backend_section_from_bfd_section)
+ bfd_boolean (*elf_backend_section_from_bfd_section)
PARAMS ((bfd *, asection *, int *retval));
/* If this field is not NULL, it is called by the add_symbols phase
handling all processor dependent symbol bindings and section
indices, and must set at least *FLAGS and *SEC for each processor
dependent case; failure to do so will cause a link error. */
- boolean (*elf_add_symbol_hook)
+ bfd_boolean (*elf_add_symbol_hook)
PARAMS ((bfd *abfd, struct bfd_link_info *info,
const Elf_Internal_Sym *, const char **name,
flagword *flags, asection **sec, bfd_vma *value));
/* If this field is not NULL, it is called by the elf_link_output_sym
phase of a link for each symbol which will appear in the object file. */
- boolean (*elf_backend_link_output_symbol_hook)
+ bfd_boolean (*elf_backend_link_output_symbol_hook)
PARAMS ((bfd *, struct bfd_link_info *info, const char *,
Elf_Internal_Sym *, asection *));
created, and this function may modify the section flags if
desired. This function will normally create the .got and .plt
sections, but different backends have different requirements. */
- boolean (*elf_backend_create_dynamic_sections)
+ bfd_boolean (*elf_backend_create_dynamic_sections)
PARAMS ((bfd *abfd, struct bfd_link_info *info));
/* The CHECK_RELOCS function is called by the add_symbols phase of
relocs are always passed as Rela structures; if the section
actually uses Rel structures, the r_addend field will always be
zero. */
- boolean (*check_relocs)
+ bfd_boolean (*check_relocs)
PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *o,
const Elf_Internal_Rela *relocs));
the link can deal with. This will normally involve adding an
entry to the .plt or .got or some such section, and setting the
symbol to point to that. */
- boolean (*elf_backend_adjust_dynamic_symbol)
+ bfd_boolean (*elf_backend_adjust_dynamic_symbol)
PARAMS ((struct bfd_link_info *info, struct elf_link_hash_entry *h));
/* The ALWAYS_SIZE_SECTIONS function is called by the backend linker
after all the linker input files have been seen but before the
section sizes have been set. This is called after
ADJUST_DYNAMIC_SYMBOL, but before SIZE_DYNAMIC_SECTIONS. */
- boolean (*elf_backend_always_size_sections)
+ bfd_boolean (*elf_backend_always_size_sections)
PARAMS ((bfd *output_bfd, struct bfd_link_info *info));
/* The SIZE_DYNAMIC_SECTIONS function is called by the ELF backend
.dynstr and .hash sections. This function must handle the
.interp section and any sections created by the
CREATE_DYNAMIC_SECTIONS entry point. */
- boolean (*elf_backend_size_dynamic_sections)
+ bfd_boolean (*elf_backend_size_dynamic_sections)
PARAMS ((bfd *output_bfd, struct bfd_link_info *info));
/* The RELOCATE_SECTION function is called by the ELF backend linker
This function is responsible for adjust the section contents as
necessary, and (if using Rela relocs and generating a
- relocateable output file) adjusting the reloc addend as
+ relocatable output file) adjusting the reloc addend as
necessary.
This function does not have to worry about setting the reloc
The global hash table entry for the global symbols can be found
via elf_sym_hashes (input_bfd).
- When generating relocateable output, this function must handle
+ When generating relocatable output, this function must handle
STB_LOCAL/STT_SECTION symbols specially. The output symbol is
going to be the section symbol corresponding to the output
section, which means that the addend must be adjusted
accordingly. */
- boolean (*elf_backend_relocate_section)
+ bfd_boolean (*elf_backend_relocate_section)
PARAMS ((bfd *output_bfd, struct bfd_link_info *info,
bfd *input_bfd, asection *input_section, bfd_byte *contents,
Elf_Internal_Rela *relocs, Elf_Internal_Sym *local_syms,
dynamic sections. Note that FINISH_DYNAMIC_SYMBOL is called on
all .dynsym symbols, while ADJUST_DYNAMIC_SYMBOL is only called
on those symbols which are defined by a dynamic object. */
- boolean (*elf_backend_finish_dynamic_symbol)
+ bfd_boolean (*elf_backend_finish_dynamic_symbol)
PARAMS ((bfd *output_bfd, struct bfd_link_info *info,
struct elf_link_hash_entry *h, Elf_Internal_Sym *sym));
linker just before it writes all the dynamic sections out to the
output file. The FINISH_DYNAMIC_SYMBOL will have been called on
all dynamic symbols. */
- boolean (*elf_backend_finish_dynamic_sections)
+ bfd_boolean (*elf_backend_finish_dynamic_sections)
PARAMS ((bfd *output_bfd, struct bfd_link_info *info));
/* A function to do any beginning processing needed for the ELF file
PARAMS ((bfd *, struct bfd_link_info *));
/* A function to do any final processing needed for the ELF file
- before writing it out. The LINKER argument is true if this BFD
+ before writing it out. The LINKER argument is TRUE if this BFD
was created by the ELF backend linker. */
void (*elf_backend_final_write_processing)
- PARAMS ((bfd *, boolean linker));
+ PARAMS ((bfd *, bfd_boolean linker));
/* This function is called by get_program_header_size. It should
return the number of additional program segments which this BFD
/* This function is called to modify an existing segment map in a
backend specific fashion. */
- boolean (*elf_backend_modify_segment_map)
+ bfd_boolean (*elf_backend_modify_segment_map)
PARAMS ((bfd *));
/* This function is called during section gc to discover the section a
/* This function, if defined, is called during the sweep phase of gc
in order that a backend might update any data structures it might
be maintaining. */
- boolean (*gc_sweep_hook)
+ bfd_boolean (*gc_sweep_hook)
PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *o,
const Elf_Internal_Rela *relocs));
global symbols converted to locals are emited into the symtab
section. It allows the backend to emit special global symbols
not handled in the hash table. */
- boolean (*elf_backend_output_arch_syms)
+ bfd_boolean (*elf_backend_output_arch_syms)
PARAMS ((bfd *, struct bfd_link_info *, PTR,
- boolean (*) (PTR, const char *, Elf_Internal_Sym *, asection *)));
+ bfd_boolean (*) (PTR, const char *, Elf_Internal_Sym *, asection *)));
/* Copy any information related to dynamic linking from a pre-existing
symbol to a newly created symbol. Also called to copy flags and
/* Modify any information related to dynamic linking such that the
symbol is not exported. */
void (*elf_backend_hide_symbol)
- PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *, boolean));
+ PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean));
/* Emit relocations. Overrides default routine for emitting relocs,
except during a relocatable link, or if all relocs are being emitted. */
- boolean (*elf_backend_emit_relocs)
+ bfd_boolean (*elf_backend_emit_relocs)
PARAMS ((bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *));
/* Count relocations. Not called for relocatable links
/* This function, if defined, is called when an NT_PRSTATUS note is found
in a core file. */
- boolean (*elf_backend_grok_prstatus)
+ bfd_boolean (*elf_backend_grok_prstatus)
PARAMS ((bfd *, Elf_Internal_Note *));
/* This function, if defined, is called when an NT_PSINFO or NT_PRPSINFO
note is found in a core file. */
- boolean (*elf_backend_grok_psinfo)
+ bfd_boolean (*elf_backend_grok_psinfo)
PARAMS ((bfd *, Elf_Internal_Note *));
/* Functions to print VMAs. Special code to handle 64 bit ELF files. */
/* This function, if defined, removes information about discarded functions
from other sections which mention them. */
- boolean (*elf_backend_discard_info)
+ bfd_boolean (*elf_backend_discard_info)
PARAMS ((bfd *, struct elf_reloc_cookie *, struct bfd_link_info *));
/* This function, if defined, signals that the function above has removed
the discarded relocations for this section. */
- boolean (*elf_backend_ignore_discarded_relocs)
+ bfd_boolean (*elf_backend_ignore_discarded_relocs)
PARAMS ((asection *));
/* This function, if defined, may write out the given section.
- Returns true if it did so and false if the caller should. */
- boolean (*elf_backend_write_section)
+ Returns TRUE if it did so and FALSE if the caller should. */
+ bfd_boolean (*elf_backend_write_section)
PARAMS ((bfd *, asection *, bfd_byte *));
/* The level of IRIX compatibility we're striving for.
PARAMS ((bfd *));
reloc_howto_type *(*elf_backend_mips_rtype_to_howto)
- PARAMS ((unsigned int, boolean));
+ PARAMS ((unsigned int, bfd_boolean));
/* The swapping table to use when dealing with ECOFF information.
Used for the MIPS ELF .mdebug section. */
const struct ecoff_debug_swap *elf_backend_ecoff_debug_swap;
+ /* This function implements `bfd_elf_bfd_from_remote_memory';
+ see elf.c, elfcode.h. */
+ bfd *(*elf_backend_bfd_from_remote_memory)
+ PARAMS ((bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
+ int (*target_read_memory) (bfd_vma vma, char *myaddr, int len)));
+
/* Alternate EM_xxxx machine codes for this backend. */
int elf_machine_alt1;
int elf_machine_alt2;
bfd_vma got_header_size;
bfd_vma plt_header_size;
- /* This is true if the linker should act like collect and gather
- global constructors and destructors by name. This is true for
+ /* This is TRUE if the linker should act like collect and gather
+ global constructors and destructors by name. This is TRUE for
MIPS ELF because the Irix 5 tools can not handle the .init
section. */
unsigned collect : 1;
- /* This is true if the linker should ignore changes to the type of a
- symbol. This is true for MIPS ELF because some Irix 5 objects
+ /* This is TRUE if the linker should ignore changes to the type of a
+ symbol. This is TRUE for MIPS ELF because some Irix 5 objects
record undefined functions as STT_OBJECT although the definitions
are STT_FUNC. */
unsigned type_change_ok : 1;
backend relocate_section routine for relocatable linking. */
unsigned rela_normal : 1;
- /* True if addresses "naturally" sign extend. This is used when
+ /* TRUE if addresses "naturally" sign extend. This is used when
swapping in from Elf32 when BFD64. */
unsigned sign_extend_vma : 1;
/* The number of relocations currently assigned to REL_HDR2. */
unsigned int rel_count2;
- /* A pointer to a linked list tracking dynamic relocs copied for
- local symbols. */
- PTR local_dynrel;
-
- /* A pointer to the bfd section used for dynamic relocs. */
- asection *sreloc;
-
/* The ELF section number of this section. Only used for an output
file. */
int this_idx;
REL_HDR2 if any. Only used for an output file. */
int rel_idx2;
+ /* Used by the backend linker when generating a shared library to
+ record the dynamic symbol index for a section symbol
+ corresponding to this section. A value of 0 means that there is
+ no dynamic symbol for this section. */
+ int dynindx;
+
/* Used by the backend linker to store the symbol hash table entries
associated with relocs against global symbols. */
struct elf_link_hash_entry **rel_hashes;
pointer may be NULL. It is used by the backend linker. */
Elf_Internal_Rela *relocs;
- /* Used by the backend linker when generating a shared library to
- record the dynamic symbol index for a section symbol
- corresponding to this section. A value of 0 means that there is
- no dynamic symbol for this section. */
- long dynindx;
-
- /* A pointer used for various section optimizations. */
- PTR sec_info;
+ /* A pointer to a linked list tracking dynamic relocs copied for
+ local symbols. */
+ PTR local_dynrel;
- /* Type of that information. */
- enum elf_link_info_type sec_info_type;
+ /* A pointer to the bfd section used for dynamic relocs. */
+ asection *sreloc;
union {
/* Group name, if this section is a member of a group. */
the linker. */
asection *next_in_group;
- /* A pointer available for the processor specific ELF backend. */
- PTR tdata;
-
- /* Nonzero if this section uses RELA relocations, rather than REL. */
- unsigned int use_rela_p:1;
-
- /* Nonzero when a group is COMDAT. */
- unsigned int linkonce_p:1;
+ /* A pointer used for various section optimizations. */
+ PTR sec_info;
};
#define elf_section_data(sec) ((struct bfd_elf_section_data*)sec->used_by_bfd)
#define elf_group_name(sec) (elf_section_data(sec)->group.name)
#define elf_group_id(sec) (elf_section_data(sec)->group.id)
#define elf_next_in_group(sec) (elf_section_data(sec)->next_in_group)
-#define elf_linkonce_p(sec) (elf_section_data(sec)->linkonce_p)
-/* Return true if section has been discarded. */
-#define elf_discarded_section(sec) \
- (!bfd_is_abs_section(sec) \
- && bfd_is_abs_section((sec)->output_section) \
- && elf_section_data (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
- && elf_section_data (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
+/* Return TRUE if section has been discarded. */
+#define elf_discarded_section(sec) \
+ (!bfd_is_abs_section (sec) \
+ && bfd_is_abs_section ((sec)->output_section) \
+ && sec->sec_info_type != ELF_INFO_TYPE_MERGE \
+ && sec->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
#define get_elf_backend_data(abfd) \
((struct elf_backend_data *) (abfd)->xvec->backend_data)
bfd_vma hole_offset; /* current offset for the hole */
bfd_vma max_hole_offset; /* maximum offset for the hole */
elf_linker_section_enum_t which; /* which section this is */
- boolean hole_written_p; /* whether the hole has been initialized */
+ bfd_boolean hole_written_p; /* whether the hole has been initialized */
unsigned int alignment; /* alignment for the section */
flagword flags; /* flags to use to create the section */
} elf_linker_section_t;
bfd_vma offset; /* offset of pointer from beginning of section */
bfd_vma addend; /* addend used */
elf_linker_section_enum_t which; /* which linker section this is */
- boolean written_address_p; /* whether address was written yet */
+ bfd_boolean written_address_p; /* whether address was written yet */
} elf_linker_section_pointers_t;
+/* This struct is used to pass information to routines called via
+ elf_link_hash_traverse which must return failure. */
+
+struct elf_info_failed
+{
+ bfd_boolean failed;
+ struct bfd_link_info *info;
+ struct bfd_elf_version_tree *verdefs;
+};
+
+/* This structure is used to pass information to
+ _bfd_elf_link_assign_sym_version. */
+
+struct elf_assign_sym_version_info
+{
+ /* Output BFD. */
+ bfd *output_bfd;
+ /* General link information. */
+ struct bfd_link_info *info;
+ /* Version tree. */
+ struct bfd_elf_version_tree *verdefs;
+ /* Whether we had a failure. */
+ bfd_boolean failed;
+};
+
+/* This structure is used to pass information to
+ _bfd_elf_link_find_version_dependencies. */
+
+struct elf_find_verdep_info
+{
+ /* Output BFD. */
+ bfd *output_bfd;
+ /* General link information. */
+ struct bfd_link_info *info;
+ /* The number of dependencies. */
+ unsigned int vers;
+ /* Whether we had a failure. */
+ bfd_boolean failed;
+};
+
/* Some private data is stashed away for future use using the tdata pointer
in the bfd structure. */
char* core_program;
char* core_command;
- /* This is set to true if the object was created by the backend
+ /* This is set to TRUE if the object was created by the backend
linker. */
- boolean linker;
+ bfd_boolean linker;
/* A mapping from external symbols to entries in the linker hash
table, used when linking. This is indexed by the symbol index
minus the sh_info field of the symbol table header. */
struct elf_link_hash_entry **sym_hashes;
- /* A mapping from local symbols to offsets into the global offset
- table, used when linking. This is indexed by the symbol index.
- Like for the globals, we use a union and two names primarily to
- document the intent of any particular piece of code. The field
- should be used as a count until size_dynamic_sections, at which
- point the contents of the .got is fixed. Afterward, if an entry
- is -1, then the symbol does not require a global offset table entry. */
+ /* Track usage and final offsets of GOT entries for local symbols.
+ This array is indexed by symbol index. Elements are used
+ identically to "got" in struct elf_link_hash_entry. */
union
{
bfd_signed_vma *refcounts;
bfd_vma *offsets;
+ struct got_entry **ents;
} local_got;
/* A mapping from local symbols to offsets into the various linker
this BFD appears to be screwed up. If it is, we ignore the
sh_info field in the symbol table header, and always read all the
symbols. */
- boolean bad_symtab;
+ bfd_boolean bad_symtab;
/* Records the result of `get_program_header_size'. */
bfd_size_type program_header_size;
asection *eh_frame_hdr;
/* Used to determine if the e_flags field has been initialized */
- boolean flags_init;
+ bfd_boolean flags_init;
/* Number of symbol version definitions we are about to emit. */
unsigned int cverdefs;
/* Number of symbol version references we are about to emit. */
unsigned int cverrefs;
+ /* Segment flags for the PT_GNU_STACK segment. */
+ unsigned int stack_flags;
+
/* Symbol version definitions in external objects. */
Elf_Internal_Verdef *verdef;
#define elf_sym_hashes(bfd) (elf_tdata(bfd) -> sym_hashes)
#define elf_local_got_refcounts(bfd) (elf_tdata(bfd) -> local_got.refcounts)
#define elf_local_got_offsets(bfd) (elf_tdata(bfd) -> local_got.offsets)
+#define elf_local_got_ents(bfd) (elf_tdata(bfd) -> local_got.ents)
#define elf_local_ptr_offsets(bfd) (elf_tdata(bfd) -> linker_section_pointers)
#define elf_dt_name(bfd) (elf_tdata(bfd) -> dt_name)
#define elf_dt_soname(bfd) (elf_tdata(bfd) -> dt_soname)
extern Elf_Internal_Sym *bfd_elf_get_elf_syms
PARAMS ((bfd *, Elf_Internal_Shdr *, size_t, size_t,
Elf_Internal_Sym *, PTR, Elf_External_Sym_Shndx *));
+extern const char *bfd_elf_local_sym_name
+ PARAMS ((bfd *, Elf_Internal_Sym *));
-extern boolean _bfd_elf_copy_private_bfd_data
+extern bfd_boolean _bfd_elf_copy_private_bfd_data
PARAMS ((bfd *, bfd *));
-extern boolean _bfd_elf_print_private_bfd_data
+extern bfd_boolean _bfd_elf_print_private_bfd_data
PARAMS ((bfd *, PTR));
extern void bfd_elf_print_symbol
PARAMS ((bfd *, PTR, asymbol *, bfd_print_symbol_type));
extern bfd_reloc_status_type bfd_elf_generic_reloc
PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-extern boolean bfd_elf_mkobject
+extern bfd_boolean bfd_elf_mkobject
PARAMS ((bfd *));
-extern boolean bfd_elf_mkcorefile
+extern bfd_boolean bfd_elf_mkcorefile
PARAMS ((bfd *));
extern Elf_Internal_Shdr *bfd_elf_find_section
PARAMS ((bfd *, char *));
-extern boolean _bfd_elf_make_section_from_shdr
+extern bfd_boolean _bfd_elf_make_section_from_shdr
PARAMS ((bfd *, Elf_Internal_Shdr *, const char *));
-extern boolean _bfd_elf_make_section_from_phdr
+extern bfd_boolean _bfd_elf_make_section_from_phdr
PARAMS ((bfd *, Elf_Internal_Phdr *, int, const char *));
extern struct bfd_hash_entry *_bfd_elf_link_hash_newfunc
PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
PARAMS ((struct elf_backend_data *, struct elf_link_hash_entry *,
struct elf_link_hash_entry *));
extern void _bfd_elf_link_hash_hide_symbol
- PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *, boolean));
-extern boolean _bfd_elf_link_hash_table_init
+ PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean));
+extern bfd_boolean _bfd_elf_link_hash_table_init
PARAMS ((struct elf_link_hash_table *, bfd *,
struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
struct bfd_hash_table *,
const char *)));
-extern boolean _bfd_elf_slurp_version_tables
+extern bfd_boolean _bfd_elf_slurp_version_tables
PARAMS ((bfd *));
-extern boolean _bfd_elf_merge_sections
+extern bfd_boolean _bfd_elf_merge_sections
PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean bfd_elf_discard_group
+extern bfd_boolean bfd_elf_discard_group
PARAMS ((bfd *, struct sec *));
extern void bfd_elf_set_group_contents
PARAMS ((bfd *, asection *, PTR));
extern void _bfd_elf_link_just_syms
PARAMS ((asection *, struct bfd_link_info *));
-extern boolean _bfd_elf_copy_private_symbol_data
+extern bfd_boolean _bfd_elf_copy_private_symbol_data
PARAMS ((bfd *, asymbol *, bfd *, asymbol *));
-extern boolean _bfd_elf_copy_private_section_data
+extern bfd_boolean _bfd_elf_copy_private_section_data
PARAMS ((bfd *, asection *, bfd *, asection *));
-extern boolean _bfd_elf_write_object_contents
+extern bfd_boolean _bfd_elf_write_object_contents
PARAMS ((bfd *));
-extern boolean _bfd_elf_write_corefile_contents
+extern bfd_boolean _bfd_elf_write_corefile_contents
PARAMS ((bfd *));
-extern boolean _bfd_elf_set_section_contents
+extern bfd_boolean _bfd_elf_set_section_contents
PARAMS ((bfd *, sec_ptr, PTR, file_ptr, bfd_size_type));
extern long _bfd_elf_get_symtab_upper_bound
PARAMS ((bfd *));
PARAMS ((bfd *));
extern void _bfd_elf_get_symbol_info
PARAMS ((bfd *, asymbol *, symbol_info *));
-extern boolean _bfd_elf_is_local_label_name
+extern bfd_boolean _bfd_elf_is_local_label_name
PARAMS ((bfd *, const char *));
extern alent *_bfd_elf_get_lineno
PARAMS ((bfd *, asymbol *));
-extern boolean _bfd_elf_set_arch_mach
+extern bfd_boolean _bfd_elf_set_arch_mach
PARAMS ((bfd *, enum bfd_architecture, unsigned long));
-extern boolean _bfd_elf_find_nearest_line
+extern bfd_boolean _bfd_elf_find_nearest_line
PARAMS ((bfd *, asection *, asymbol **, bfd_vma, const char **,
const char **, unsigned int *));
#define _bfd_elf_read_minisymbols _bfd_generic_read_minisymbols
#define _bfd_elf_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
extern int _bfd_elf_sizeof_headers
- PARAMS ((bfd *, boolean));
-extern boolean _bfd_elf_new_section_hook
+ PARAMS ((bfd *, bfd_boolean));
+extern bfd_boolean _bfd_elf_new_section_hook
PARAMS ((bfd *, asection *));
-extern boolean _bfd_elf_init_reloc_shdr
- PARAMS ((bfd *, Elf_Internal_Shdr *, asection *, boolean));
+extern bfd_boolean _bfd_elf_init_reloc_shdr
+ PARAMS ((bfd *, Elf_Internal_Shdr *, asection *, bfd_boolean));
/* If the target doesn't have reloc handling written yet: */
extern void _bfd_elf_no_info_to_howto
PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
-extern boolean bfd_section_from_shdr
+extern bfd_boolean bfd_section_from_shdr
PARAMS ((bfd *, unsigned int shindex));
-extern boolean bfd_section_from_phdr
+extern bfd_boolean bfd_section_from_phdr
PARAMS ((bfd *, Elf_Internal_Phdr *, int));
extern int _bfd_elf_symbol_from_bfd_symbol
PARAMS ((bfd *, struct sym_sec_cache *, asection *, unsigned long));
extern asection *bfd_section_from_elf_index
PARAMS ((bfd *, unsigned int));
-extern boolean _bfd_elf_create_dynamic_sections
- PARAMS ((bfd *, struct bfd_link_info *));
extern struct bfd_strtab_hash *_bfd_elf_stringtab_init
PARAMS ((void));
extern void _bfd_elf_strtab_free
PARAMS ((struct elf_strtab_hash *));
extern bfd_size_type _bfd_elf_strtab_add
- PARAMS ((struct elf_strtab_hash *, const char *, boolean));
+ PARAMS ((struct elf_strtab_hash *, const char *, bfd_boolean));
extern void _bfd_elf_strtab_addref
PARAMS ((struct elf_strtab_hash *, bfd_size_type));
extern void _bfd_elf_strtab_delref
PARAMS ((struct elf_strtab_hash *));
extern bfd_size_type _bfd_elf_strtab_offset
PARAMS ((struct elf_strtab_hash *, bfd_size_type));
-extern boolean _bfd_elf_strtab_emit
+extern bfd_boolean _bfd_elf_strtab_emit
PARAMS ((bfd *, struct elf_strtab_hash *));
extern void _bfd_elf_strtab_finalize
PARAMS ((struct elf_strtab_hash *));
-extern boolean _bfd_elf_discard_section_eh_frame
+extern bfd_boolean _bfd_elf_discard_section_eh_frame
PARAMS ((bfd *, struct bfd_link_info *, asection *,
- boolean (*) (bfd_vma, PTR), struct elf_reloc_cookie *));
-extern boolean _bfd_elf_discard_section_eh_frame_hdr
+ bfd_boolean (*) (bfd_vma, PTR), struct elf_reloc_cookie *));
+extern bfd_boolean _bfd_elf_discard_section_eh_frame_hdr
PARAMS ((bfd *, struct bfd_link_info *));
extern bfd_vma _bfd_elf_eh_frame_section_offset
PARAMS ((bfd *, asection *, bfd_vma));
-extern boolean _bfd_elf_write_section_eh_frame
+extern bfd_boolean _bfd_elf_write_section_eh_frame
PARAMS ((bfd *, struct bfd_link_info *, asection *, bfd_byte *));
-extern boolean _bfd_elf_write_section_eh_frame_hdr
+extern bfd_boolean _bfd_elf_write_section_eh_frame_hdr
PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elf_maybe_strip_eh_frame_hdr
+extern bfd_boolean _bfd_elf_maybe_strip_eh_frame_hdr
PARAMS ((struct bfd_link_info *));
-extern boolean _bfd_elf_link_record_dynamic_symbol
+extern bfd_boolean _bfd_elf_merge_symbol
+ PARAMS ((bfd *, struct bfd_link_info *, const char *,
+ Elf_Internal_Sym *, asection **, bfd_vma *,
+ struct elf_link_hash_entry **, bfd_boolean *, bfd_boolean *,
+ bfd_boolean *, bfd_boolean *, bfd_boolean));
+
+extern bfd_boolean _bfd_elf_add_default_symbol
+ PARAMS ((bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
+ const char *, Elf_Internal_Sym *, asection **, bfd_vma *,
+ bfd_boolean *, bfd_boolean, bfd_boolean));
+
+extern bfd_boolean _bfd_elf_export_symbol
+ PARAMS ((struct elf_link_hash_entry *, PTR));
+
+extern bfd_boolean _bfd_elf_link_find_version_dependencies
+ PARAMS ((struct elf_link_hash_entry *, PTR));
+
+extern bfd_boolean _bfd_elf_link_assign_sym_version
+ PARAMS ((struct elf_link_hash_entry *, PTR));
+
+extern bfd_boolean _bfd_elf_link_record_dynamic_symbol
PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
extern long _bfd_elf_link_lookup_local_dynindx
PARAMS ((struct bfd_link_info *, bfd *, long));
-extern boolean _bfd_elf_compute_section_file_positions
+extern bfd_boolean _bfd_elf_compute_section_file_positions
PARAMS ((bfd *, struct bfd_link_info *));
extern void _bfd_elf_assign_file_positions_for_relocs
PARAMS ((bfd *));
extern file_ptr _bfd_elf_assign_file_position_for_section
- PARAMS ((Elf_Internal_Shdr *, file_ptr, boolean));
+ PARAMS ((Elf_Internal_Shdr *, file_ptr, bfd_boolean));
-extern boolean _bfd_elf_validate_reloc
+extern bfd_boolean _bfd_elf_validate_reloc
PARAMS ((bfd *, arelent *));
-extern boolean _bfd_elf_create_dynamic_sections
+extern bfd_boolean _bfd_elf_link_create_dynamic_sections
+ PARAMS ((bfd *, struct bfd_link_info *));
+extern bfd_boolean _bfd_elf_create_dynamic_sections
PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elf_create_got_section
+extern bfd_boolean _bfd_elf_create_got_section
PARAMS ((bfd *, struct bfd_link_info *));
extern unsigned long _bfd_elf_link_renumber_dynsyms
PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elfcore_make_pseudosection
+extern bfd_boolean _bfd_elfcore_make_pseudosection
PARAMS ((bfd *, char *, size_t, ufile_ptr));
extern char *_bfd_elfcore_strndup
PARAMS ((bfd *, char *, size_t));
-extern elf_linker_section_t *_bfd_elf_create_linker_section
- PARAMS ((bfd *, struct bfd_link_info *, enum elf_linker_section_enum,
- elf_linker_section_t *));
+extern Elf_Internal_Rela *_bfd_elf_link_read_relocs
+ PARAMS ((bfd *, asection *, PTR, Elf_Internal_Rela *, bfd_boolean));
-extern elf_linker_section_pointers_t *_bfd_elf_find_pointer_linker_section
- PARAMS ((elf_linker_section_pointers_t *, bfd_vma,
- elf_linker_section_enum_t));
+extern bfd_boolean _bfd_elf_link_size_reloc_section
+ PARAMS ((bfd *, Elf_Internal_Shdr *, asection *));
-extern boolean bfd_elf32_create_pointer_linker_section
- PARAMS ((bfd *, struct bfd_link_info *, elf_linker_section_t *,
- struct elf_link_hash_entry *, const Elf_Internal_Rela *));
+extern bfd_boolean _bfd_elf_link_output_relocs
+ PARAMS ((bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *));
-extern bfd_vma bfd_elf32_finish_pointer_linker_section
- PARAMS ((bfd *, bfd *, struct bfd_link_info *, elf_linker_section_t *,
- struct elf_link_hash_entry *, bfd_vma,
- const Elf_Internal_Rela *, int));
+extern bfd_boolean _bfd_elf_fix_symbol_flags
+ PARAMS ((struct elf_link_hash_entry *, struct elf_info_failed *));
-extern boolean bfd_elf64_create_pointer_linker_section
- PARAMS ((bfd *, struct bfd_link_info *, elf_linker_section_t *,
- struct elf_link_hash_entry *, const Elf_Internal_Rela *));
+extern bfd_boolean _bfd_elf_adjust_dynamic_symbol
+ PARAMS ((struct elf_link_hash_entry *, PTR));
-extern bfd_vma bfd_elf64_finish_pointer_linker_section
- PARAMS ((bfd *, bfd *, struct bfd_link_info *, elf_linker_section_t *,
- struct elf_link_hash_entry *, bfd_vma,
- const Elf_Internal_Rela *, int));
-
-extern boolean _bfd_elf_make_linker_section_rela
- PARAMS ((bfd *, elf_linker_section_t *, int));
+extern bfd_boolean _bfd_elf_link_sec_merge_syms
+ PARAMS ((struct elf_link_hash_entry *, PTR));
extern const bfd_target *bfd_elf32_object_p
PARAMS ((bfd *));
PARAMS ((bfd *));
extern int bfd_elf32_core_file_failing_signal
PARAMS ((bfd *));
-extern boolean bfd_elf32_core_file_matches_executable_p
+extern bfd_boolean bfd_elf32_core_file_matches_executable_p
PARAMS ((bfd *, bfd *));
-extern boolean bfd_elf32_bfd_link_add_symbols
+extern bfd_boolean bfd_elf32_bfd_link_add_symbols
PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean bfd_elf32_bfd_final_link
+extern bfd_boolean bfd_elf32_bfd_final_link
PARAMS ((bfd *, struct bfd_link_info *));
extern void bfd_elf32_swap_symbol_in
extern void bfd_elf32_swap_dyn_out
PARAMS ((bfd *, const Elf_Internal_Dyn *, PTR));
extern long bfd_elf32_slurp_symbol_table
- PARAMS ((bfd *, asymbol **, boolean));
-extern boolean bfd_elf32_write_shdrs_and_ehdr
+ PARAMS ((bfd *, asymbol **, bfd_boolean));
+extern bfd_boolean bfd_elf32_write_shdrs_and_ehdr
PARAMS ((bfd *));
extern int bfd_elf32_write_out_phdrs
PARAMS ((bfd *, const Elf_Internal_Phdr *, unsigned int));
extern void bfd_elf32_write_relocs
PARAMS ((bfd *, asection *, PTR));
-extern boolean bfd_elf32_slurp_reloc_table
- PARAMS ((bfd *, asection *, asymbol **, boolean));
-extern boolean bfd_elf32_add_dynamic_entry
+extern bfd_boolean bfd_elf32_slurp_reloc_table
+ PARAMS ((bfd *, asection *, asymbol **, bfd_boolean));
+extern bfd_boolean bfd_elf32_add_dynamic_entry
PARAMS ((struct bfd_link_info *, bfd_vma, bfd_vma));
-extern boolean bfd_elf32_link_create_dynamic_sections
- PARAMS ((bfd *, struct bfd_link_info *));
-extern Elf_Internal_Rela *_bfd_elf32_link_read_relocs
- PARAMS ((bfd *, asection *, PTR, Elf_Internal_Rela *, boolean));
extern const bfd_target *bfd_elf64_object_p
PARAMS ((bfd *));
PARAMS ((bfd *));
extern int bfd_elf64_core_file_failing_signal
PARAMS ((bfd *));
-extern boolean bfd_elf64_core_file_matches_executable_p
+extern bfd_boolean bfd_elf64_core_file_matches_executable_p
PARAMS ((bfd *, bfd *));
-extern boolean bfd_elf64_bfd_link_add_symbols
+extern bfd_boolean bfd_elf64_bfd_link_add_symbols
PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean bfd_elf64_bfd_final_link
+extern bfd_boolean bfd_elf64_bfd_final_link
PARAMS ((bfd *, struct bfd_link_info *));
extern void bfd_elf64_swap_symbol_in
extern void bfd_elf64_swap_dyn_out
PARAMS ((bfd *, const Elf_Internal_Dyn *, PTR));
extern long bfd_elf64_slurp_symbol_table
- PARAMS ((bfd *, asymbol **, boolean));
-extern boolean bfd_elf64_write_shdrs_and_ehdr
+ PARAMS ((bfd *, asymbol **, bfd_boolean));
+extern bfd_boolean bfd_elf64_write_shdrs_and_ehdr
PARAMS ((bfd *));
extern int bfd_elf64_write_out_phdrs
PARAMS ((bfd *, const Elf_Internal_Phdr *, unsigned int));
extern void bfd_elf64_write_relocs
PARAMS ((bfd *, asection *, PTR));
-extern boolean bfd_elf64_slurp_reloc_table
- PARAMS ((bfd *, asection *, asymbol **, boolean));
-extern boolean bfd_elf64_add_dynamic_entry
+extern bfd_boolean bfd_elf64_slurp_reloc_table
+ PARAMS ((bfd *, asection *, asymbol **, bfd_boolean));
+extern bfd_boolean bfd_elf64_add_dynamic_entry
PARAMS ((struct bfd_link_info *, bfd_vma, bfd_vma));
-extern boolean bfd_elf64_link_create_dynamic_sections
- PARAMS ((bfd *, struct bfd_link_info *));
-extern Elf_Internal_Rela *_bfd_elf64_link_read_relocs
- PARAMS ((bfd *, asection *, PTR, Elf_Internal_Rela *, boolean));
#define bfd_elf32_link_record_dynamic_symbol \
_bfd_elf_link_record_dynamic_symbol
#define _bfd_elf64_link_record_local_dynamic_symbol \
elf_link_record_local_dynamic_symbol
-extern boolean _bfd_elf_close_and_cleanup
+extern bfd_boolean _bfd_elf_close_and_cleanup
PARAMS ((bfd *));
extern bfd_reloc_status_type _bfd_elf_rel_vtable_reloc_fn
PARAMS ((bfd *, arelent *, struct symbol_cache_entry *, PTR,
asection *, bfd *, char **));
-extern boolean _bfd_elf32_gc_sections
+extern bfd_boolean _bfd_elf32_gc_sections
PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elf32_gc_common_finalize_got_offsets
+extern bfd_boolean _bfd_elf32_gc_common_finalize_got_offsets
PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elf32_gc_common_final_link
+extern bfd_boolean _bfd_elf32_gc_common_final_link
PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elf32_gc_record_vtinherit
+extern bfd_boolean _bfd_elf32_gc_record_vtinherit
PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
-extern boolean _bfd_elf32_gc_record_vtentry
+extern bfd_boolean _bfd_elf32_gc_record_vtentry
PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
-extern boolean _bfd_elf64_gc_sections
+extern bfd_boolean _bfd_elf64_gc_sections
PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elf64_gc_common_finalize_got_offsets
+extern bfd_boolean _bfd_elf64_gc_common_finalize_got_offsets
PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elf64_gc_common_final_link
+extern bfd_boolean _bfd_elf64_gc_common_final_link
PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elf64_gc_record_vtinherit
+extern bfd_boolean _bfd_elf64_gc_record_vtinherit
PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
-extern boolean _bfd_elf64_gc_record_vtentry
+extern bfd_boolean _bfd_elf64_gc_record_vtentry
PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
-extern boolean _bfd_elf32_reloc_symbol_deleted_p
+extern bfd_boolean _bfd_elf32_reloc_symbol_deleted_p
PARAMS ((bfd_vma, PTR));
-extern boolean _bfd_elf64_reloc_symbol_deleted_p
+extern bfd_boolean _bfd_elf64_reloc_symbol_deleted_p
PARAMS ((bfd_vma, PTR));
/* Exported interface for writing elf corefile notes. */
extern char *elfcore_write_lwpstatus
PARAMS ((bfd *, char *, int *, long, int, const PTR));
+extern bfd *_bfd_elf32_bfd_from_remote_memory
+ PARAMS ((bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
+ int (*target_read_memory) (bfd_vma, char *, int)));
+extern bfd *_bfd_elf64_bfd_from_remote_memory
+ PARAMS ((bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
+ int (*target_read_memory) (bfd_vma, char *, int)));
+
/* SH ELF specific routine. */
-extern boolean _sh_elf_set_mach_from_flags
+extern bfd_boolean _sh_elf_set_mach_from_flags
PARAMS ((bfd *));
#endif /* _LIBELF_H_ */