2005-03-20 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Sun, 20 Mar 2005 23:36:19 +0000 (23:36 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Sun, 20 Mar 2005 23:36:19 +0000 (23:36 +0000)
* elf-bfd.h (elf_backend_data): Add int to
elf_backend_section_from_shdr.
(bfd_elf_section_data): Update comment for this_idx.
(_bfd_elf_make_section_from_shdr): Add int.
* elfxx-mips.h (_bfd_mips_elf_section_from_shdr): Likewise.

* elf.c (_bfd_elf_make_section_from_shdr): Take section index
and use it to set this_idx in bfd_elf_section_data.
(bfd_section_from_shdr): Pass shindex to
_bfd_elf_make_section_from_shdr.
(_bfd_elf_section_from_bfd_section): Use this_idx in
bfd_elf_section_data to find section index.

* elf32-arm.c (elf32_arm_section_from_shdr): Take section
index and pass it to _bfd_elf_make_section_from_shdr.
* elf32-i370.c(i370_elf_section_from_shdr): Likewise.
* elf32-ppc.c (ppc_elf_section_from_shdr): Likewise.
* elf32-sh64.c (sh64_backend_section_from_shdr): Likewise.
* elf32-v850.c (v850_elf_section_from_shdr): Likewise.
* elf64-alpha.c (elf64_alpha_section_from_shdr): Likewise.
* elf64-hppa.c (elf64_hppa_section_from_shdr): Likewise.
* elf64-x86-64.c (elf64_x86_64_section_from_shdr): Likewise.
* elfxx-ia64.c (elfNN_ia64_section_from_shdr): Likewise.
* elfxx-mips.c (_bfd_mips_elf_section_from_shdr): Likewise.

14 files changed:
bfd/ChangeLog
bfd/elf-bfd.h
bfd/elf.c
bfd/elf32-arm.c
bfd/elf32-i370.c
bfd/elf32-ppc.c
bfd/elf32-sh64.c
bfd/elf32-v850.c
bfd/elf64-alpha.c
bfd/elf64-hppa.c
bfd/elf64-x86-64.c
bfd/elfxx-ia64.c
bfd/elfxx-mips.c
bfd/elfxx-mips.h

index f528566be7ece148ced41256f920b124519333be..5c966886c203f9a5c7e0ce95d74e5621c9991956 100644 (file)
@@ -1,3 +1,30 @@
+2005-03-20  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * elf-bfd.h (elf_backend_data): Add int to
+       elf_backend_section_from_shdr.
+       (bfd_elf_section_data): Update comment for this_idx.
+       (_bfd_elf_make_section_from_shdr): Add int.
+       * elfxx-mips.h (_bfd_mips_elf_section_from_shdr): Likewise.
+
+       * elf.c (_bfd_elf_make_section_from_shdr): Take section index
+       and use it to set this_idx in bfd_elf_section_data.
+       (bfd_section_from_shdr): Pass shindex to
+       _bfd_elf_make_section_from_shdr.
+       (_bfd_elf_section_from_bfd_section): Use this_idx in
+       bfd_elf_section_data to find section index.
+
+       * elf32-arm.c (elf32_arm_section_from_shdr): Take section
+       index and pass it to _bfd_elf_make_section_from_shdr.
+       * elf32-i370.c(i370_elf_section_from_shdr): Likewise.
+       * elf32-ppc.c (ppc_elf_section_from_shdr): Likewise.
+       * elf32-sh64.c (sh64_backend_section_from_shdr): Likewise.
+       * elf32-v850.c (v850_elf_section_from_shdr): Likewise.
+       * elf64-alpha.c (elf64_alpha_section_from_shdr): Likewise.
+       * elf64-hppa.c (elf64_hppa_section_from_shdr): Likewise.
+       * elf64-x86-64.c (elf64_x86_64_section_from_shdr): Likewise.
+       * elfxx-ia64.c (elfNN_ia64_section_from_shdr): Likewise.
+       * elfxx-mips.c (_bfd_mips_elf_section_from_shdr): Likewise.
+
 2005-03-19  Danny Smith <dannysmith@users.sourceforge.net>
            Ross Ridge  <rridge@csclub.uwaterloo.ca>
 
index b27aed09486991e8028e8bcfb74c82ff2323a40b..a5047de7a69f2a47bb7a238e10a190f4d006e7c7 100644 (file)
@@ -629,7 +629,7 @@ struct elf_backend_data
   /* A function to handle unusual section types when creating BFD
      sections from ELF sections.  */
   bfd_boolean (*elf_backend_section_from_shdr)
-    (bfd *, Elf_Internal_Shdr *, const char *);
+    (bfd *, Elf_Internal_Shdr *, const char *, int);
 
   /* A function to convert machine dependent section header flags to
      BFD internal section header flags.  */
@@ -1059,8 +1059,7 @@ struct bfd_elf_section_data
   /* The number of relocations currently assigned to REL_HDR2.  */
   unsigned int rel_count2;
 
-  /* The ELF section number of this section.  Only used for an output
-     file.  */
+  /* The ELF section number of this section.  */
   int this_idx;
 
   /* The ELF section number of the reloc section indicated by
@@ -1416,7 +1415,7 @@ extern bfd_boolean bfd_elf_mkcorefile
 extern Elf_Internal_Shdr *bfd_elf_find_section
   (bfd *, char *);
 extern bfd_boolean _bfd_elf_make_section_from_shdr
-  (bfd *, Elf_Internal_Shdr *, const char *);
+  (bfd *, Elf_Internal_Shdr *, const char *, int);
 extern bfd_boolean _bfd_elf_make_section_from_phdr
   (bfd *, Elf_Internal_Phdr *, int, const char *);
 extern struct bfd_hash_entry *_bfd_elf_link_hash_newfunc
index f8cc4011565b97e8eb167a2b9d79b6af27370116..22230f2c777af3e068be90e80b7af37cef82ad5c 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -673,7 +673,8 @@ bfd_elf_is_group_section (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
 bfd_boolean
 _bfd_elf_make_section_from_shdr (bfd *abfd,
                                 Elf_Internal_Shdr *hdr,
-                                const char *name)
+                                const char *name,
+                                int shindex)
 {
   asection *newsect;
   flagword flags;
@@ -692,6 +693,7 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
 
   hdr->bfd_section = newsect;
   elf_section_data (newsect)->this_hdr = *hdr;
+  elf_section_data (newsect)->this_idx = shindex;
 
   /* Always use the real type/flags.  */
   elf_section_type (newsect) = hdr->sh_type;
@@ -1728,10 +1730,10 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
     case SHT_FINI_ARRAY:       /* .fini_array section.  */
     case SHT_PREINIT_ARRAY:    /* .preinit_array section.  */
     case SHT_GNU_LIBLIST:      /* .gnu.liblist section.  */
-      return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
+      return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
 
     case SHT_DYNAMIC:  /* Dynamic linking information.  */
-      if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
+      if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
        return FALSE;
       if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB)
        {
@@ -1782,7 +1784,8 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
          linker.  */
       if ((hdr->sh_flags & SHF_ALLOC) != 0
          && (abfd->flags & DYNAMIC) != 0
-         && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
+         && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name,
+                                               shindex))
        return FALSE;
 
       /* Go looking for SHT_SYMTAB_SHNDX too, since if there is one we
@@ -1826,7 +1829,7 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
 
       /* Besides being a symbol table, we also treat this as a regular
         section, so that objcopy can handle it.  */
-      return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
+      return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
 
     case SHT_SYMTAB_SHNDX:     /* Symbol section indices when >64k sections */
       if (elf_symtab_shndx (abfd) == shindex)
@@ -1862,7 +1865,8 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
          elf_elfsections (abfd)[shindex] = hdr;
          /* We also treat this as a regular section, so that objcopy
             can handle it.  */
-         return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
+         return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
+                                                 shindex);
        }
 
       /* If the string table isn't one of the above, then treat it as a
@@ -1887,7 +1891,7 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
                }
            }
        }
-      return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
+      return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
 
     case SHT_REL:
     case SHT_RELA:
@@ -1904,7 +1908,8 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
            ((*_bfd_error_handler)
             (_("%B: invalid link %lu for reloc section %s (index %u)"),
              abfd, hdr->sh_link, name, shindex));
-           return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
+           return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
+                                                   shindex);
          }
 
        /* For some incomprehensible reason Oracle distributes
@@ -1951,7 +1956,8 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
           can't use it as a reloc section if it points to the null
           section.  */
        if (hdr->sh_link != elf_onesymtab (abfd) || hdr->sh_info == SHN_UNDEF)
-         return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
+         return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
+                                                 shindex);
 
        if (! bfd_section_from_shdr (abfd, hdr->sh_info))
          return FALSE;
@@ -1988,19 +1994,19 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
     case SHT_GNU_verdef:
       elf_dynverdef (abfd) = shindex;
       elf_tdata (abfd)->dynverdef_hdr = *hdr;
-      return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
+      return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
       break;
 
     case SHT_GNU_versym:
       elf_dynversym (abfd) = shindex;
       elf_tdata (abfd)->dynversym_hdr = *hdr;
-      return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
+      return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
       break;
 
     case SHT_GNU_verneed:
       elf_dynverref (abfd) = shindex;
       elf_tdata (abfd)->dynverref_hdr = *hdr;
-      return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
+      return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
       break;
 
     case SHT_SHLIB:
@@ -2013,7 +2019,7 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
       name = group_signature (abfd, hdr);
       if (name == NULL)
        return FALSE;
-      if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name))
+      if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
        return FALSE;
       if (hdr->contents != NULL)
        {
@@ -2039,7 +2045,8 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
 
     default:
       /* Check for any processor-specific section types.  */
-      return bed->elf_backend_section_from_shdr (abfd, hdr, name);
+      return bed->elf_backend_section_from_shdr (abfd, hdr, name,
+                                                shindex);
     }
 
   return TRUE;
@@ -4781,19 +4788,7 @@ _bfd_elf_section_from_bfd_section (bfd *abfd, struct bfd_section *asect)
   else if (bfd_is_und_section (asect))
     index = SHN_UNDEF;
   else
-    {
-      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;
-    }
+    index = -1;
 
   bed = get_elf_backend_data (abfd);
   if (bed->elf_backend_section_from_bfd_section)
index f438f03e7071cc754c707c65cad32e2e013550ab..aa697f4f4644f883d2bc72828d9eb63e5c58a41b 100644 (file)
@@ -5486,13 +5486,15 @@ elf32_arm_fake_sections (bfd * abfd, Elf_Internal_Shdr * hdr, asection * sec)
   return TRUE;
 }
 
-/* Handle an ARM specific section when reading an object file.
-   This is called when elf.c finds a section with an unknown type.  */
+/* Handle an ARM specific section when reading an object file.  This is
+   called when bfd_section_from_shdr finds a section with an unknown
+   type.  */
 
 static bfd_boolean
 elf32_arm_section_from_shdr (bfd *abfd,
                             Elf_Internal_Shdr * hdr,
-                            const char *name)
+                            const char *name,
+                            int shindex)
 {
   /* There ought to be a place to keep ELF backend specific flags, but
      at the moment there isn't one.  We just keep track of the
@@ -5508,7 +5510,7 @@ elf32_arm_section_from_shdr (bfd *abfd,
       return FALSE;
     }
 
-  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
+  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
     return FALSE;
 
   return TRUE;
index f4cd9c15c8f28e6dc21e72816fe0a9b447b0fd21..2166e8aaa7e2d4404cb32a9036735b15fb34432e 100644 (file)
@@ -286,8 +286,6 @@ static void i370_elf_post_process_headers
   PARAMS ((bfd *, struct bfd_link_info *));
 static bfd_boolean i370_elf_create_dynamic_sections
   PARAMS ((bfd *, struct bfd_link_info *));
-static bfd_boolean i370_elf_section_from_shdr
-  PARAMS ((bfd *, Elf_Internal_Shdr *, const char *));
 static bfd_boolean i370_elf_fake_sections
   PARAMS ((bfd *, Elf_Internal_Shdr *, asection *));
 static bfd_boolean i370_elf_check_relocs
@@ -385,15 +383,15 @@ i370_elf_merge_private_bfd_data (ibfd, obfd)
  */
 
 static bfd_boolean
-i370_elf_section_from_shdr (abfd, hdr, name)
-     bfd *abfd;
-     Elf_Internal_Shdr *hdr;
-     const char *name;
+i370_elf_section_from_shdr (bfd *abfd,
+                           Elf_Internal_Shdr *hdr,
+                           const char *name,
+                           int shindex)
 {
   asection *newsect;
   flagword flags;
 
-  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
+  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
     return FALSE;
 
   newsect = hdr->bfd_section;
index 5b32f147db711637d41cc385724b5557d9afe2ca..27eed3b166de7fc9d9bb3a195d81e8eb81571ed6 100644 (file)
@@ -1760,15 +1760,19 @@ ppc_elf_plt_sym_val (bfd_vma i ATTRIBUTE_UNUSED,
 }
 
 /* Handle a PowerPC specific section when reading an object file.  This
-   is called when elfcode.h finds a section with an unknown type.  */
+   is called when bfd_section_from_shdr finds a section with an unknown
+   type.  */
 
 static bfd_boolean
-ppc_elf_section_from_shdr (bfd *abfd, Elf_Internal_Shdr *hdr, const char *name)
+ppc_elf_section_from_shdr (bfd *abfd,
+                          Elf_Internal_Shdr *hdr,
+                          const char *name,
+                          int shindex)
 {
   asection *newsect;
   flagword flags;
 
-  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
+  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
     return FALSE;
 
   newsect = hdr->bfd_section;
index 8fe837794d3c1986bf749ee340361088a736d940..fefd13d0f2b81b126bf931e9e6da526a2a11b110 100644 (file)
@@ -63,7 +63,7 @@ static bfd_boolean sh64_elf_link_output_symbol_hook
   (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *,
    struct elf_link_hash_entry *);
 static bfd_boolean sh64_backend_section_from_shdr
-  (bfd *, Elf_Internal_Shdr *, const char *);
+  (bfd *, Elf_Internal_Shdr *, const char *, int);
 static void sh64_elf_final_write_processing
   (bfd *, bfd_boolean);
 static bfd_boolean sh64_bfd_elf_copy_private_section_data
@@ -253,13 +253,14 @@ sh64_elf_merge_private_data (bfd *ibfd, bfd *obfd)
 }
 
 /* Handle a SH64-specific section when reading an object file.  This
-   is called when elfcode.h finds a section with an unknown type.
+   is called when bfd_section_from_shdr finds a section with an unknown
+   type.
 
    We only recognize SHT_SH5_CR_SORTED, on the .cranges section.  */
 
 bfd_boolean
 sh64_backend_section_from_shdr (bfd *abfd, Elf_Internal_Shdr *hdr,
-                               const char *name)
+                               const char *name, int shindex)
 {
   flagword flags = 0;
 
@@ -284,7 +285,7 @@ sh64_backend_section_from_shdr (bfd *abfd, Elf_Internal_Shdr *hdr,
       return FALSE;
     }
 
-  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
+  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
     return FALSE;
 
   if (flags
index e4ca968e305fe63820af4c21f9bacd9253a4208d..8defeb063f3981e8e88b8025876d249a3d76d748 100644 (file)
@@ -78,8 +78,6 @@ static bfd_boolean v850_elf_add_symbol_hook
 static bfd_boolean v850_elf_link_output_symbol_hook
   PARAMS ((struct bfd_link_info *, const char *, Elf_Internal_Sym *,
           asection *, struct elf_link_hash_entry *));
-static bfd_boolean v850_elf_section_from_shdr
-  PARAMS ((bfd *, Elf_Internal_Shdr *, const char *));
 static bfd_boolean v850_elf_gc_sweep_hook
   PARAMS ((bfd *, struct bfd_link_info *, asection *,
           const Elf_Internal_Rela *));
@@ -2210,16 +2208,16 @@ v850_elf_link_output_symbol_hook (info, name, sym, input_sec, h)
 }
 
 static bfd_boolean
-v850_elf_section_from_shdr (abfd, hdr, name)
-     bfd *abfd;
-     Elf_Internal_Shdr *hdr;
-     const char *name;
+v850_elf_section_from_shdr (bfd *abfd,
+                           Elf_Internal_Shdr *hdr,
+                           const char *name,
+                           int shindex)
 {
   /* There ought to be a place to keep ELF backend specific flags, but
      at the moment there isn't one.  We just keep track of the
      sections by their name, instead.  */
 
-  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
+  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
     return FALSE;
 
   switch (hdr->sh_type)
index f0c22d9656ce1473acff3495bbb1aa36e84f2657..966563c935af9f51adda7aaefd88e31dca4e502b 100644 (file)
@@ -72,8 +72,6 @@ static bfd_boolean elf64_alpha_mkobject
   PARAMS ((bfd *));
 static bfd_boolean elf64_alpha_object_p
   PARAMS ((bfd *));
-static bfd_boolean elf64_alpha_section_from_shdr
-  PARAMS ((bfd *, Elf_Internal_Shdr *, const char *));
 static bfd_boolean elf64_alpha_section_flags
   PARAMS ((flagword *, const Elf_Internal_Shdr *));
 static bfd_boolean elf64_alpha_fake_sections
@@ -2260,15 +2258,16 @@ elf64_alpha_relax_section (abfd, sec, link_info, again)
 #define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so"
 \f
 /* Handle an Alpha specific section when reading an object file.  This
-   is called when elfcode.h finds a section with an unknown type.
+   is called when bfd_section_from_shdr finds a section with an unknown
+   type.
    FIXME: We need to handle the SHF_ALPHA_GPREL flag, but I'm not sure
    how to.  */
 
 static bfd_boolean
-elf64_alpha_section_from_shdr (abfd, hdr, name)
-     bfd *abfd;
-     Elf_Internal_Shdr *hdr;
-     const char *name;
+elf64_alpha_section_from_shdr (bfd *abfd,
+                              Elf_Internal_Shdr *hdr,
+                              const char *name,
+                              int shindex)
 {
   asection *newsect;
 
@@ -2287,7 +2286,7 @@ elf64_alpha_section_from_shdr (abfd, hdr, name)
       return FALSE;
     }
 
-  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
+  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
     return FALSE;
   newsect = hdr->bfd_section;
 
index 869f7ed7072dc5988f1b3c91dc0965995236e561..d306a4045306c97399a4bfdaad33dd9116b62179 100644 (file)
@@ -184,9 +184,6 @@ static const char *get_dyn_name
 static bfd_boolean elf64_hppa_object_p
   PARAMS ((bfd *));
 
-static bfd_boolean elf64_hppa_section_from_shdr
-  PARAMS ((bfd *, Elf_Internal_Shdr *, const char *));
-
 static void elf64_hppa_post_process_headers
   PARAMS ((bfd *, struct bfd_link_info *));
 
@@ -413,10 +410,10 @@ elf64_hppa_object_p (abfd)
 /* Given section type (hdr->sh_type), return a boolean indicating
    whether or not the section is an elf64-hppa specific section.  */
 static bfd_boolean
-elf64_hppa_section_from_shdr (abfd, hdr, name)
-     bfd *abfd;
-     Elf_Internal_Shdr *hdr;
-     const char *name;
+elf64_hppa_section_from_shdr (bfd *abfd,
+                             Elf_Internal_Shdr *hdr,
+                             const char *name,
+                             int shindex)
 {
   asection *newsect;
 
@@ -436,7 +433,7 @@ elf64_hppa_section_from_shdr (abfd, hdr, name)
       return FALSE;
     }
 
-  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
+  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
     return FALSE;
   newsect = hdr->bfd_section;
 
index 08e610b1db8724b3ccf737996ad7ddd174f6c908..0608a70fd31d8cc877bdc15384cb8d3df3370983 100644 (file)
@@ -2822,12 +2822,15 @@ elf64_x86_64_plt_sym_val (bfd_vma i, const asection *plt,
    is called when elfcode.h finds a section with an unknown type.  */
 
 static bfd_boolean
-elf64_x86_64_section_from_shdr (bfd *abfd, Elf_Internal_Shdr *hdr, const char *name)
+elf64_x86_64_section_from_shdr (bfd *abfd,
+                               Elf_Internal_Shdr *hdr,
+                               const char *name,
+                               int shindex)
 {
   if (hdr->sh_type != SHT_X86_64_UNWIND)
     return FALSE;
 
-  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
+  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
     return FALSE;
 
   return TRUE;
index f94182d7ae8186121d7e16295eb88385ba13655c..b19b172e6f9dbb9ba1c420d602e49d9a1525367d 100644 (file)
@@ -183,8 +183,6 @@ static void elfNN_ia64_relax_ldxmov
   PARAMS((bfd_byte *contents, bfd_vma off));
 static bfd_boolean is_unwind_section_name
   PARAMS ((bfd *abfd, const char *));
-static bfd_boolean elfNN_ia64_section_from_shdr
-  PARAMS ((bfd *, Elf_Internal_Shdr *, const char *));
 static bfd_boolean elfNN_ia64_section_flags
   PARAMS ((flagword *, const Elf_Internal_Shdr *));
 static bfd_boolean elfNN_ia64_fake_sections
@@ -1261,13 +1259,14 @@ is_unwind_section_name (abfd, name)
 }
 
 /* Handle an IA-64 specific section when reading an object file.  This
-   is called when elfcode.h finds a section with an unknown type.  */
+   is called when bfd_section_from_shdr finds a section with an unknown
+   type.  */
 
 static bfd_boolean
-elfNN_ia64_section_from_shdr (abfd, hdr, name)
-     bfd *abfd;
-     Elf_Internal_Shdr *hdr;
-     const char *name;
+elfNN_ia64_section_from_shdr (bfd *abfd,
+                             Elf_Internal_Shdr *hdr,
+                             const char *name,
+                             int shindex)
 {
   asection *newsect;
 
@@ -1291,7 +1290,7 @@ elfNN_ia64_section_from_shdr (abfd, hdr, name)
       return FALSE;
     }
 
-  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
+  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
     return FALSE;
   newsect = hdr->bfd_section;
 
index 847e7e6af2ee12f7288f1aaab94a3b1a70e80596..a4baea95138002b5ba71f9ef1100a930bf33e6ff 100644 (file)
@@ -5068,8 +5068,10 @@ _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
    how to.  */
 
 bfd_boolean
-_bfd_mips_elf_section_from_shdr (bfd *abfd, Elf_Internal_Shdr *hdr,
-                                const char *name)
+_bfd_mips_elf_section_from_shdr (bfd *abfd,
+                                Elf_Internal_Shdr *hdr,
+                                const char *name,
+                                int shindex)
 {
   flagword flags = 0;
 
@@ -5141,7 +5143,7 @@ _bfd_mips_elf_section_from_shdr (bfd *abfd, Elf_Internal_Shdr *hdr,
       return FALSE;
     }
 
-  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
+  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
     return FALSE;
 
   if (flags)
index 29686b20491ad78a7f321540edf7177f2b71760d..3eb9a11bd403ccfe9f52f4eb4dfa3ebdf70be4db 100644 (file)
@@ -31,7 +31,7 @@ extern bfd_boolean _bfd_mips_elf_name_local_section_symbols
 extern bfd_boolean _bfd_mips_elf_section_processing
   (bfd *, Elf_Internal_Shdr *);
 extern bfd_boolean _bfd_mips_elf_section_from_shdr
-  (bfd *, Elf_Internal_Shdr *, const char *);
+  (bfd *, Elf_Internal_Shdr *, const char *, int);
 extern bfd_boolean _bfd_mips_elf_fake_sections
   (bfd *, Elf_Internal_Shdr *, asection *);
 extern bfd_boolean _bfd_mips_elf_section_from_bfd_section