PR gdb/20604 - fix "quit" when an invalid expression is used
This fixes PR gdb/20604. The bug here is that passing an invalid expression to "quit" -- e.g., "quit()" -- causes gdb to enter a non-functioning state. The immediate problem is that quit_force resets the terminal before evaluating the expression. However, it seemed to me that it doesn't really make sense to pass the quit_force argument to kill_or_detach (which passes it to to_detach), first because conflating the exit status for "quit" and the signal to pass when detaching doesn't make sense, and second because to_detach implementations generally only accept a constant here, while "quit" accepts an expression. So, I removed that. As an aside, I think the "detach SIGNO" functionality is not documented. Built and regtested on x86-64 Fedora 24. 2016-09-21 Tom Tromey <tom@tromey.com> PR gdb/20604: * top.h (quit_force): Update. * top.c (quit_force): Changed type of first argument. Don't evaluate expression. Pass NULL to kill_or_detach. * cli/cli-cmds.c (quit_command): Evaluate "args". 2016-09-21 Tom Tromey <tom@tromey.com> PR gdb/20604: * gdb.base/quit.exp: New file.
This commit is contained in:
parent
74172ecf37
commit
36cf1806a8
6 changed files with 65 additions and 10 deletions
|
@ -344,12 +344,23 @@ show_configuration (char *args, int from_tty)
|
|||
void
|
||||
quit_command (char *args, int from_tty)
|
||||
{
|
||||
int exit_code = 0;
|
||||
|
||||
/* An optional expression may be used to cause gdb to terminate with
|
||||
the value of that expression. */
|
||||
if (args)
|
||||
{
|
||||
struct value *val = parse_and_eval (args);
|
||||
|
||||
exit_code = (int) value_as_long (val);
|
||||
}
|
||||
|
||||
if (!quit_confirm ())
|
||||
error (_("Not confirmed."));
|
||||
|
||||
query_if_trace_running (from_tty);
|
||||
|
||||
quit_force (args, from_tty);
|
||||
quit_force (args ? &exit_code : NULL, from_tty);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue