Initialise EI_OSABI and EI_ABIVERSION fields of e_ident array.
authorNick Clifton <nickc@redhat.com>
Fri, 28 May 1999 13:24:33 +0000 (13:24 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 28 May 1999 13:24:33 +0000 (13:24 +0000)
Add ability for backends to process program and section headers after they
have been created.

bfd/ChangeLog
bfd/elf-bfd.h
bfd/elf.c
bfd/elfxx-target.h

index 09dac05d659ae3f69da6e7345afe878acfb43ec5..621fa91a2a385f3a815e3adfc6862df7b55f978d 100644 (file)
@@ -1,3 +1,17 @@
+1999-05-28  Nick Clifton  <nickc@cygnus.com>
+
+       * elf-bfd.h (struct elf_backend_data): Add new field:
+       elf_backend_post_process_headers.
+
+       * elfxx-target.h (elf_backend_post_process_headers): Define to
+       NULL if not already defined.
+       (elfNN_bed): Initialise elf_backend_post_process_headers field. 
+
+       * elf.c (prep_headers): Set the EI_OSABI and EI_ABIVERSION fields
+       to zero.
+       (_bfd_elf_compute_section_file_positions): Call
+       elf_backend_post_process_headers if defined. 
+
 1999-05-28  Ian Lance Taylor  <ian@zembu.com>
 
        * configure.in: Check whether getuid and getgid exist.
index 82ffe2add97e3d067baaa66c85470111db84768f..218780dae2854c730a6e94f589ecb98424553008 100644 (file)
@@ -515,6 +515,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;
index 36a4b6bd1e76df4eb9ebf19531b51997aba06376..135e55392ac6180c1f8b39be1b48df7064f32db1 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -2011,6 +2011,10 @@ _bfd_elf_compute_section_file_positions (abfd, link_info)
   if (! prep_headers (abfd))
     return false;
 
+  /* Post process the headers if necessary.  */
+  if (bed->elf_backend_post_process_headers)
+    (*bed->elf_backend_post_process_headers) (abfd, link_info);
+
   failed = false;
   bfd_map_over_sections (abfd, elf_fake_sections, &failed);
   if (failed)
@@ -3042,6 +3046,9 @@ prep_headers (abfd)
     bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB;
   i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
 
+  i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_SYSV;
+  i_ehdrp->e_ident[EI_ABIVERSION] = 0;
+
   for (count = EI_PAD; count < EI_NIDENT; count++)
     i_ehdrp->e_ident[count] = 0;
 
index 9acabd1e6079b0156c518cba83f3ead5873ddcf5..dc116ef3a9a7395a924369dcc55058a5e51f8ab8 100644 (file)
@@ -290,6 +290,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #ifndef elf_backend_plt_header_size
 #define elf_backend_plt_header_size    0
 #endif
+#ifndef elf_backend_post_process_headers
+#define elf_backend_post_process_headers       NULL
+#endif
 
 #ifndef ELF_MACHINE_ALT1
 #define ELF_MACHINE_ALT1 0
@@ -344,6 +347,7 @@ static CONST struct elf_backend_data elfNN_bed =
   elf_backend_modify_segment_map,
   elf_backend_gc_mark_hook,
   elf_backend_gc_sweep_hook,
+  elf_backend_post_process_headers,
   elf_backend_ecoff_debug_swap,
   ELF_MACHINE_ALT1,
   ELF_MACHINE_ALT2,