* elf-bfd.h (elf_backend_data <elf_backend_section_from_bfd_section>):
authorAlan Modra <amodra@gmail.com>
Thu, 17 Jan 2002 13:02:40 +0000 (13:02 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 17 Jan 2002 13:02:40 +0000 (13:02 +0000)
Remove "Elf_Internal_Shdr *" param.
(_bfd_mips_elf_section_from_bfd_section): Ditto.
* elf32-mips.c (_bfd_mips_elf_section_from_bfd_section): Ditto.
* elf32-m32r.c (_bfd_m32r_elf_section_from_bfd_section): Ditto.
* elf32-v850.c (v850_elf_section_from_bfd_section): Ditto.
* elf64-mmix.c (mmix_elf_section_from_bfd_section): Ditto.
* elfxx-ia64.c (elfNN_hpux_backend_section_from_bfd_section): Ditto.
* elf.c (_bfd_elf_section_from_bfd_section): Allow backend
function to override special sections.  Remove hdr arg from
backend call, and don't loop.

bfd/ChangeLog
bfd/elf-bfd.h
bfd/elf.c
bfd/elf32-m32r.c
bfd/elf32-mips.c
bfd/elf32-v850.c
bfd/elf64-mmix.c
bfd/elfxx-ia64.c

index f366a99..09e3eca 100644 (file)
@@ -1,3 +1,17 @@
+2002-01-17  Alan Modra  <amodra@bigpond.net.au>
+
+       * elf-bfd.h (elf_backend_data <elf_backend_section_from_bfd_section>):
+       Remove "Elf_Internal_Shdr *" param.
+       (_bfd_mips_elf_section_from_bfd_section): Ditto.
+       * elf32-mips.c (_bfd_mips_elf_section_from_bfd_section): Ditto.
+       * elf32-m32r.c (_bfd_m32r_elf_section_from_bfd_section): Ditto.
+       * elf32-v850.c (v850_elf_section_from_bfd_section): Ditto.
+       * elf64-mmix.c (mmix_elf_section_from_bfd_section): Ditto.
+       * elfxx-ia64.c (elfNN_hpux_backend_section_from_bfd_section): Ditto.
+       * elf.c (_bfd_elf_section_from_bfd_section): Allow backend
+       function to override special sections.  Remove hdr arg from
+       backend call, and don't loop.
+
 2002-01-16  Eric Christopher  <echristo@redhat.com>
 
        * elf32-mips.c (mips_elf_calculate_relocation): Set require_jalxp
index c5f7a74..4a1ee2a 100644 (file)
@@ -493,7 +493,7 @@ struct elf_backend_data
      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));
+    PARAMS ((bfd *, asection *, int *retval));
 
   /* If this field is not NULL, it is called by the add_symbols phase
      of a link just before adding a symbol to the global linker hash
@@ -1541,7 +1541,7 @@ extern boolean _bfd_mips_elf_section_from_shdr
 extern boolean _bfd_mips_elf_fake_sections
   PARAMS ((bfd *, Elf_Internal_Shdr *, asection *));
 extern boolean _bfd_mips_elf_section_from_bfd_section
-  PARAMS ((bfd *, Elf_Internal_Shdr *, asection *, int *));
+  PARAMS ((bfd *, asection *, int *));
 extern boolean _bfd_mips_elf_section_processing
   PARAMS ((bfd *, Elf_Internal_Shdr *));
 extern void _bfd_mips_elf_symbol_processing
index 080d517..2c14de8 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -4050,50 +4050,47 @@ _bfd_elf_section_from_bfd_section (abfd, asect)
      bfd *abfd;
      struct sec *asect;
 {
-  struct elf_backend_data *bed = get_elf_backend_data (abfd);
-  Elf_Internal_Shdr **i_shdrp = elf_elfsections (abfd);
+  struct elf_backend_data *bed;
   int index;
-  Elf_Internal_Shdr *hdr;
-  int maxindex = elf_numsections (abfd);
 
   if (elf_section_data (asect) != NULL
       && elf_section_data (asect)->this_idx != 0)
     return elf_section_data (asect)->this_idx;
 
   if (bfd_is_abs_section (asect))
-    return SHN_ABS;
-  if (bfd_is_com_section (asect))
-    return SHN_COMMON;
-  if (bfd_is_und_section (asect))
-    return SHN_UNDEF;
-
-  for (index = 1; index < maxindex; index++)
+    index = SHN_ABS;
+  else if (bfd_is_com_section (asect))
+    index = SHN_COMMON;
+  else if (bfd_is_und_section (asect))
+    index = SHN_UNDEF;
+  else
     {
-      hdr = i_shdrp[index];
-      if (hdr != NULL && hdr->bfd_section == asect)
-       return index;
+      Elf_Internal_Shdr **i_shdrp = elf_elfsections (abfd);
+      int maxindex = elf_numsections (abfd);
+
+      for (index = 1; index < maxindex; index++)
+       {
+         Elf_Internal_Shdr *hdr = i_shdrp[index];
+
+         if (hdr != NULL && hdr->bfd_section == asect)
+           return index;
+       }
+      index = -1;
     }
 
+  bed = get_elf_backend_data (abfd);
   if (bed->elf_backend_section_from_bfd_section)
     {
-      for (index = 0; index < maxindex; index++)
-       {
-         int retval;
+      int retval = index;
 
-         hdr = i_shdrp[index];
-         if (hdr == NULL)
-           continue;
-
-         retval = index;
-         if ((*bed->elf_backend_section_from_bfd_section)
-             (abfd, hdr, asect, &retval))
-           return retval;
-       }
+      if ((*bed->elf_backend_section_from_bfd_section) (abfd, asect, &retval))
+       return retval;
     }
 
-  bfd_set_error (bfd_error_nonrepresentable_section);
+  if (index == -1)
+    bfd_set_error (bfd_error_nonrepresentable_section);
 
-  return SHN_BAD;
+  return index;
 }
 
 /* Given a BFD symbol, return the index in the ELF symbol table, or -1
index b565b57..1ce1827 100644 (file)
@@ -45,7 +45,7 @@ static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup
 static void m32r_info_to_howto_rel
   PARAMS ((bfd *, arelent *, Elf32_Internal_Rel *));
 boolean _bfd_m32r_elf_section_from_bfd_section
-  PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *, int *));
+  PARAMS ((bfd *, asection *, int *));
 void _bfd_m32r_elf_symbol_processing
   PARAMS ((bfd *, asymbol *));
 static boolean m32r_elf_add_symbol_hook
@@ -765,9 +765,8 @@ m32r_info_to_howto_rel (abfd, cache_ptr, dst)
    index.  */
 
 boolean
