Blame SOURCES/gdb-rhbz1085906-coredump_filter-2of2.patch

01917d
commit 416f679e68468ea6dd7384213994ce74201f82e7
01917d
Author: Sergio Durigan Junior <sergiodj@redhat.com>
01917d
Date:   Tue Mar 31 19:17:23 2015 -0400
01917d
01917d
    Catch exception on solib_svr4_r_ldsomap
01917d
    
01917d
    When loading a corefile that has some inaccessible memory region(s),
01917d
    GDB complains about it:
01917d
    
01917d
       (gdb) core /my/corefile
01917d
       [New LWP 28468]
01917d
       Cannot access memory at address 0x355fc21148
01917d
       Cannot access memory at address 0x355fc21140
01917d
       (gdb)
01917d
    
01917d
    However, despite not seeing the message "Core was generated by...", it
01917d
    is still possible to inspect the corefile using regular GDB commands.
01917d
    The reason for that is because read_memory_unsigned_integer throws an
01917d
    exception when it cannot read the memory region, but
01917d
    solib_svr4_r_ldsomap was not catching it.  The fix is to catch the
01917d
    exception and act accordingly.
01917d
    
01917d
    Tested on Fedora 20 x86_64, no regressions found.
01917d
    
01917d
    gdb/ChangeLog:
01917d
    2015-03-31  Sergio Durigan Junior  <sergiodj@redhat.com>
01917d
    
01917d
    	* solib-svr4.c (solib_svr4_r_ldsomap): Catch possible exception by
01917d
    	read_memory_unsigned_integer.
01917d
01917d
### a/gdb/ChangeLog
01917d
### b/gdb/ChangeLog
01917d
## -1,3 +1,8 @@
01917d
+2015-03-31  Sergio Durigan Junior  <sergiodj@redhat.com>
01917d
+
01917d
+	* solib-svr4.c (solib_svr4_r_ldsomap): Catch possible exception by
01917d
+	read_memory_unsigned_integer.
01917d
+
01917d
 2015-03-31  H.J. Lu  <hongjiu.lu@intel.com>
01917d
 
01917d
 	* Makefile.in (ZLIB): New.
01917d
Index: gdb-7.6.1/gdb/solib-svr4.c
01917d
===================================================================
01917d
--- gdb-7.6.1.orig/gdb/solib-svr4.c	2015-11-27 22:31:12.059831214 +0100
01917d
+++ gdb-7.6.1/gdb/solib-svr4.c	2015-11-27 22:35:17.641182004 +0100
01917d
@@ -912,13 +912,22 @@
01917d
   struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
01917d
   struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
01917d
   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
01917d
-  ULONGEST version;
01917d
+  ULONGEST version = 0;
01917d
+  volatile struct gdb_exception ex;
01917d
+
01917d
+  TRY_CATCH (ex, RETURN_MASK_ERROR)
01917d
+    {
01917d
+      /* Check version, and return zero if `struct r_debug' doesn't have
01917d
+	 the r_ldsomap member.  */
01917d
+      version
01917d
+	= read_memory_unsigned_integer (info->debug_base + lmo->r_version_offset,
01917d
+					lmo->r_version_size, byte_order);
01917d
+    }
01917d
+  if (ex.reason < 0)
01917d
+    {
01917d
+      exception_print (gdb_stderr, ex);
01917d
+    }
01917d
 
01917d
-  /* Check version, and return zero if `struct r_debug' doesn't have
01917d
-     the r_ldsomap member.  */
01917d
-  version
01917d
-    = read_memory_unsigned_integer (info->debug_base + lmo->r_version_offset,
01917d
-				    lmo->r_version_size, byte_order);
01917d
   if (version < 2 || lmo->r_ldsomap_offset == -1)
01917d
     return 0;
01917d