Automatic date update in version.in
[deliverable/binutils-gdb.git] / bfd / coffgen.c
index db89c72576cc80bf9f6ac627e09b7285f6e03af9..5c664a49f2bbff0011db6d33b8695b93d21e1a01 100644 (file)
@@ -1,5 +1,5 @@
 /* Support for the generic parts of COFF, for BFD.
-   Copyright (C) 1990-2014 Free Software Foundation, Inc.
+   Copyright (C) 1990-2015 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -468,7 +468,10 @@ _bfd_coff_internal_syment_name (bfd *abfd,
          if (strings == NULL)
            return NULL;
        }
-      if (sym->_n._n_n._n_offset >= obj_coff_strings_len (abfd))
+      /* PR 17910: Only check for string overflow if the length has been set.
+        Some DLLs, eg those produced by Visual Studio, may not set the length field.  */
+      if (obj_coff_strings_len (abfd) > 0
+         && sym->_n._n_n._n_offset >= obj_coff_strings_len (abfd))
        return NULL;
       return strings + sym->_n._n_n._n_offset;
     }
@@ -2242,6 +2245,26 @@ coff_find_nearest_line_with_names (bfd *abfd,
                                     &coff_data(abfd)->dwarf2_find_line_info))
     return TRUE;
 
+  /* If the DWARF lookup failed, but there is DWARF information available
+     then the problem might be that the file has been rebased.  This tool
+     changes the VMAs of all the sections, but it does not update the DWARF
+     information.  So try again, using a bias against the address sought.  */
+  if (coff_data (abfd)->dwarf2_find_line_info != NULL)
+    {
+      bfd_signed_vma bias;
+
+      bias = _bfd_dwarf2_find_symbol_bias (symbols,
+                                          & coff_data (abfd)->dwarf2_find_line_info);
+      
+      if (bias
+         && _bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section,
+                                           offset + bias,
+                                           filename_ptr, functionname_ptr,
+                                           line_ptr, NULL, debug_sections, 0,
+                                           &coff_data(abfd)->dwarf2_find_line_info))
+       return TRUE;
+    }
+
   *filename_ptr = 0;
   *functionname_ptr = 0;
   *line_ptr = 0;
This page took 0.02419 seconds and 4 git commands to generate.