From: Andi Kleen <a...@linux.intel.com>

Various callers of lto_section_read segfault on a NULL return
when the mmap fails. Add some internal_errors to give a better
message to the user.

gcc/lto/:

2011-10-09   Andi Kleen <a...@linux.intel.com>

        * lto.c (lto_section_read): Call internal_error on IO or mmap errors.
---
 gcc/lto/lto.c |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
index a77eeb4..dc16db4 100644
--- a/gcc/lto/lto.c
+++ b/gcc/lto/lto.c
@@ -1237,7 +1237,10 @@ lto_read_section_data (struct lto_file_decl_data 
*file_data,
     {
       fd = open (file_data->file_name, O_RDONLY|O_BINARY);
       if (fd == -1)
-       return NULL;
+        {
+         internal_error ("Cannot open %s", file_data->file_name);
+         return NULL;
+        }
       fd_name = xstrdup (file_data->file_name);
     }
 
@@ -1255,7 +1258,10 @@ lto_read_section_data (struct lto_file_decl_data 
*file_data,
   result = (char *) mmap (NULL, computed_len, PROT_READ, MAP_PRIVATE,
                          fd, computed_offset);
   if (result == MAP_FAILED)
-    return NULL;
+    {
+      internal_error ("Cannot map %s", file_data->file_name);
+      return NULL;
+    }
 
   return result + diff;
 #else
@@ -1264,6 +1270,7 @@ lto_read_section_data (struct lto_file_decl_data 
*file_data,
       || read (fd, result, len) != (ssize_t) len)
     {
       free (result);
+      internal_error ("Cannot read %s", file_data->file_name);
       result = NULL;
     }
 #ifdef __MINGW32__
-- 
1.7.5.4

Reply via email to