* elf32-s390.c (elf_s390_relocate_section): Don't recalculate symbol
[deliverable/binutils-gdb.git] / bfd / elf64-s390.c
index 8b521be6336e1e3d3914fc690e2e23b95127e648..e14a0fc4c7952f38a0c14e4b5da8117fcc8c1390 100644 (file)
@@ -2606,26 +2606,17 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
              else
                {
                  /* This symbol is local, or marked to become local.  */
+                 outrel.r_addend = relocation + rel->r_addend;
                  if (r_type == R_390_64)
                    {
                      relocate = TRUE;
                      outrel.r_info = ELF64_R_INFO (0, R_390_RELATIVE);
-                     outrel.r_addend = relocation + rel->r_addend;
                    }
                  else
                    {
                      long sindx;
 
-                     if (h == NULL)
-                       sec = local_sections[r_symndx];
-                     else
-                       {
-                         BFD_ASSERT (h->root.type == bfd_link_hash_defined
-                                     || (h->root.type
-                                         == bfd_link_hash_defweak));
-                         sec = h->root.u.def.section;
-                       }
-                     if (sec != NULL && bfd_is_abs_section (sec))
+                     if (bfd_is_abs_section (sec))
                        sindx = 0;
                      else if (sec == NULL || sec->owner == NULL)
                        {
@@ -2639,9 +2630,16 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
                          osec = sec->output_section;
                          sindx = elf_section_data (osec)->dynindx;
                          BFD_ASSERT (sindx > 0);
+
+                         /* We are turning this relocation into one
+                            against a section symbol, so subtract out
+                            the output section's address but not the
+                            offset of the input section in the output
+                            section.  */
+
+                         outrel.r_addend -= osec->vma;
                        }
                      outrel.r_info = ELF64_R_INFO (sindx, r_type);
-                     outrel.r_addend = relocation + rel->r_addend;
                    }
                }
 
This page took 0.023859 seconds and 4 git commands to generate.