* doc/c-arm.texi: Add new fpe options to list of supported flags.
[deliverable/binutils-gdb.git] / bfd / elf32-i370.c
index a93e9a7c1227ddfd3b8930837dcd959bb9e7ff8f..5ac43dda75639d85781b83f5c98226c0c6a65113 100644 (file)
@@ -301,7 +301,6 @@ i370_elf_reloc_type_lookup (abfd, code)
   return i370_elf_howto_table[ (int)i370_reloc ];
 };
 
-static boolean i370_elf_copy_private_bfd_data PARAMS ((bfd *, bfd *));
 static boolean i370_elf_merge_private_bfd_data PARAMS ((bfd *, bfd *));
 
 static boolean i370_elf_relocate_section PARAMS ((bfd *,
@@ -381,24 +380,6 @@ i370_elf_set_private_flags (abfd, flags)
   return true;
 }
 
-/* Copy backend specific data from one object module to another */
-static boolean
-i370_elf_copy_private_bfd_data (ibfd, obfd)
-     bfd *ibfd;
-     bfd *obfd;
-{
-  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
-      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return true;
-
-  BFD_ASSERT (!elf_flags_init (obfd)
-             || elf_elfheader (obfd)->e_flags == elf_elfheader (ibfd)->e_flags);
-
-  elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
-  elf_flags_init (obfd) = true;
-  return true;
-}
-
 /* Merge backend specific data from an object file to the output
    object file when linking */
 static boolean
@@ -900,12 +881,16 @@ i370_elf_size_dynamic_sections (output_bfd, info)
          asection **spp;
 
          for (spp = &s->output_section->owner->sections;
-              *spp != s->output_section;
+              *spp != NULL;
               spp = &(*spp)->next)
-           ;
-         *spp = s->output_section->next;
-         --s->output_section->owner->section_count;
-
+           {
+             if (*spp == s->output_section)
+               {
+                 bfd_section_list_remove (s->output_section->owner, spp);
+                 --s->output_section->owner->section_count;
+                 break;
+               }
+           }
          continue;
        }
       /* Allocate memory for the section contents.  */
@@ -1209,6 +1194,7 @@ i370_elf_finish_dynamic_sections (output_bfd, info)
       for (s = output_bfd->sections; s != NULL; s = s->next)
        {
          int indx, dindx;
+         Elf32_External_Sym *esym;
 
          sym.st_value = s->vma;
 
@@ -1224,10 +1210,8 @@ i370_elf_finish_dynamic_sections (output_bfd, info)
 
              sym.st_shndx = indx;
 
-             bfd_elf32_swap_symbol_out (output_bfd, &sym,
-                                        (PTR) (((Elf32_External_Sym *)
-                                                sdynsym->contents)
-                                               + dindx));
+             esym = (Elf32_External_Sym *) sdynsym->contents + dindx;
+             bfd_elf32_swap_symbol_out (output_bfd, &sym, (PTR) esym, (PTR) 0);
            }
        }
 
@@ -1367,9 +1351,8 @@ i370_elf_relocate_section (output_bfd, info, input_bfd, input_section,
          sec = local_sections[r_symndx];
          sym_name = "<local symbol>";
 
-         relocation = (sec->output_section->vma
-                       + sec->output_offset
-                       + sym->st_value);
+         relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
+         addend = rel->r_addend;
        }
       else
        {
@@ -1449,7 +1432,8 @@ i370_elf_relocate_section (output_bfd, info, input_bfd, input_section,
            object.  */
        case (int)R_I370_ADDR31:
        case (int)R_I370_ADDR16:
-         if (info->shared)
+         if (info->shared
+             && r_symndx != 0)
            {
              Elf_Internal_Rela outrel;
              boolean skip;
@@ -1486,22 +1470,11 @@ i370_elf_relocate_section (output_bfd, info, input_bfd, input_section,
 
              skip = false;
 
-             if (elf_section_data (input_section)->stab_info == NULL)
-               outrel.r_offset = rel->r_offset;
-             else
-               {
-                 bfd_vma off;
-
-                 off = (_bfd_stab_section_offset
-                        (output_bfd, &elf_hash_table (info)->stab_info,
-                         input_section,
-                         &elf_section_data (input_section)->stab_info,
-                         rel->r_offset));
-                 if (off == (bfd_vma) -1)
-                   skip = true;
-                 outrel.r_offset = off;
-               }
-
+             outrel.r_offset =
+               _bfd_elf_section_offset (output_bfd, info, input_section,
+                                        rel->r_offset);
+             if (outrel.r_offset == (bfd_vma) -1)
+               skip = true;
              outrel.r_offset += (input_section->output_section->vma
                                  + input_section->output_offset);
 
@@ -1687,7 +1660,6 @@ i370_elf_post_process_headers (abfd, link_info)
 
 #define bfd_elf32_bfd_reloc_type_lookup                i370_elf_reloc_type_lookup
 #define bfd_elf32_bfd_set_private_flags                i370_elf_set_private_flags
-#define bfd_elf32_bfd_copy_private_bfd_data    i370_elf_copy_private_bfd_data
 #define bfd_elf32_bfd_merge_private_bfd_data   i370_elf_merge_private_bfd_data
 #define elf_backend_relocate_section           i370_elf_relocate_section
 
This page took 0.024271 seconds and 4 git commands to generate.