* libelf.h: Added some comments.
authorIan Lance Taylor <ian@airs.com>
Tue, 9 Nov 1993 16:33:28 +0000 (16:33 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 9 Nov 1993 16:33:28 +0000 (16:33 +0000)
(struct elf_backend_data): Added elf_backend_ecoff_debug_swap
field.  Removed unused write_relocs field.
* elf32-target.h: Adjusted elf_backend_data initialization
accordingly.
* elf64-target.h: Corrected elf_backend_data initialization to
fill in all fields and to set elf_64_p to 1.

bfd/ChangeLog
bfd/elf32-target.h
bfd/elf64-target.h
bfd/libelf.h

index d0a7f59f4bee1a3d32c9d53c96c9de4c0e0ded7e..0cc74106379f194ec9205a390fb78272f3734cbc 100644 (file)
@@ -1,3 +1,13 @@
+Tue Nov  9 11:26:05 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * libelf.h: Added some comments.
+       (struct elf_backend_data): Added elf_backend_ecoff_debug_swap
+       field.  Removed unused write_relocs field.
+       * elf32-target.h: Adjusted elf_backend_data initialization
+       accordingly.
+       * elf64-target.h: Corrected elf_backend_data initialization to
+       fill in all fields and to set elf_64_p to 1.
+
 Mon Nov  8 18:13:14 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
 
        * elfcode.h (bfd_section_from_shdr): Remove duplicate assignment
index 8d0076bfae9d27b96c66f1fe98f4c08fb404b17e..9b1c832e5c45118c845190b14fc87a84860354b4 100644 (file)
@@ -79,6 +79,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #ifndef elf_backend_section_from_bfd_section
 #define elf_backend_section_from_bfd_section   0       /* elf_backend_section_from_bfd_section */
 #endif
+#ifndef elf_backend_ecoff_debug_swap
+#define elf_backend_ecoff_debug_swap   0       /* elf_backed_ecoff_debug_swap */
+#endif
 
 static CONST struct elf_backend_data elf32_bed =
 {
@@ -89,16 +92,16 @@ static CONST struct elf_backend_data elf32_bed =
 #endif
   0,                           /* elf_64_p */
   ELF_ARCH,                    /* arch */
+  ELF_MAXPAGESIZE,             /* maxpagesize */
   elf_info_to_howto,           /* elf_info_to_howto */
   elf_info_to_howto_rel,       /* elf_info_to_howto_rel */
-  ELF_MAXPAGESIZE,             /* maxpagesize */
-  bfd_elf32__write_relocs,     /* write_relocs */
   elf_backend_symbol_processing,       /* elf_backend_symbol_processing */
   elf_backend_symbol_table_processing, /* elf_backend_symbol_table_processing */
   elf_backend_section_processing,      /* elf_backend_section_processing */
   elf_backend_section_from_shdr,       /* elf_backend_section_from_shdr */
   elf_backend_fake_sections,           /* elf_backend_fake_sections */
   elf_backend_section_from_bfd_section,        /* elf_backend_section_from_bfd_section */
+  elf_backend_ecoff_debug_swap         /* elf_backend_ecoff_debug_swap */
 };
 
 #ifdef TARGET_BIG_SYM
index d7ee425aae26ae8e1757110999aba0ee3744ad25..790e4a6d3003f71489c6f726adfd4f9fba44610a 100644 (file)
@@ -59,6 +59,28 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #define ELF_MAXPAGESIZE 1
 #endif
 
+#ifndef elf_backend_symbol_processing
+#define elf_backend_symbol_processing  0       /* elf_backend_symbol_processing */
+#endif
+#ifndef elf_backend_symbol_table_processing
+#define elf_backend_symbol_table_processing    0       /* elf_backend_symbol_table_processing */
+#endif
+#ifndef elf_backend_section_processing
+#define elf_backend_section_processing 0       /* elf_backend_section_processing */
+#endif
+#ifndef elf_backend_section_from_shdr
+#define elf_backend_section_from_shdr  0       /* elf_backend_section_from_shdr */
+#endif
+#ifndef elf_backend_fake_sections
+#define elf_backend_fake_sections      0       /* elf_backend_fake_sections */
+#endif
+#ifndef elf_backend_section_from_bfd_section
+#define elf_backend_section_from_bfd_section   0       /* elf_backend_section_from_bfd_section */
+#endif
+#ifndef elf_backend_ecoff_debug_swap
+#define elf_backend_ecoff_debug_swap   0       /* elf_backed_ecoff_debug_swap */
+#endif
+
 static CONST struct elf_backend_data elf64_bed =
 {
 #ifdef USE_REL
@@ -66,15 +88,18 @@ static CONST struct elf_backend_data elf64_bed =
 #else
   1,                           /* use_rela_p */
 #endif
-  0,                           /* elf_64_p */
+  1,                           /* elf_64_p */
   ELF_ARCH,                    /* arch */
+  ELF_MAXPAGESIZE,             /* maxpagesize */
   elf_info_to_howto,           /* elf_info_to_howto */
-#ifdef elf_info_to_howto_rel
   elf_info_to_howto_rel,       /* elf_info_to_howto_rel */
-#else
-  0,                           /* elf_info_to_howto_rel */
-#endif
-  ELF_MAXPAGESIZE,             /* maxpagesize */
+  elf_backend_symbol_processing,       /* elf_backend_symbol_processing */
+  elf_backend_symbol_table_processing, /* elf_backend_symbol_table_processing */
+  elf_backend_section_processing,      /* elf_backend_section_processing */
+  elf_backend_section_from_shdr,       /* elf_backend_section_from_shdr */
+  elf_backend_fake_sections,           /* elf_backend_fake_sections */
+  elf_backend_section_from_bfd_section,        /* elf_backend_section_from_bfd_section */
+  elf_backend_ecoff_debug_swap         /* elf_backend_ecoff_debug_swap */
 };
 
 #ifdef TARGET_BIG_SYM
index 187c51a29c0bb7f1f144dfcf30b20be24f791675..2c0969a9abd004756f5e42e13970d4f916e768cd 100644 (file)
@@ -42,10 +42,18 @@ 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;
@@ -54,24 +62,77 @@ typedef struct
   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 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));
 
+  /* The remaining functions are hooks which are called only if they
+     are not NULL.  */
+
+  /* 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 *, int *));
+
+  /* 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));
+
+  /* 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