daily update
[deliverable/binutils-gdb.git] / bfd / coffgen.c
index 5f6921d9d91d151f1256b56fdf4a67a31cf1e9b7..fc82d57dd73dd520811563497bf79f7e87708a4c 100644 (file)
@@ -307,20 +307,20 @@ coff_object_p (bfd *abfd)
 /* Get the BFD section from a COFF symbol section number.  */
 
 asection *
-coff_section_from_bfd_index (bfd *abfd, int index)
+coff_section_from_bfd_index (bfd *abfd, int section_index)
 {
   struct bfd_section *answer = abfd->sections;
 
-  if (index == N_ABS)
+  if (section_index == N_ABS)
     return bfd_abs_section_ptr;
-  if (index == N_UNDEF)
+  if (section_index == N_UNDEF)
     return bfd_und_section_ptr;
-  if (index == N_DEBUG)
+  if (section_index == N_DEBUG)
     return bfd_abs_section_ptr;
 
   while (answer)
     {
-      if (answer->target_index == index)
+      if (answer->target_index == section_index)
        return answer;
       answer = answer->next;
     }
@@ -2152,6 +2152,7 @@ coff_find_nearest_line (bfd *abfd,
       maxdiff = (bfd_vma) 0 - (bfd_vma) 1;
       while (1)
        {
+         bfd_vma file_addr;
          combined_entry_type *p2;
 
          for (p2 = p + 1 + p->u.syment.n_numaux;
@@ -2170,11 +2171,16 @@ coff_find_nearest_line (bfd *abfd,
                }
            }
 
+         file_addr = (bfd_vma) p2->u.syment.n_value;
+         /* PR 11512: Include the section address of the function name symbol.  */
+         if (p2->u.syment.n_scnum > 0)
+           file_addr += coff_section_from_bfd_index (abfd,
+                                                     p2->u.syment.n_scnum)->vma;
          /* We use <= MAXDIFF here so that if we get a zero length
              file, we actually use the next file entry.  */
          if (p2 < pend
-             && offset + sec_vma >= (bfd_vma) p2->u.syment.n_value
-             && offset + sec_vma - (bfd_vma) p2->u.syment.n_value <= maxdiff)
+             && offset + sec_vma >= file_addr
+             && offset + sec_vma - file_addr <= maxdiff)
            {
              *filename_ptr = (char *) p->u.syment._n._n_n._n_offset;
              maxdiff = offset + sec_vma - p2->u.syment.n_value;
This page took 0.023814 seconds and 4 git commands to generate.