keiths / rpms / gdb

Forked from rpms/gdb 4 months ago
Clone
Blob Blame History Raw
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
From: Fedora GDB patches <invalid@email.com>
Date: Fri, 27 Oct 2017 21:07:50 +0200
Subject: gdb-follow-child-stale-parent.patch

;; Fix regression by python on ia64 due to stale current frame.
;;=push+jan

Problem occurs with python and its get_current_arch () as it selects
selected_frame and current_frame while still inferior_ptid is valid for the
original parent.  But since this place it is already attached and later
unwinders try to access it, breaking:
  -PASS: gdb.threads/watchpoint-fork.exp: child: singlethreaded: breakpoint after the first fork
  -PASS: gdb.threads/watchpoint-fork.exp: child: singlethreaded: watchpoint after the first fork
  -PASS: gdb.threads/watchpoint-fork.exp: child: singlethreaded: breakpoint after the second fork
  -PASS: gdb.threads/watchpoint-fork.exp: child: singlethreaded: watchpoint after the second fork
  -PASS: gdb.threads/watchpoint-fork.exp: child: singlethreaded: finish
  +FAIL: gdb.threads/watchpoint-fork.exp: child: singlethreaded: breakpoint after the first fork
  +FAIL: gdb.threads/watchpoint-fork.exp: child: singlethreaded: watchpoint after the first fork
  +FAIL: gdb.threads/watchpoint-fork.exp: child: singlethreaded: breakpoint after the second fork
  +FAIL: gdb.threads/watchpoint-fork.exp: child: singlethreaded: watchpoint after the second fork
  +FAIL: gdb.threads/watchpoint-fork.exp: child: singlethreaded: finish

diff --git a/gdb/infrun.c b/gdb/infrun.c
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -749,6 +749,9 @@ follow_fork (void)
 	  }
 	else
 	  {
+	    /* Possibly referenced PARENT is no longer valid.  */
+	    reinit_frame_cache ();
+
 	    /* This pending follow fork event is now handled, one way
 	       or another.  The previous selected thread may be gone
 	       from the lists by now, but if it is still around, need