/* BFD back-end data structures for ELF files.
- Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 1999 Free Software
+ Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
/* 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
+ 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
struct bfd_elf_version_tree *vertree;
} verinfo;
- /* Virtual table entry use information. This array is of size
- size/sizeof(target_void_pointer), and indexed via
- offset/sizeof(void*) as well. */
+ /* Virtual table entry use information. This array is nominally of size
+ size/sizeof(target_void_pointer), though we have to be able to assume
+ 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;
/* Virtual table derivation info. */
/* Symbol st_other value. */
unsigned char other;
+ /* Hash value of the name computed using the ELF hash function. */
+ unsigned long elf_hash_value;
+
/* Some flags; legal values follow. */
unsigned short elf_link_hash_flags;
/* Symbol is referenced by a non-shared object. */
#define ELF_LINK_HASH_REF_DYNAMIC 04
/* Symbol is defined by a shared object. */
#define ELF_LINK_HASH_DEF_DYNAMIC 010
+ /* Symbol has a non-weak reference from a non-shared object. */
+#define ELF_LINK_HASH_REF_REGULAR_NONWEAK 020
/* Dynamic symbol has been adjustd. */
-#define ELF_LINK_HASH_DYNAMIC_ADJUSTED 020
+#define ELF_LINK_HASH_DYNAMIC_ADJUSTED 040
/* Symbol needs a copy reloc. */
-#define ELF_LINK_HASH_NEEDS_COPY 040
+#define ELF_LINK_HASH_NEEDS_COPY 0100
/* Symbol needs a procedure linkage table entry. */
-#define ELF_LINK_HASH_NEEDS_PLT 0100
+#define ELF_LINK_HASH_NEEDS_PLT 0200
/* Symbol appears in a non-ELF input file. */
-#define ELF_LINK_NON_ELF 0200
+#define ELF_LINK_NON_ELF 0400
/* Symbol should be marked as hidden in the version information. */
-#define ELF_LINK_HIDDEN 0400
+#define ELF_LINK_HIDDEN 01000
/* Symbol was forced to local scope due to a version script file. */
-#define ELF_LINK_FORCED_LOCAL 01000
+#define ELF_LINK_FORCED_LOCAL 02000
/* Symbol was marked during garbage collection. */
-#define ELF_LINK_HASH_MARK 02000
+#define ELF_LINK_HASH_MARK 04000
};
/* ELF linker hash table. */
struct elf_backend_data
{
- /* Whether the backend uses REL or RELA relocations. FIXME: some
- ELF backends use both. When we need to support one, this whole
- approach will need to be changed. */
- int use_rela_p;
-
/* The architecture for this backend. */
enum bfd_architecture arch;
elf_symbol_type *,
unsigned int));
+ /* A function to set the type of the info field. Processor-specific
+ types should be handled here. */
+ int (*elf_backend_get_symbol_type) PARAMS (( Elf_Internal_Sym *, int));
+
/* A function to do additional processing on the ELF section header
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
PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *o,
const Elf_Internal_Rela *relocs));
+ /* This function, if defined, is called after the ELF headers have
+ been created. This allows for things like the OS and ABI versions
+ to be changed. */
+ void (*elf_backend_post_process_headers)
+ PARAMS ((bfd *, struct bfd_link_info *));
+
/* 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;
bfd_vma got_header_size;
bfd_vma plt_header_size;
+ /* Whether the backend may use REL relocations. (Some backends use
+ both REL and RELA relocations, and this flag is set for those
+ backends.) */
+ unsigned may_use_rel_p : 1;
+
+ /* Whether the backend may use RELA relocations. (Some backends use
+ both REL and RELA relocations, and this flag is set for those
+ backends.) */
+ unsigned may_use_rela_p : 1;
+
+ /* Whether the default relocation type is RELA. If a backend with
+ this flag set wants REL relocations for a particular section,
+ it must note that explicitly. Similarly, if this flag is clear,
+ and the backend wants RELA relocations for a particular
+ section. */
+ unsigned default_use_rela_p : 1;
+
unsigned want_got_plt : 1;
unsigned plt_readonly : 1;
unsigned want_plt_sym : 1;
PTR stab_info;
/* 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;
};
#define elf_section_data(sec) ((struct bfd_elf_section_data*)sec->used_by_bfd)
unsigned int strtab_section, dynsymtab_section;
unsigned int dynversym_section, dynverdef_section, dynverref_section;
file_ptr next_file_pos;
+#if 0
+ /* we don't need these inside bfd anymore, and I think
+ these weren't used outside bfd. */
void *prstatus; /* The raw /proc prstatus structure */
void *prpsinfo; /* The raw /proc prpsinfo structure */
+#endif
bfd_vma gp; /* The gp value (MIPS only, for now) */
unsigned int gp_size; /* The gp size (MIPS only, for now) */
+ /* Information grabbed from an elf core file. */
+ int core_signal;
+ int core_pid;
+ int core_lwpid;
+ char* core_program;
+ char* core_command;
+
/* This is set to true if the object was created by the backend
linker. */
boolean linker;
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. */
- union
+ union
{
bfd_signed_vma *refcounts;
bfd_vma *offsets;
find_nearest_line. */
struct mips_elf_find_line *find_line_info;
+ /* A place to stash dwarf1 info for this bfd. */
+ struct dwarf1_debug *dwarf1_find_line_info;
+
/* A place to stash dwarf2 info for this bfd. */
struct dwarf2_debug *dwarf2_find_line_info;
elf_linker_section_t *lsect,
int alignment));
+boolean _bfd_elfcore_section_from_phdr
+ PARAMS ((bfd *, Elf_Internal_Phdr *, 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 *));