* elflink.c (is_reloc_section): New function. Returns true if the
[deliverable/binutils-gdb.git] / bfd / elf32-arm.c
index 9008a4ba0131c58c2e021f2b16926c6f8f674fd8..5b78dc3dfddb0c73d1f3ad65a8513dc73d6c9200 100644 (file)
@@ -2466,19 +2466,6 @@ stub_hash_newfunc (struct bfd_hash_entry *entry,
   return entry;
 }
 
-/* Return true if NAME is the name of the relocation section associated
-   with S.  */
-
-static bfd_boolean
-reloc_section_p (struct elf32_arm_link_hash_table *htab,
-                const char *name, asection *s)
-{
-  if (htab->use_rel)
-    return CONST_STRNEQ (name, ".rel") && strcmp (s->name, name + 4) == 0;
-  else
-    return CONST_STRNEQ (name, ".rela") && strcmp (s->name, name + 5) == 0;
-}
-
 /* Create .got, .gotplt, and .rel(a).got sections in DYNOBJ, and set up
    shortcuts to them in our hash table.  */
 
@@ -5960,19 +5947,11 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
 
          if (sreloc == NULL)
            {
-             const char * name;
+             sreloc = _bfd_elf_get_dynamic_reloc_section (input_bfd, input_section,
+                                                          ! globals->use_rel);
 
-             name = (bfd_elf_string_from_elf_section
-                     (input_bfd,
-                      elf_elfheader (input_bfd)->e_shstrndx,
-                      elf_section_data (input_section)->rel_hdr.sh_name));
-             if (name == NULL)
+             if (sreloc == NULL)
                return bfd_reloc_notsupported;
-
-             BFD_ASSERT (reloc_section_p (globals, name, input_section));
-
-             sreloc = bfd_get_section_by_name (dynobj, name);
-             BFD_ASSERT (sreloc != NULL);
            }
 
          skip = FALSE;
@@ -9278,40 +9257,23 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
                /* When creating a shared object, we must copy these
                    reloc types into the output file.  We create a reloc
                    section in dynobj and make room for this reloc.  */
-               if (sreloc == NULL)
+               if (sreloc == NULL)
                  {
-                   const char * name;
+                   sreloc = _bfd_elf_make_dynamic_reloc_section
+                     (sec, dynobj, 2, abfd, ! htab->use_rel);
 
-                   name = (bfd_elf_string_from_elf_section
-                           (abfd,
-                            elf_elfheader (abfd)->e_shstrndx,
-                            elf_section_data (sec)->rel_hdr.sh_name));
-                   if (name == NULL)
+                   if (sreloc == NULL)
                      return FALSE;
 
-                   BFD_ASSERT (reloc_section_p (htab, name, sec));
-
-                   sreloc = bfd_get_section_by_name (dynobj, name);
-                   if (sreloc == NULL)
+                   /* BPABI objects never have dynamic relocations mapped.  */
+                   if (! htab->symbian_p)
                      {
-                       flagword flags;
-
-                       flags = (SEC_HAS_CONTENTS | SEC_READONLY
-                                | SEC_IN_MEMORY | SEC_LINKER_CREATED);
-                       if ((sec->flags & SEC_ALLOC) != 0
-                           /* BPABI objects never have dynamic
-                              relocations mapped.  */
-                           && !htab->symbian_p)
-                         flags |= SEC_ALLOC | SEC_LOAD;
-                       sreloc = bfd_make_section_with_flags (dynobj,
-                                                             name,
-                                                             flags);
-                       if (sreloc == NULL
-                           || ! bfd_set_section_alignment (dynobj, sreloc, 2))
-                         return FALSE;
-                     }
+                       flagword flags;
 
-                   elf_section_data (sec)->sreloc = sreloc;
+                       flags = bfd_get_section_flags (dynobj, sreloc);
+                       flags &= ~(SEC_LOAD | SEC_ALLOC);
+                       bfd_set_section_flags (dynobj, sreloc, flags);
+                     }
                  }
 
                /* If this is a global symbol, we count the number of
This page took 0.036106 seconds and 4 git commands to generate.