containing the section using the segment map, rather than guessing
  based upon the section's vma and file position.
+2007-12-28  Nick Hudson  <nick.hudson@dsl.pipex.com>
+
+       * elf32-hppa.c (hppa_record_segment_addr): Locate the segment
+       containing the section using the segment map, rather than guessing
+       based upon the section's vma and file position.
+
 2007-12-24  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR binutils/5488
 
 
   if ((section->flags & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
     {
-      bfd_vma value = section->vma - section->filepos;
+      bfd_vma value;
+      struct elf_segment_map *m;
+      Elf_Internal_Phdr *p;
+
+      /* Find the segment that contains the output_section for this section.  */
+      for (m = elf_tdata (abfd)->segment_map,
+            p = elf_tdata (abfd)->phdr;
+          m != NULL;
+          m = m->next, p++)
+       {
+         int i;
+
+         for (i = m->count - 1; i >= 0; i--)
+           if (m->sections[i] == section->output_section)
+             break;
+         if (i >= 0)
+           break;
+       }
 
+      if (m == NULL)
+        return;
+
+      value = p->p_vaddr;
+      
       if ((section->flags & SEC_READONLY) != 0)
        {
          if (value < htab->text_segment_base)