Update.
[deliverable/binutils-gdb.git] / bfd / elf-bfd.h
index 252f02423ea44d2aa45650fea61f45bbf0440bbd..d0042192bb1b3e78ccfd6a98d1ef13d622cc538c 100644 (file)
@@ -1,5 +1,6 @@
 /* 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.
@@ -98,8 +99,8 @@ struct elf_link_hash_entry
   /* 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
@@ -133,9 +134,11 @@ struct elf_link_hash_entry
     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.  */
@@ -147,6 +150,9 @@ struct elf_link_hash_entry
   /* 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.  */
@@ -157,20 +163,22 @@ struct elf_link_hash_entry
 #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.  */
@@ -248,11 +256,6 @@ struct elf_size_info {
 
 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;
 
@@ -313,6 +316,10 @@ struct elf_backend_data
                                                          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
@@ -504,6 +511,12 @@ struct elf_backend_data
     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;
@@ -523,6 +536,23 @@ struct elf_backend_data
   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;
@@ -565,6 +595,8 @@ struct bfd_elf_section_data
   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)
@@ -643,11 +675,22 @@ struct elf_obj_tdata
   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;
@@ -664,7 +707,7 @@ struct elf_obj_tdata
      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;
@@ -703,6 +746,9 @@ struct elf_obj_tdata
      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;
 
@@ -932,6 +978,9 @@ boolean _bfd_elf_make_linker_section_rela
           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 *));
This page took 0.025268 seconds and 4 git commands to generate.