Blame SOURCES/gdb-vdso-gcore.patch

861f93
http://sourceware.org/ml/gdb-patches/2013-05/msg00042.html
861f93
Subject: [patch] Fix gcore for vDSO (on ppc64)
861f93
861f93
Hi,
861f93
861f93
on ppc64 GNU/Linux one gets in live process or kernel-generated core file:
861f93
861f93
#0  0x00003fff9e946b3c in __pause_nocancel () from /lib64/libc.so.6
861f93
#1  0x000000001000080c in handle_alrm (signo=14) at small.c:16
861f93
#2  <signal handler called>
861f93
#3  0x00003fff9e946b3c in __pause_nocancel () from /lib64/libc.so.6
861f93
#4  0x0000000010000914 in main (argc=2, argv=0x3fffcd00dec8) at small.c:32
861f93
861f93
while with gcore generated core file one gets:
861f93
861f93
#0  0x00003fff9e946b3c in __pause_nocancel () from /lib64/libc.so.6
861f93
#1  0x000000001000080c in handle_alrm (signo=14) at small.c:16
861f93
#2  0x00003fff9ea70448 in ?? ()
861f93
#3  0x0000000010000914 in main (argc=2, argv=0x3fffcd00dec8) at small.c:32
861f93
861f93
This is because on ppc64 GNU/Linux the signal handler frame is in vDSO (and
861f93
not in libc as on x86_64 GNU/Linux).  And if one has kernel-debuginfo
861f93
installed GDB gcore thinks it can omit the vDSO page from core file.
861f93
861f93
As vDSO cannot be reliably found from link_map it should be rather fully
861f93
present in the core file.  Which also gcore_create_callback tries to do but it
861f93
gets mistaken by the separate debug info.
861f93
861f93
It seems pretty obvious patch to me.
861f93
861f93
861f93
Thanks,
861f93
Jan
861f93
861f93
861f93
gdb/
861f93
2013-05-03  Jan Kratochvil  <jan.kratochvil@redhat.com>
861f93
861f93
	* gcore.c (gcore_create_callback): Ignore sections with
861f93
	separate_debug_objfile_backlink != NULL.
861f93
861f93
--- gdb-7.6-orig/gdb/gcore.c	2013-01-01 07:32:42.000000000 +0100
861f93
+++ gdb-7.6/gdb/gcore.c	2013-05-03 03:31:34.795312996 +0200
861f93
@@ -428,8 +428,9 @@ gcore_create_callback (CORE_ADDR vaddr,
861f93
 
861f93
 	     This BFD was synthesized from reading target memory,
861f93
 	     we don't want to omit that.  */
861f93
-	  if (((vaddr >= start && vaddr + size <= end)
861f93
-	       || (start >= vaddr && end <= vaddr + size))
861f93
+	  if (objfile->separate_debug_objfile_backlink == NULL
861f93
+	      && ((vaddr >= start && vaddr + size <= end)
861f93
+	          || (start >= vaddr && end <= vaddr + size))
861f93
 	      && !(bfd_get_file_flags (abfd) & BFD_IN_MEMORY))
861f93
 	    {
861f93
 	      flags &= ~(SEC_LOAD | SEC_HAS_CONTENTS);
861f93