Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [patch] Fix another stale frame_info *
@ 2012-02-23  8:38 Jan Kratochvil
  2012-02-24 15:37 ` Pedro Alves
  0 siblings, 1 reply; 6+ messages in thread
From: Jan Kratochvil @ 2012-02-23  8:38 UTC (permalink / raw)
  To: gdb-patches

Hi,

ISTM one cannot safely initialize FRAME_CALLER_PC unconditionally.

No regressions on {x86_64,x86_64-m32,i686}-fedora17-linux-gnu.

I will check it in.


Thanks,
Jan


gdb/
2012-02-23  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* breakpoint.c (until_break_command): New variables frame_caller_id,
	frame_caller_pc and frame_caller_arch.  Use them after
	set_momentary_breakpoint.

--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -9853,12 +9853,19 @@ until_break_command (char *arg, int from_tty, int anywhere)
   struct symtabs_and_lines sals;
   struct symtab_and_line sal;
   struct frame_info *frame = get_selected_frame (NULL);
+  struct frame_id frame_caller_id = frame_unwind_caller_id (frame);
+  /* Initialize it just to avoid a GCC false warning.  */
+  CORE_ADDR frame_caller_pc = 0;
+  struct gdbarch *frame_caller_arch = frame_unwind_caller_arch (frame);
   struct breakpoint *breakpoint;
   struct breakpoint *breakpoint2 = NULL;
   struct cleanup *old_chain;
   int thread;
   struct thread_info *tp;
 
+  if (frame_id_p (frame_caller_id))
+    frame_caller_pc = frame_unwind_caller_pc (frame);
+
   clear_proceed_status ();
 
   /* Set a breakpoint where the user wants it and at return from
@@ -9903,17 +9912,15 @@ until_break_command (char *arg, int from_tty, int anywhere)
   /* Keep within the current frame, or in frames called by the current
      one.  */
 
-  if (frame_id_p (frame_unwind_caller_id (frame)))
+  if (frame_id_p (frame_caller_id))
     {
-      sal = find_pc_line (frame_unwind_caller_pc (frame), 0);
-      sal.pc = frame_unwind_caller_pc (frame);
-      breakpoint2 = set_momentary_breakpoint (frame_unwind_caller_arch (frame),
-					      sal,
-					      frame_unwind_caller_id (frame),
-					      bp_until);
+      sal = find_pc_line (frame_caller_pc, 0);
+      sal.pc = frame_caller_pc;
+      breakpoint2 = set_momentary_breakpoint (frame_caller_arch, sal,
+					      frame_caller_id, bp_until);
       make_cleanup_delete_breakpoint (breakpoint2);
 
-      set_longjmp_breakpoint (tp, frame_unwind_caller_id (frame));
+      set_longjmp_breakpoint (tp, frame_caller_id);
       make_cleanup (delete_longjmp_breakpoint_cleanup, &thread);
     }
 


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-02-24 16:28 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-02-23  8:38 [patch] Fix another stale frame_info * Jan Kratochvil
2012-02-24 15:37 ` Pedro Alves
2012-02-24 15:41   ` Jan Kratochvil
2012-02-24 15:54     ` Pedro Alves
2012-02-24 16:05       ` Jan Kratochvil
2012-02-24 16:32         ` Pedro Alves

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox