* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Add sinterpptr
authorIan Lance Taylor <ian@airs.com>
Wed, 15 Jun 1994 19:58:59 +0000 (19:58 +0000)
committerIan Lance Taylor <ian@airs.com>
Wed, 15 Jun 1994 19:58:59 +0000 (19:58 +0000)
argument, and set it to the .interp section.
* bfd-in.h (bfd_elf32_size_dynamic_sections): Update prototype.
(bfd_elf64_size_dynamic_sections): Likewise.
* bfd-in2.h: Rebuilt.

bfd/ChangeLog
bfd/bfd-in.h
bfd/bfd-in2.h
bfd/elfcode.h

index 7f1406fbfbb7e78f8aec4f2847e66fcc4b9dfef1..adf84f99774a16008c729ade124829e56fe4a4d9 100644 (file)
@@ -1,5 +1,11 @@
 Wed Jun 15 01:34:07 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
 
+       * elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Add sinterpptr
+       argument, and set it to the .interp section.
+       * bfd-in.h (bfd_elf32_size_dynamic_sections): Update prototype.
+       (bfd_elf64_size_dynamic_sections): Likewise.
+       * bfd-in2.h: Rebuilt.
+
        * coff-sparc.c (SWAP_OUT_RELOC_EXTRA): Define to clear the r_spare
        field of the reloc rather than letting it be garbage.
 
index 5e8fa63faece9382d303efcf1954fa6ec8aa049a..645f24b4f79e2a6e67cf5624aeaecc5c635ae76b 100644 (file)
@@ -532,9 +532,9 @@ extern boolean bfd_elf32_record_link_assignment
 extern boolean bfd_elf64_record_link_assignment
   PARAMS ((bfd *, struct bfd_link_info *, const char *));
 extern boolean bfd_elf32_size_dynamic_sections
-  PARAMS ((bfd *, struct bfd_link_info *));
+  PARAMS ((bfd *, struct bfd_link_info *, struct sec **));
 extern boolean bfd_elf64_size_dynamic_sections
-  PARAMS ((bfd *, struct bfd_link_info *));
+  PARAMS ((bfd *, struct bfd_link_info *, struct sec **));
 
 /* SunOS shared library support routines for the linker.  */
 
index 0baeb16b697c4588e3d44a71282737aa86283540..39bda1e071a02e938e07859b3d6dbb106ddb8f12 100644 (file)
@@ -532,9 +532,9 @@ extern boolean bfd_elf32_record_link_assignment
 extern boolean bfd_elf64_record_link_assignment
   PARAMS ((bfd *, struct bfd_link_info *, const char *));
 extern boolean bfd_elf32_size_dynamic_sections
-  PARAMS ((bfd *, struct bfd_link_info *));
+  PARAMS ((bfd *, struct bfd_link_info *, struct sec **));
 extern boolean bfd_elf64_size_dynamic_sections
-  PARAMS ((bfd *, struct bfd_link_info *));
+  PARAMS ((bfd *, struct bfd_link_info *, struct sec **));
 
 /* SunOS shared library support routines for the linker.  */
 
index 0181a5593907694a2153b42f8bc8771a7eb67458..5cdd340bb2d02782cb1f0caa303119af73bd3f5c 100644 (file)
@@ -1278,17 +1278,6 @@ assign_section_numbers (abfd)
 
   section_number = 1;
 
-  t->shstrtab_section = section_number++;
-  elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
-  t->shstrtab_hdr.sh_size = elf_shstrtab (abfd)->length;
-  t->shstrtab_hdr.contents = (PTR) elf_shstrtab (abfd)->tab;
-
-  if (abfd->symcount > 0)
-    {
-      t->symtab_section = section_number++;
-      t->strtab_section = section_number++;
-    }
-
   for (sec = abfd->sections; sec; sec = sec->next)
     {
       struct bfd_elf_section_data *d = elf_section_data (sec);
@@ -1300,6 +1289,17 @@ assign_section_numbers (abfd)
        d->rel_idx = section_number++;
     }
 
+  t->shstrtab_section = section_number++;
+  elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
+  t->shstrtab_hdr.sh_size = elf_shstrtab (abfd)->length;
+  t->shstrtab_hdr.contents = (PTR) elf_shstrtab (abfd)->tab;
+
+  if (abfd->symcount > 0)
+    {
+      t->symtab_section = section_number++;
+      t->strtab_section = section_number++;
+    }
+
   elf_elfheader (abfd)->e_shnum = section_number;
 
   /* Set up the list of section header pointers, in agreement with the
@@ -4735,9 +4735,10 @@ static const size_t elf_buckets[] =
    addresses of the various sections.  */
 
 boolean
-NAME(bfd_elf,size_dynamic_sections) (output_bfd, info)
+NAME(bfd_elf,size_dynamic_sections) (output_bfd, info, sinterpptr)
      bfd *output_bfd;
      struct bfd_link_info *info;
+     asection **sinterpptr;
 {
   bfd *dynobj;
   size_t dynsymcount;
@@ -4747,6 +4748,8 @@ NAME(bfd_elf,size_dynamic_sections) (output_bfd, info)
   size_t bucketcount;
   struct elf_backend_data *bed;
 
+  *sinterpptr = NULL;
+
   dynobj = elf_hash_table (info)->dynobj;
   dynsymcount = elf_hash_table (info)->dynsymcount;
 
@@ -4755,6 +4758,9 @@ NAME(bfd_elf,size_dynamic_sections) (output_bfd, info)
   if (dynobj == NULL)
     return true;
 
+  *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
+  BFD_ASSERT (*sinterpptr != NULL);
+
   /* Set the size of the .dynsym and .hash sections.  We counted the
      number of dynamic symbols in elf_link_add_object_symbols.  We
      will build the contents of .dynsym and .hash when we build the