* remote-es.c (es1800_child_ops): Don't declare it static.
[deliverable/binutils-gdb.git] / bfd / libelf.h
index f9cfa1aff72ba62dd709691f0a14635a7e41b8ab..b0143a1b232931b39d592e0ae94039e23b656966 100644 (file)
@@ -42,36 +42,120 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #define ElfNAME(X)     NAME(Elf,X)
 #define elfNAME(X)     NAME(elf,X)
 
+/* Information held for an ELF symbol.  The first field is the
+   corresponding asymbol.  Every symbol is an ELF file is actually a
+   pointer to this structure, although it is often handled as a
+   pointer to an asymbol.  */
+
 typedef struct
 {
+  /* The BFD symbol.  */
   asymbol symbol;
+  /* ELF symbol information.  */
   Elf_Internal_Sym internal_elf_sym;
+  /* Backend specific information.  */
   union
     {
       unsigned int hppa_arg_reloc;
+      PTR mips_extr;
       PTR any;
     }
   tc_data;
 } elf_symbol_type;
 
+/* Constant information held for an ELF backend.  */
+
 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;
+
+  /* Whether this backend is 64 bits or not.  FIXME: Who cares?  */
   int elf_64_p;
+
+  /* The architecture for this backend.  */
   enum bfd_architecture arch;
+
+  /* The ELF machine code (EM_xxxx) for this backend.  */
+  int elf_machine_code;
+
+  /* The maximum page size for this backend.  */
+  bfd_vma maxpagesize;
+
+  /* A function to translate an ELF RELA relocation to a BFD arelent
+     structure.  */
   void (*elf_info_to_howto) PARAMS ((bfd *, arelent *,
                                     Elf_Internal_Rela *));
+
+  /* A function to translate an ELF REL relocation to a BFD arelent
+     structure.  */
   void (*elf_info_to_howto_rel) PARAMS ((bfd *, arelent *,
                                         Elf_Internal_Rel *));
-  bfd_vma maxpagesize;
-  void (*write_relocs) PARAMS ((bfd *, asection *, PTR));
 
+  /* A function to determine whether a symbol is global when
+     partitioning the symbol table into local and global symbols.
+     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) PARAMS ((bfd *, asymbol *));
+
+  /* The remaining functions are hooks which are called only if they
+     are not NULL.  */
+
+  /* A function to permit a backend specific check on whether a
+     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
+     routine will return a bfd_error_wrong_format error.  */
+  boolean (*elf_backend_object_p) PARAMS ((bfd *));
+
+  /* A function to do additional symbol processing when reading the
+     ELF symbol table.  This is where any processor-specific special
+     section indices are handled.  */
   void (*elf_backend_symbol_processing) PARAMS ((bfd *, asymbol *));
-  boolean (*elf_backend_symbol_table_processing) PARAMS ((bfd *, elf_symbol_type *, 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_fake_sections) PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *));
-  boolean (*elf_backend_section_from_bfd_section) PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *));
+
+  /* A function to do additional symbol processing after reading the
+     entire ELF symbol table.  */
+  boolean (*elf_backend_symbol_table_processing) PARAMS ((bfd *,
+                                                         elf_symbol_type *,
+                                                         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
+     unusual sections.  */
+  boolean (*elf_backend_section_processing) PARAMS ((bfd *,
+                                                    Elf32_Internal_Shdr *));
+
+  /* A function to handle unusual section types when creating BFD
+     sections from ELF sections.  */
+  boolean (*elf_backend_section_from_shdr) PARAMS ((bfd *,
+                                                   Elf32_Internal_Shdr *,
+                                                   char *));
+
+  /* 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) PARAMS ((bfd *, Elf32_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
+     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)
+    PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *, int *retval));
+
+  /* A function to do any final processing needed for the ELF file
+     before writing it out.  */
+  void (*elf_backend_final_write_processing) PARAMS ((bfd *));
+
+  /* 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;
 };
 
 struct elf_sym_extra
@@ -81,14 +165,6 @@ struct elf_sym_extra
 
 typedef struct elf_sym_extra Elf_Sym_Extra;
 
-struct bfd_elf_arch_map {
-  enum bfd_architecture bfd_arch;
-  int elf_arch;
-};
-
-extern const struct bfd_elf_arch_map bfd_elf_arch_map[];
-extern const int bfd_elf_arch_map_size;
-
 struct bfd_elf_section_data {
   Elf_Internal_Shdr this_hdr;
   Elf_Internal_Shdr rel_hdr;
@@ -130,6 +206,8 @@ struct elf_obj_tdata
   file_ptr next_file_pos;
   void *prstatus;              /* The raw /proc prstatus structure */
   void *prpsinfo;              /* The raw /proc prpsinfo structure */
+  bfd_vma gp;                  /* The gp value (MIPS only, for now) */
+  int gp_size;                 /* The gp size (MIPS only, for now) */
 };
 
 #define elf_tdata(bfd)         ((bfd) -> tdata.elf_obj_data)
@@ -146,6 +224,8 @@ struct elf_obj_tdata
 #define core_prstatus(bfd)     (elf_tdata(bfd) -> prstatus)
 #define obj_symbols(bfd)       (elf_tdata(bfd) -> symbols)
 #define obj_internal_syms(bfd) (elf_tdata(bfd) -> internal_syms)
+#define elf_gp(bfd)            (elf_tdata(bfd) -> gp)
+#define elf_gp_size(bfd)       (elf_tdata(bfd) -> gp_size)
 
 extern char * elf_string_from_elf_section PARAMS ((bfd *, unsigned, unsigned));
 extern char * elf_get_str_section PARAMS ((bfd *, unsigned));
@@ -161,7 +241,8 @@ extern bfd_reloc_status_type bfd_elf_generic_reloc PARAMS ((bfd *,
                                                            asymbol *,
                                                            PTR,
                                                            asection *,
-                                                           bfd *));
+                                                           bfd *,
+                                                           char **));
 extern boolean bfd_elf_mkobject PARAMS ((bfd *));
 extern Elf_Internal_Shdr *bfd_elf_find_section PARAMS ((bfd *, char *));
 
This page took 0.025029 seconds and 4 git commands to generate.