Blame SOURCES/gdb-vdso-gcore.patch

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