-_bfd_m32r_elf_section_from_bfd_section (abfd, hdr, sec, retval)
+_bfd_m32r_elf_section_from_bfd_section (abfd, sec, retval)
      bfd *abfd ATTRIBUTE_UNUSED;
-     Elf32_Internal_Shdr *hdr ATTRIBUTE_UNUSED;
      asection *sec;
      int *retval;
 {
index 4bb1fcb..110b609 100644 (file)
@@ -3585,9 +3585,8 @@ _bfd_mips_elf_fake_sections (abfd, hdr, sec)
    the .scommon section.  */
 
 boolean
-_bfd_mips_elf_section_from_bfd_section (abfd, hdr, sec, retval)
+_bfd_mips_elf_section_from_bfd_section (abfd, sec, retval)
      bfd *abfd ATTRIBUTE_UNUSED;
-     Elf_Internal_Shdr *hdr ATTRIBUTE_UNUSED;
      asection *sec;
      int *retval;
 {
index a111730..ae0a0c4 100644 (file)
@@ -69,7 +69,7 @@ static boolean v850_elf_merge_private_bfd_data
 static boolean v850_elf_print_private_bfd_data
   PARAMS ((bfd *, PTR));
 static boolean v850_elf_section_from_bfd_section
-  PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *, int *));
+  PARAMS ((bfd *, asection *, int *));
 static void v850_elf_symbol_processing
   PARAMS ((bfd *, asymbol *));
 static boolean v850_elf_add_symbol_hook
@@ -1930,9 +1930,8 @@ static asymbol * v850_elf_zcom_symbol_ptr;
    corresponding ELF section index.  */
 
 static boolean
-v850_elf_section_from_bfd_section (abfd, hdr, sec, retval)
+v850_elf_section_from_bfd_section (abfd, sec, retval)
      bfd *                 abfd ATTRIBUTE_UNUSED;
-     Elf32_Internal_Shdr * hdr ATTRIBUTE_UNUSED;
      asection *            sec;
      int *                 retval;
 {
index 3911976..8ad8d00 100644 (file)
@@ -77,7 +77,7 @@ static bfd_reloc_status_type mmix_elf_perform_relocation
   PARAMS ((asection *, reloc_howto_type *, PTR, bfd_vma, bfd_vma));
 
 static boolean mmix_elf_section_from_bfd_section
-  PARAMS ((bfd *, Elf64_Internal_Shdr *, asection *, int *));
+  PARAMS ((bfd *, asection *, int *));
 
 static boolean mmix_elf_add_symbol_hook
   PARAMS ((bfd *, struct bfd_link_info *, const Elf_Internal_Sym *,
@@ -1557,9 +1557,8 @@ mmix_elf_symbol_processing (abfd, asym)
    index.  */
 
 static boolean
-mmix_elf_section_from_bfd_section (abfd, hdr, sec, retval)
+mmix_elf_section_from_bfd_section (abfd, sec, retval)
      bfd *                 abfd ATTRIBUTE_UNUSED;
-     Elf64_Internal_Shdr * hdr ATTRIBUTE_UNUSED;
      asection *            sec;
      int *                 retval;
 {
index c377f06..ee49f5a 100644 (file)
@@ -312,7 +312,7 @@ static boolean elfNN_ia64_hpux_vec
 static void elfNN_hpux_post_process_headers
   PARAMS ((bfd *abfd, struct bfd_link_info *info));
 boolean elfNN_hpux_backend_section_from_bfd_section
-  PARAMS ((bfd *abfd, ElfNN_Internal_Shdr *hdr, asection *sec, int *retval));
+  PARAMS ((bfd *abfd, asection *sec, int *retval));
 \f
 /* ia64-specific relocation */
 
@@ -4481,9 +4481,8 @@ elfNN_hpux_post_process_headers (abfd, info)
 }
 
 boolean
-elfNN_hpux_backend_section_from_bfd_section (abfd, hdr, sec, retval)
+elfNN_hpux_backend_section_from_bfd_section (abfd, sec, retval)
        bfd *abfd ATTRIBUTE_UNUSED;
-       Elf32_Internal_Shdr *hdr ATTRIBUTE_UNUSED;
        asection *sec;
        int *retval;
 {