This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[patch] Fix cleanup in finish_command
- From: Jan Kratochvil <jan dot kratochvil at redhat dot com>
- To: gdb-patches at sourceware dot org
- Cc: Markus Metzger <markus dot t dot metzger at intel dot com>
- Date: Wed, 19 Jun 2013 23:14:44 +0200
- Subject: [patch] Fix cleanup in finish_command
Hi,
I was getting core files (despite GDB PASSes all tests) with the patchset
[patch v3 00/23] record-btrace: reverse
http://sourceware.org/ml/gdb-patches/2013-06/msg00214.html
Message-Id: <1370851496-32313-1-git-send-email-markus.t.metzger@intel.com>
It probably comes from:
finish^M
Run till exit from #0 0x00000000004005b5 in bar () at gdb/testsuite/gdb.btrace/x86-tailcall.c:24^M
0x00000000004005d5 in main () at gdb/testsuite/gdb.btrace/x86-tailcall.c:37^M
37 answer = foo ();^M
This record target does not trace registers.^M
(gdb) PASS: gdb.btrace/tailcall.exp: step, 1.1
It dumps core even without -lmcheck.
(Regression test is still running here.)
Jan
#0 in delete_breakpoint (bpt=0x3ab0780) at breakpoint.c:13494
#1 in finish_command_continuation (arg=0x3a202c0, err=1) at infcmd.c:1593
#2 in do_my_continuations_1 (pmy_chain=0x7fff5c1c8178, err=1) at continuations.c:59
#3 in do_my_continuations (list=0x3916278, err=1) at continuations.c:83
#4 in do_all_continuations_ptid (ptid=..., continuations_p=0x3916278, err=1) at continuations.c:191
#5 in do_all_continuations_thread_callback (thread=0x3916190, data=0x7fff5c1c8254) at continuations.c:202
#6 in do_all_continuations_thread (thread=0x3916190, err=1) at continuations.c:211
#7 in clear_thread_inferior_resources (tp=0x3916190) at thread.c:123
#8 in delete_thread_1 (ptid=..., silent=0) at thread.c:296
#9 in delete_thread (ptid=...) at thread.c:313
#10 in delete_thread_of_inferior (tp=0x3916190, data=0x7fff5c1c83b0) at inferior.c:182
#11 in iterate_over_threads (callback=0x8805ba <delete_thread_of_inferior>, data=0x7fff5c1c83b0) at thread.c:370
#12 in exit_inferior_1 (inftoex=0x37e3620, silent=0) at inferior.c:260
#13 in exit_inferior (pid=8817) at inferior.c:289
#14 in generic_mourn_inferior () at target.c:3679
#15 in inf_ptrace_mourn_inferior (ops=0x368a8f0) at inf-ptrace.c:179
#16 in linux_nat_mourn_inferior (ops=0x368a8f0) at linux-nat.c:4101
#17 in target_mourn_inferior () at target.c:2836
#18 in linux_nat_kill (ops=0x368a8f0) at linux-nat.c:4089
#19 in target_kill () at target.c:482
#20 in record_kill (t=0x1f1fca0 <record_btrace_ops>) at record.c:185
#21 in target_kill () at target.c:482
#22 in kill_or_detach (inf=0x37e3620, args=0x7fff5c1c86d0) at top.c:1311
#23 in iterate_over_inferiors (callback=0x856ed9 <kill_or_detach>, data=0x7fff5c1c86d0) at inferior.c:396
#24 in quit_force (args=0x0, from_tty=0) at top.c:1419
#25 in quit_command (args=0x0, from_tty=0) at ./cli/cli-cmds.c:334
#26 in quit_cover () at top.c:298
#27 in async_disconnect (arg=0x0) at event-top.c:860
#28 in invoke_async_signal_handlers () at event-loop.c:993
#29 in process_event () at event-loop.c:320
#30 in gdb_do_one_event () at event-loop.c:406
#31 in start_event_loop () at event-loop.c:431
#32 in cli_command_loop () at event-top.c:177
#33 in current_interp_command_loop () at interps.c:331
#34 in captured_command_loop (data=0x0) at main.c:260
#35 in catch_errors (func=0x751bbb <captured_command_loop>, func_args=0x0, errstring=0xfdf1f4 "", mask=6) at exceptions.c:546
#36 in captured_main (data=0x7fff5c1c8a80) at main.c:1055
#37 in catch_errors (func=0x751e6e <captured_main>, func_args=0x7fff5c1c8a80, errstring=0xfdf1f4 "", mask=6) at exceptions.c:546
#38 in gdb_main (args=0x7fff5c1c8a80) at main.c:1064
#39 in main (argc=5, argv=0x7fff5c1c8b88) at gdb.c:34
gdb/
2013-06-19 Jan Kratochvil <jan.kratochvil@redhat.com>
* infcmd.c (finish_forward): Move discard_cleanups earlier.
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 30621e4..4a32382 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -1691,9 +1691,9 @@ finish_forward (struct symbol *function, struct frame_info *frame)
cargs->function = function;
add_continuation (tp, finish_command_continuation, cargs,
finish_command_continuation_free_arg);
+ discard_cleanups (old_chain);
proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0);
- discard_cleanups (old_chain);
if (!target_can_async_p ())
do_all_continuations (0);
}