* elf.c (assign_file_positions_for_segments): Set next_file_pos even
[deliverable/binutils-gdb.git] / bfd / elfxx-ia64.c
index ed4b08efab218f4fd481c1fcf700eedff7b49d63..9ae95d3238742b68a6eb2754725afe7b0264fe4d 100644 (file)
@@ -924,7 +924,7 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again)
             location of interest is just "sym".  */
           if (symtype == STT_SECTION)
             toff += irel->r_addend;
-          
+
           toff = _bfd_merged_section_offset (abfd, &tsec,
                                              elf_section_data (tsec)->sec_info,
                                              toff);
@@ -1125,7 +1125,7 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again)
      enough that the data segment moves, which will change the GP.
      Reset the GP so that we re-calculate next round.  We need to
      do this at the _beginning_ of the next round; now will not do.  */
-      
+
   /* Clean up and go home.  */
   while (fixups)
     {
@@ -2458,7 +2458,7 @@ elfNN_ia64_check_relocs (abfd, info, sec, relocs)
              if (!pltoff)
                return FALSE;
            }
-         
+
          dyn_i->want_pltoff = 1;
        }
       if ((need_entry & NEED_DYNREL) && (sec->flags & SEC_ALLOC))
@@ -2838,12 +2838,12 @@ elfNN_ia64_adjust_dynamic_symbol (info, h)
   /* If this is a weak symbol, and there is a real definition, the
      processor independent code will have arranged for us to see the
      real definition first, and we can just use the same value.  */
-  if (h->weakdef != NULL)
+  if (h->u.weakdef != NULL)
     {
-      BFD_ASSERT (h->weakdef->root.type == bfd_link_hash_defined
-                  || h->weakdef->root.type == bfd_link_hash_defweak);
-      h->root.u.def.section = h->weakdef->root.u.def.section;
-      h->root.u.def.value = h->weakdef->root.u.def.value;
+      BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
+                  || h->u.weakdef->root.type == bfd_link_hash_defweak);
+      h->root.u.def.section = h->u.weakdef->root.u.def.section;
+      h->root.u.def.value = h->u.weakdef->root.u.def.value;
       return TRUE;
     }
 
@@ -4178,7 +4178,7 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section,
            dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, FALSE);
            if (dyn_i->want_fptr)
              {
-               BFD_ASSERT (h == NULL || h->dynindx == -1)
+               BFD_ASSERT (h == NULL || h->dynindx == -1);
                if (!undef_weak_ref)
                  value = set_fptr_entry (output_bfd, info, dyn_i, value);
                dynindx = -1;
@@ -4262,7 +4262,7 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section,
        case R_IA64_PCREL64I:
          /* The PCREL21BI reloc is specifically not intended for use with
             dynamic relocs.  PCREL21F and PCREL21M are used for speculation
-            fixup code, and thus probably ought not be dynamic.  The 
+            fixup code, and thus probably ought not be dynamic.  The
             PCREL22 and PCREL64I relocs aren't emitted as dynamic relocs.  */
          if (dynamic_symbol_p)
            {
@@ -4338,11 +4338,10 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section,
        case R_IA64_SECREL32LSB:
        case R_IA64_SECREL64MSB:
        case R_IA64_SECREL64LSB:
-         /* Make output-section relative.  */
-         if (value > input_section->output_section->vma)
-           value -= input_section->output_section->vma;
-         else
-           value = 0;
+         /* Make output-section relative to section where the symbol
+            is defined. PR 475  */
+         if (sym_sec)
+           value -= sym_sec->output_section->vma;
          r = elfNN_ia64_install_value (hit_addr, value, r_type);
          break;
 
@@ -4497,7 +4496,7 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section,
            const char *name;
 
            if (h)
-             name = h->root.root.string;
+             name = NULL;
            else
              {
                name = bfd_elf_string_from_elf_section (input_bfd,
@@ -4506,10 +4505,10 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section,
                if (name == NULL)
                  return FALSE;
                if (*name == '\0')
-                 name = bfd_section_name (input_bfd, input_section);
+                 name = bfd_section_name (input_bfd, sym_sec);
              }
-           if (!(*info->callbacks->reloc_overflow) (info, name,
-                                                    howto->name,
+           if (!(*info->callbacks->reloc_overflow) (info, &h->root,
+                                                    name, howto->name,
                                                     (bfd_vma) 0,
                                                     input_bfd,
                                                     input_section,
This page took 0.024527 seconds and 4 git commands to generate.