#ifndef _LIBELF_H_
#define _LIBELF_H_ 1
#include "bfd.h"
#include "elf/common.h"
#include "elf/internal.h"
#include "elf/external.h"
#include "bfdlink.h"
#define NUM_SHDR_ENTRIES(shdr) ((shdr)->sh_size / (shdr)->sh_entsize)
#ifndef NAME
#if ARCH_SIZE==64
#define NAME(x,y) CONCAT4 (x,64,_,y)
#endif
#if ARCH_SIZE==32
#define NAME(x,y) CONCAT4 (x,32,_,y)
#endif
#endif
#ifndef NAME
#define NAME(x,y) CONCAT4 (x,NOSIZE,_,y)
#endif
#define ElfNAME(X) NAME(Elf,X)
#define elfNAME(X) NAME(elf,X)
typedef struct
{
asymbol symbol;
Elf_Internal_Sym internal_elf_sym;
union
{
unsigned int hppa_arg_reloc;
PTR mips_extr;
PTR any;
}
tc_data;
unsigned short version;
} elf_symbol_type;
struct elf_strtab_hash;
struct elf_link_hash_entry
{
struct bfd_link_hash_entry root;
long indx;
long dynindx;
unsigned long dynstr_index;
unsigned long elf_hash_value;
struct elf_link_hash_entry *weakdef;
struct elf_linker_section_pointers *linker_section_pointer;
union
{
Elf_Internal_Verdef *verdef;
struct bfd_elf_version_tree *vertree;
} verinfo;
size_t vtable_entries_size;
boolean *vtable_entries_used;
struct elf_link_hash_entry *vtable_parent;
union
{
bfd_signed_vma refcount;
bfd_vma offset;
} got;
union
{
bfd_signed_vma refcount;
bfd_vma offset;
} plt;
bfd_size_type size;
char type;
unsigned char other;
unsigned short elf_link_hash_flags;
#define ELF_LINK_HASH_REF_REGULAR 01
#define ELF_LINK_HASH_DEF_REGULAR 02
#define ELF_LINK_HASH_REF_DYNAMIC 04
#define ELF_LINK_HASH_DEF_DYNAMIC 010
#define ELF_LINK_HASH_REF_REGULAR_NONWEAK 020
#define ELF_LINK_HASH_DYNAMIC_ADJUSTED 040
#define ELF_LINK_HASH_NEEDS_COPY 0100
#define ELF_LINK_HASH_NEEDS_PLT 0200
#define ELF_LINK_NON_ELF 0400
#define ELF_LINK_HIDDEN 01000
#define ELF_LINK_FORCED_LOCAL 02000
#define ELF_LINK_HASH_MARK 04000
#define ELF_LINK_NON_GOT_REF 010000
};
struct elf_link_local_dynamic_entry
{
struct elf_link_local_dynamic_entry *next;
bfd *input_bfd;
long input_indx;
long dynindx;
Elf_Internal_Sym isym;
};
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_EH_FRAME_HDR,
ELF_INFO_TYPE_LAST
};
struct elf_link_hash_table
{
struct bfd_link_hash_table root;
boolean dynamic_sections_created;
bfd *dynobj;
bfd_signed_vma init_refcount;
bfd_size_type dynsymcount;
struct elf_strtab_hash *dynstr;
bfd_size_type bucketcount;
struct bfd_link_needed_list *needed;
struct elf_link_hash_entry *hgot;
PTR stab_info;
PTR merge_info;
struct elf_link_local_dynamic_entry *dynlocal;
struct bfd_link_needed_list *runpath;
};
#define elf_link_hash_lookup(table, string, create, copy, follow) \
((struct elf_link_hash_entry *) \
bfd_link_hash_lookup (&(table)->root, (string), (create), \
(copy), (follow)))
#define elf_link_hash_traverse(table, func, info) \
(bfd_link_hash_traverse \
(&(table)->root, \
(boolean (*) PARAMS ((struct bfd_link_hash_entry *, PTR))) (func), \
(info)))
#define elf_hash_table(p) ((struct elf_link_hash_table *) ((p)->hash))
#define is_elf_hash_table(p) \
((p)->hash->type == bfd_link_elf_hash_table)
#define LOCAL_SYM_CACHE_SIZE 32
struct sym_sec_cache
{
bfd *abfd;
unsigned long indx[LOCAL_SYM_CACHE_SIZE];
asection *sec[LOCAL_SYM_CACHE_SIZE];
};
struct elf_size_info {
unsigned char sizeof_ehdr, sizeof_phdr, sizeof_shdr;
unsigned char sizeof_rel, sizeof_rela, sizeof_sym, sizeof_dyn, sizeof_note;
unsigned char sizeof_hash_entry;
unsigned char int_rels_per_ext_rel;
unsigned char arch_size, file_align;
unsigned char elfclass, ev_current;
int (*write_out_phdrs)
PARAMS ((bfd *, const Elf_Internal_Phdr *, unsigned int));
boolean (*write_shdrs_and_ehdr)
PARAMS ((bfd *));
void (*write_relocs)
PARAMS ((bfd *, asection *, PTR));
void (*swap_symbol_out)
PARAMS ((bfd *, const Elf_Internal_Sym *, PTR, PTR));
boolean (*slurp_reloc_table)
PARAMS ((bfd *, asection *, asymbol **, boolean));
long (*slurp_symbol_table)
PARAMS ((bfd *, asymbol **, boolean));
void (*swap_dyn_in)
PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
void (*swap_dyn_out)
PARAMS ((bfd *, const Elf_Internal_Dyn *, PTR));
void (*swap_reloc_in)
PARAMS ((bfd *, const bfd_byte *, Elf_Internal_Rel *));
void (*swap_reloc_out)
PARAMS ((bfd *, const Elf_Internal_Rel *, bfd_byte *));
void (*swap_reloca_in)
PARAMS ((bfd *, const bfd_byte *, Elf_Internal_Rela *));
void (*swap_reloca_out)
PARAMS ((bfd *, const Elf_Internal_Rela *, bfd_byte *));
};
#define elf_symbol_from(ABFD,S) \
(((S)->the_bfd->xvec->flavour == bfd_target_elf_flavour \
&& (S)->the_bfd->tdata.elf_obj_data != 0) \
? (elf_symbol_type *) (S) \
: 0)
enum elf_reloc_type_class {
reloc_class_normal,
reloc_class_relative,
reloc_class_plt,
reloc_class_copy
};
struct elf_reloc_cookie
{
Elf_Internal_Rela *rels, *rel, *relend;
PTR locsyms;
PTR locsym_shndx;
bfd *abfd;
size_t locsymcount;
size_t extsymoff;
struct elf_link_hash_entry **sym_hashes;
boolean bad_symtab;
};
typedef enum {
ict_none,
ict_irix5,
ict_irix6
} irix_compat_t;
struct elf_backend_data
{
enum bfd_architecture arch;
int elf_machine_code;
bfd_vma maxpagesize;
void (*elf_info_to_howto)
PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
void (*elf_info_to_howto_rel)
PARAMS ((bfd *, arelent *, Elf_Internal_Rel *));
boolean (*elf_backend_sym_is_global)
PARAMS ((bfd *, asymbol *));
boolean (*elf_backend_object_p)
PARAMS ((bfd *));
void (*elf_backend_symbol_processing)
PARAMS ((bfd *, asymbol *));
boolean (*elf_backend_symbol_table_processing)
PARAMS ((bfd *, elf_symbol_type *, unsigned int));
int (*elf_backend_get_symbol_type)
PARAMS (( Elf_Internal_Sym *, int));
boolean (*elf_backend_section_processing)
PARAMS ((bfd *, Elf32_Internal_Shdr *));
boolean (*elf_backend_section_from_shdr)
PARAMS ((bfd *, Elf32_Internal_Shdr *, char *));
boolean (*elf_backend_section_flags)
PARAMS ((flagword *, Elf32_Internal_Shdr *));
boolean (*elf_backend_section_from_phdr)
PARAMS ((bfd *, Elf32_Internal_Phdr *, int));
boolean (*elf_backend_fake_sections)
PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *));
boolean (*elf_backend_section_from_bfd_section)
PARAMS ((bfd *, asection *, int *retval));
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));
boolean (*elf_backend_link_output_symbol_hook)
PARAMS ((bfd *, struct bfd_link_info *info, const char *,
Elf_Internal_Sym *, asection *));
boolean (*elf_backend_create_dynamic_sections)
PARAMS ((bfd *abfd, struct bfd_link_info *info));
boolean (*check_relocs)
PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *o,
const Elf_Internal_Rela *relocs));
boolean (*elf_backend_adjust_dynamic_symbol)
PARAMS ((struct bfd_link_info *info, struct elf_link_hash_entry *h));
boolean (*elf_backend_always_size_sections)
PARAMS ((bfd *output_bfd, struct bfd_link_info *info));
boolean (*elf_backend_size_dynamic_sections)
PARAMS ((bfd *output_bfd, struct bfd_link_info *info));
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,
asection **local_sections));
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));
boolean (*elf_backend_finish_dynamic_sections)
PARAMS ((bfd *output_bfd, struct bfd_link_info *info));
void (*elf_backend_begin_write_processing)
PARAMS ((bfd *, struct bfd_link_info *));
void (*elf_backend_final_write_processing)
PARAMS ((bfd *, boolean linker));
int (*elf_backend_additional_program_headers)
PARAMS ((bfd *));
boolean (*elf_backend_modify_segment_map)
PARAMS ((bfd *));
asection * (*gc_mark_hook)
PARAMS ((bfd *abfd, struct bfd_link_info *, Elf_Internal_Rela *,
struct elf_link_hash_entry *h, Elf_Internal_Sym *));
boolean (*gc_sweep_hook)
PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *o,
const Elf_Internal_Rela *relocs));
void (*elf_backend_post_process_headers)
PARAMS ((bfd *, struct bfd_link_info *));
const char *(*elf_backend_print_symbol_all)
PARAMS ((bfd *, PTR, asymbol *));
boolean (*elf_backend_output_arch_syms)
PARAMS ((bfd *, struct bfd_link_info *, PTR,
boolean (*) (PTR, const char *, Elf_Internal_Sym *, asection *)));
void (*elf_backend_copy_indirect_symbol)
PARAMS ((struct elf_link_hash_entry *, struct elf_link_hash_entry *));
void (*elf_backend_hide_symbol)
PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *, boolean));
void (*elf_backend_emit_relocs)
PARAMS ((bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *));
unsigned int (*elf_backend_count_relocs)
PARAMS ((asection *, Elf_Internal_Rela *));
boolean (*elf_backend_grok_prstatus)
PARAMS ((bfd *, Elf_Internal_Note *));
boolean (*elf_backend_grok_psinfo)
PARAMS ((bfd *, Elf_Internal_Note *));
void (* elf_backend_sprintf_vma)
PARAMS ((bfd *, char *, bfd_vma));
void (* elf_backend_fprintf_vma)
PARAMS ((bfd *, PTR, bfd_vma));
enum elf_reloc_type_class (*elf_backend_reloc_type_class)
PARAMS ((const Elf_Internal_Rela *));
boolean (*elf_backend_discard_info)
PARAMS ((bfd *, struct elf_reloc_cookie *, struct bfd_link_info *));
boolean (*elf_backend_ignore_discarded_relocs)
PARAMS ((asection *));
boolean (*elf_backend_write_section)
PARAMS ((bfd *, asection *, bfd_byte *));
irix_compat_t (*elf_backend_mips_irix_compat)
PARAMS ((bfd *));
reloc_howto_type *(*elf_backend_mips_rtype_to_howto)
PARAMS ((unsigned int, boolean));
const struct ecoff_debug_swap *elf_backend_ecoff_debug_swap;
int elf_machine_alt1;
int elf_machine_alt2;
const struct elf_size_info *s;
bfd_vma got_symbol_offset;
bfd_vma got_header_size;
bfd_vma plt_header_size;
unsigned collect : 1;
unsigned type_change_ok : 1;
unsigned may_use_rel_p : 1;
unsigned may_use_rela_p : 1;
unsigned default_use_rela_p : 1;
unsigned sign_extend_vma : 1;
unsigned want_got_plt : 1;
unsigned plt_readonly : 1;
unsigned want_plt_sym : 1;
unsigned plt_not_loaded : 1;
unsigned plt_alignment : 4;
unsigned can_gc_sections : 1;
unsigned can_refcount : 1;
unsigned want_got_sym : 1;
unsigned want_dynbss : 1;
};
struct bfd_elf_section_data
{
Elf_Internal_Shdr this_hdr;
Elf_Internal_Shdr rel_hdr;
Elf_Internal_Shdr *rel_hdr2;
unsigned int rel_count;
unsigned int rel_count2;
PTR local_dynrel;
asection *sreloc;
int this_idx;
int rel_idx;
int rel_idx2;
struct elf_link_hash_entry **rel_hashes;
Elf_Internal_Rela *relocs;
long dynindx;
PTR sec_info;
enum elf_link_info_type sec_info_type;
const char *group_name;
asection *next_in_group;
PTR tdata;
unsigned int use_rela_p:1;
};
#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_next_in_group(sec) (elf_section_data(sec)->next_in_group)
#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)
#define get_elf_backend_data(abfd) \
((struct elf_backend_data *) (abfd)->xvec->backend_data)
typedef enum elf_linker_section_enum
{
LINKER_SECTION_UNKNOWN,
LINKER_SECTION_GOT,
LINKER_SECTION_PLT,
LINKER_SECTION_SDATA,
LINKER_SECTION_SDATA2,
LINKER_SECTION_MAX
} elf_linker_section_enum_t;
typedef struct elf_linker_section
{
char *name;
char *rel_name;
char *bss_name;
char *sym_name;
asection *section;
asection *bss_section;
asection *rel_section;
struct elf_link_hash_entry *sym_hash;
bfd_vma initial_size;
bfd_vma sym_offset;
bfd_vma hole_size;
bfd_vma hole_offset;
bfd_vma max_hole_offset;
elf_linker_section_enum_t which;
boolean hole_written_p;
unsigned int alignment;
flagword flags;
} elf_linker_section_t;
typedef struct elf_linker_section_pointers
{
struct elf_linker_section_pointers *next;
bfd_vma offset;
bfd_vma addend;
elf_linker_section_enum_t which;
boolean written_address_p;
} elf_linker_section_pointers_t;
struct elf_obj_tdata
{
Elf_Internal_Ehdr elf_header[1];
Elf_Internal_Shdr **elf_sect_ptr;
Elf_Internal_Phdr *phdr;
struct elf_segment_map *segment_map;
struct elf_strtab_hash *strtab_ptr;
int num_locals;
int num_globals;
unsigned int num_elf_sections;
int num_section_syms;
asymbol **section_syms;
Elf_Internal_Shdr symtab_hdr;
Elf_Internal_Shdr shstrtab_hdr;
Elf_Internal_Shdr strtab_hdr;
Elf_Internal_Shdr dynsymtab_hdr;
Elf_Internal_Shdr dynstrtab_hdr;
Elf_Internal_Shdr dynversym_hdr;
Elf_Internal_Shdr dynverref_hdr;
Elf_Internal_Shdr dynverdef_hdr;
Elf_Internal_Shdr symtab_shndx_hdr;
unsigned int symtab_section, shstrtab_section;
unsigned int strtab_section, dynsymtab_section;
unsigned int symtab_shndx_section;
unsigned int dynversym_section, dynverdef_section, dynverref_section;
file_ptr next_file_pos;
#if 0
void *prstatus;
void *prpsinfo;
#endif
bfd_vma gp;
unsigned int gp_size;
Elf_Internal_Shdr **group_sect_ptr;
int num_group;
int core_signal;
int core_pid;
int core_lwpid;
char* core_program;
char* core_command;
boolean linker;
struct elf_link_hash_entry **sym_hashes;
union
{
bfd_signed_vma *refcounts;
bfd_vma *offsets;
} local_got;
elf_linker_section_pointers_t **linker_section_pointers;
const char *dt_name;
const char *dt_soname;
boolean bad_symtab;
bfd_size_type program_header_size;
PTR line_info;
struct mips_elf_find_line *find_line_info;
struct dwarf1_debug *dwarf1_find_line_info;
PTR dwarf2_find_line_info;
asection **local_stubs;
boolean flags_init;
boolean eh_frame_hdr;
unsigned int cverdefs;
unsigned int cverrefs;
Elf_Internal_Verdef *verdef;
Elf_Internal_Verneed *verref;
struct elf_linker_section *linker_section[ (int)LINKER_SECTION_MAX ];
asymbol *elf_data_symbol;
asymbol *elf_text_symbol;
asection *elf_data_section;
asection *elf_text_section;
};
#define elf_tdata(bfd) ((bfd) -> tdata.elf_obj_data)
#define elf_elfheader(bfd) (elf_tdata(bfd) -> elf_header)
#define elf_elfsections(bfd) (elf_tdata(bfd) -> elf_sect_ptr)
#define elf_numsections(bfd) (elf_tdata(bfd) -> num_elf_sections)
#define elf_shstrtab(bfd) (elf_tdata(bfd) -> strtab_ptr)
#define elf_onesymtab(bfd) (elf_tdata(bfd) -> symtab_section)
#define elf_symtab_shndx(bfd) (elf_tdata(bfd) -> symtab_shndx_section)
#define elf_dynsymtab(bfd) (elf_tdata(bfd) -> dynsymtab_section)
#define elf_dynversym(bfd) (elf_tdata(bfd) -> dynversym_section)
#define elf_dynverdef(bfd) (elf_tdata(bfd) -> dynverdef_section)
#define elf_dynverref(bfd) (elf_tdata(bfd) -> dynverref_section)
#define elf_num_locals(bfd) (elf_tdata(bfd) -> num_locals)
#define elf_num_globals(bfd) (elf_tdata(bfd) -> num_globals)
#define elf_section_syms(bfd) (elf_tdata(bfd) -> section_syms)
#define elf_num_section_syms(bfd) (elf_tdata(bfd) -> num_section_syms)
#define core_prpsinfo(bfd) (elf_tdata(bfd) -> prpsinfo)
#define core_prstatus(bfd) (elf_tdata(bfd) -> prstatus)
#define elf_gp(bfd) (elf_tdata(bfd) -> gp)
#define elf_gp_size(bfd) (elf_tdata(bfd) -> gp_size)
#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_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)
#define elf_bad_symtab(bfd) (elf_tdata(bfd) -> bad_symtab)
#define elf_flags_init(bfd) (elf_tdata(bfd) -> flags_init)
#define elf_linker_section(bfd,n) (elf_tdata(bfd) -> linker_section[(int)n])
extern void _bfd_elf_swap_verdef_in
PARAMS ((bfd *, const Elf_External_Verdef *, Elf_Internal_Verdef *));
extern void _bfd_elf_swap_verdef_out
PARAMS ((bfd *, const Elf_Internal_Verdef *, Elf_External_Verdef *));
extern void _bfd_elf_swap_verdaux_in
PARAMS ((bfd *, const Elf_External_Verdaux *, Elf_Internal_Verdaux *));
extern void _bfd_elf_swap_verdaux_out
PARAMS ((bfd *, const Elf_Internal_Verdaux *, Elf_External_Verdaux *));
extern void _bfd_elf_swap_verneed_in
PARAMS ((bfd *, const Elf_External_Verneed *, Elf_Internal_Verneed *));
extern void _bfd_elf_swap_verneed_out
PARAMS ((bfd *, const Elf_Internal_Verneed *, Elf_External_Verneed *));
extern void _bfd_elf_swap_vernaux_in
PARAMS ((bfd *, const Elf_External_Vernaux *, Elf_Internal_Vernaux *));
extern void _bfd_elf_swap_vernaux_out
PARAMS ((bfd *, const Elf_Internal_Vernaux *, Elf_External_Vernaux *));
extern void _bfd_elf_swap_versym_in
PARAMS ((bfd *, const Elf_External_Versym *, Elf_Internal_Versym *));
extern void _bfd_elf_swap_versym_out
PARAMS ((bfd *, const Elf_Internal_Versym *, Elf_External_Versym *));
extern int _bfd_elf_section_from_bfd_section
PARAMS ((bfd *, asection *));
extern char *bfd_elf_string_from_elf_section
PARAMS ((bfd *, unsigned, unsigned));
extern char *bfd_elf_get_str_section
PARAMS ((bfd *, unsigned));
extern boolean _bfd_elf_copy_private_bfd_data
PARAMS ((bfd *, bfd *));
extern boolean _bfd_elf_print_private_bfd_data
PARAMS ((bfd *, PTR));
extern void bfd_elf_print_symbol
PARAMS ((bfd *, PTR, asymbol *, bfd_print_symbol_type));
#define elf_string_from_elf_strtab(abfd, strindex) \
bfd_elf_string_from_elf_section(abfd, elf_elfheader(abfd)->e_shstrndx, \
strindex)
#define bfd_elf32_print_symbol bfd_elf_print_symbol
#define bfd_elf64_print_symbol bfd_elf_print_symbol
extern void _bfd_elf_sprintf_vma
PARAMS ((bfd *, char *, bfd_vma));
extern void _bfd_elf_fprintf_vma
PARAMS ((bfd *, PTR, bfd_vma));
extern enum elf_reloc_type_class _bfd_elf_reloc_type_class
PARAMS ((const Elf_Internal_Rela *));
extern bfd_vma _bfd_elf_rela_local_sym
PARAMS ((bfd *, Elf_Internal_Sym *, asection *, Elf_Internal_Rela *));
extern bfd_vma _bfd_elf_rel_local_sym
PARAMS ((bfd *, Elf_Internal_Sym *, asection **, bfd_vma));
extern bfd_vma _bfd_elf_section_offset
PARAMS ((bfd *, struct bfd_link_info *, asection *, bfd_vma));
extern unsigned long bfd_elf_hash
PARAMS ((const char *));
extern bfd_reloc_status_type bfd_elf_generic_reloc
PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
extern boolean bfd_elf_mkobject
PARAMS ((bfd *));
extern 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
PARAMS ((bfd *, Elf_Internal_Shdr *, const char *));
extern 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 *));
extern struct bfd_link_hash_table *_bfd_elf_link_hash_table_create
PARAMS ((bfd *));
extern void _bfd_elf_link_hash_copy_indirect
PARAMS ((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 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
PARAMS ((bfd *));
extern boolean _bfd_elf_merge_sections
PARAMS ((bfd *, struct bfd_link_info *));
extern boolean _bfd_elf_copy_private_symbol_data
PARAMS ((bfd *, asymbol *, bfd *, asymbol *));
extern boolean _bfd_elf_copy_private_section_data
PARAMS ((bfd *, asection *, bfd *, asection *));
extern boolean _bfd_elf_write_object_contents
PARAMS ((bfd *));
extern boolean _bfd_elf_write_corefile_contents
PARAMS ((bfd *));
extern 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 *));
extern long _bfd_elf_get_symtab
PARAMS ((bfd *, asymbol **));
extern long _bfd_elf_get_dynamic_symtab_upper_bound
PARAMS ((bfd *));
extern long _bfd_elf_canonicalize_dynamic_symtab
PARAMS ((bfd *, asymbol **));
extern long _bfd_elf_get_reloc_upper_bound
PARAMS ((bfd *, sec_ptr));
extern long _bfd_elf_canonicalize_reloc
PARAMS ((bfd *, sec_ptr, arelent **, asymbol **));
extern long _bfd_elf_get_dynamic_reloc_upper_bound
PARAMS ((bfd *));
extern long _bfd_elf_canonicalize_dynamic_reloc
PARAMS ((bfd *, arelent **, asymbol **));
extern asymbol *_bfd_elf_make_empty_symbol
PARAMS ((bfd *));
extern void _bfd_elf_get_symbol_info
PARAMS ((bfd *, asymbol *, symbol_info *));
extern 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
PARAMS ((bfd *, enum bfd_architecture, unsigned long));
extern 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 *, asection *));
extern boolean _bfd_elf_init_reloc_shdr
PARAMS ((bfd *, Elf_Internal_Shdr *, asection *, boolean));
extern void _bfd_elf_no_info_to_howto
PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
extern boolean bfd_section_from_shdr
PARAMS ((bfd *, unsigned int shindex));
extern boolean bfd_section_from_phdr
PARAMS ((bfd *, Elf_Internal_Phdr *, int));
extern int _bfd_elf_symbol_from_bfd_symbol
PARAMS ((bfd *, asymbol **));
extern asection *bfd_section_from_r_symndx
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 struct elf_strtab_hash * _bfd_elf_strtab_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));
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 *, bfd_size_type));
extern void _bfd_elf_strtab_clear_all_refs
PARAMS ((struct elf_strtab_hash *));
extern bfd_size_type _bfd_elf_strtab_size
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
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
PARAMS ((bfd *, struct bfd_link_info *, asection *, asection *,
boolean (*) (bfd_vma, PTR), struct elf_reloc_cookie *));
extern boolean _bfd_elf_discard_section_eh_frame_hdr
PARAMS ((bfd *, struct bfd_link_info *, asection *));
extern bfd_vma _bfd_elf_eh_frame_section_offset
PARAMS ((bfd *, asection *, bfd_vma));
extern boolean _bfd_elf_write_section_eh_frame
PARAMS ((bfd *, asection *, asection *, bfd_byte *));
extern boolean _bfd_elf_write_section_eh_frame_hdr
PARAMS ((bfd *, asection *));
extern boolean _bfd_elf_maybe_strip_eh_frame_hdr
PARAMS ((struct bfd_link_info *));
extern 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
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));
extern boolean _bfd_elf_validate_reloc
PARAMS ((bfd *, arelent *));
extern boolean _bfd_elf_create_dynamic_sections
PARAMS ((bfd *, struct bfd_link_info *));
extern 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
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_linker_section_pointers_t *_bfd_elf_find_pointer_linker_section
PARAMS ((elf_linker_section_pointers_t *, bfd_vma,
elf_linker_section_enum_t));
extern boolean bfd_elf32_create_pointer_linker_section
PARAMS ((bfd *, struct bfd_link_info *, elf_linker_section_t *,
struct elf_link_hash_entry *, const Elf32_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 Elf32_Internal_Rela *, int));
extern boolean bfd_elf64_create_pointer_linker_section
PARAMS ((bfd *, struct bfd_link_info *, elf_linker_section_t *,
struct elf_link_hash_entry *, const Elf64_Internal_Rela *));
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 Elf64_Internal_Rela *, int));
extern boolean _bfd_elf_make_linker_section_rela
PARAMS ((bfd *, elf_linker_section_t *, int));
extern const bfd_target *bfd_elf32_object_p
PARAMS ((bfd *));
extern const bfd_target *bfd_elf32_core_file_p
PARAMS ((bfd *));
extern char *bfd_elf32_core_file_failing_command
PARAMS ((bfd *));
extern int bfd_elf32_core_file_failing_signal
PARAMS ((bfd *));
extern boolean bfd_elf32_core_file_matches_executable_p
PARAMS ((bfd *, bfd *));
extern boolean bfd_elf32_bfd_link_add_symbols
PARAMS ((bfd *, struct bfd_link_info *));
extern boolean bfd_elf32_bfd_final_link
PARAMS ((bfd *, struct bfd_link_info *));
extern void bfd_elf32_swap_symbol_in
PARAMS ((bfd *, const Elf32_External_Sym *, const Elf_External_Sym_Shndx *,
Elf_Internal_Sym *));
extern void bfd_elf32_swap_symbol_out
PARAMS ((bfd *, const Elf_Internal_Sym *, PTR, PTR));
extern void bfd_elf32_swap_reloc_in
PARAMS ((bfd *, const Elf32_External_Rel *, Elf_Internal_Rel *));
extern void bfd_elf32_swap_reloc_out
PARAMS ((bfd *, const Elf_Internal_Rel *, Elf32_External_Rel *));
extern void bfd_elf32_swap_reloca_in
PARAMS ((bfd *, const Elf32_External_Rela *, Elf_Internal_Rela *));
extern void bfd_elf32_swap_reloca_out
PARAMS ((bfd *, const Elf_Internal_Rela *, Elf32_External_Rela *));
extern void bfd_elf32_swap_phdr_in
PARAMS ((bfd *, const Elf32_External_Phdr *, Elf_Internal_Phdr *));
extern void bfd_elf32_swap_phdr_out
PARAMS ((bfd *, const Elf_Internal_Phdr *, Elf32_External_Phdr *));
extern void bfd_elf32_swap_dyn_in
PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
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 *));
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
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 *));
extern const bfd_target *bfd_elf64_core_file_p
PARAMS ((bfd *));
extern char *bfd_elf64_core_file_failing_command
PARAMS ((bfd *));
extern int bfd_elf64_core_file_failing_signal
PARAMS ((bfd *));
extern boolean bfd_elf64_core_file_matches_executable_p
PARAMS ((bfd *, bfd *));
extern boolean bfd_elf64_bfd_link_add_symbols
PARAMS ((bfd *, struct bfd_link_info *));
extern boolean bfd_elf64_bfd_final_link
PARAMS ((bfd *, struct bfd_link_info *));
extern void bfd_elf64_swap_symbol_in
PARAMS ((bfd *, const Elf64_External_Sym *, const Elf_External_Sym_Shndx *,
Elf_Internal_Sym *));
extern void bfd_elf64_swap_symbol_out
PARAMS ((bfd *, const Elf_Internal_Sym *, PTR, PTR));
extern void bfd_elf64_swap_reloc_in
PARAMS ((bfd *, const Elf64_External_Rel *, Elf_Internal_Rel *));
extern void bfd_elf64_swap_reloc_out
PARAMS ((bfd *, const Elf_Internal_Rel *, Elf64_External_Rel *));
extern void bfd_elf64_swap_reloca_in
PARAMS ((bfd *, const Elf64_External_Rela *, Elf_Internal_Rela *));
extern void bfd_elf64_swap_reloca_out
PARAMS ((bfd *, const Elf_Internal_Rela *, Elf64_External_Rela *));
extern void bfd_elf64_swap_phdr_in
PARAMS ((bfd *, const Elf64_External_Phdr *, Elf_Internal_Phdr *));
extern void bfd_elf64_swap_phdr_out
PARAMS ((bfd *, const Elf_Internal_Phdr *, Elf64_External_Phdr *));
extern void bfd_elf64_swap_dyn_in
PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
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 *));
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
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_dynamic_symbol \
_bfd_elf_link_record_dynamic_symbol
extern boolean _bfd_elf32_link_record_local_dynamic_symbol
PARAMS ((struct bfd_link_info *, bfd *, long));
extern boolean _bfd_elf64_link_record_local_dynamic_symbol
PARAMS ((struct bfd_link_info *, bfd *, long));
extern 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
PARAMS ((bfd *, struct bfd_link_info *));
extern boolean _bfd_elf32_gc_common_finalize_got_offsets
PARAMS ((bfd *, struct bfd_link_info *));
extern boolean _bfd_elf32_gc_common_final_link
PARAMS ((bfd *, struct bfd_link_info *));
extern boolean _bfd_elf32_gc_record_vtinherit
PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
extern boolean _bfd_elf32_gc_record_vtentry
PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
extern boolean _bfd_elf64_gc_sections
PARAMS ((bfd *, struct bfd_link_info *));
extern boolean _bfd_elf64_gc_common_finalize_got_offsets
PARAMS ((bfd *, struct bfd_link_info *));
extern boolean _bfd_elf64_gc_common_final_link
PARAMS ((bfd *, struct bfd_link_info *));
extern boolean _bfd_elf64_gc_record_vtinherit
PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
extern boolean _bfd_elf64_gc_record_vtentry
PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
extern boolean _bfd_elf32_reloc_symbol_deleted_p
PARAMS ((bfd_vma, PTR));
extern boolean _bfd_elf64_reloc_symbol_deleted_p
PARAMS ((bfd_vma, PTR));
extern char *elfcore_write_note
PARAMS ((bfd *, char *, int *, char *, int, void *, int));
extern char *elfcore_write_prpsinfo
PARAMS ((bfd *, char *, int *, char *, char *));
extern char *elfcore_write_prstatus
PARAMS ((bfd *, char *, int *, long, int, void *));
extern char * elfcore_write_pstatus
PARAMS ((bfd *, char *, int *, long, int, void *));
extern char *elfcore_write_prfpreg
PARAMS ((bfd *, char *, int *, void *, int));
extern char *elfcore_write_prxfpreg
PARAMS ((bfd *, char *, int *, void *, int));
extern char *elfcore_write_lwpstatus
PARAMS ((bfd*, char*, int*, long, int, void*));
extern boolean _sh_elf_set_mach_from_flags
PARAMS ((bfd *));
#endif