Exit code of exited inferiors in -list-thread-groups

Don't reset the exit code at inferior exit and print it in
-list-thread-groups.

gdb/ChangeLog:

	* NEWS: Announce new exit-code field in -list-thread-groups
	output.
	* inferior.c (exit_inferior_1): Don't clear exit code.
	(inferior_appeared): Clear exit code.
	* mi/mi-main.c (print_one_inferior): Add printing of the exit
	code.

gdb/testsuite/ChangeLog:

	* gdb.mi/mi-exit-code.exp: New file.
	* gdb.mi/mi-exit-code.c: New file.

gdb/doc/ChangeLog:

	* gdb.texinfo (Miscellaneous gdb/mi Commands): Document new
	exit-code field in -list-thread-groups output.
This commit is contained in:
Simon Marchi 2014-09-29 17:33:09 -04:00
parent 5fdeec1db0
commit 2ddf430110
9 changed files with 149 additions and 2 deletions

View File

@ -1,3 +1,12 @@
2014-10-01 Simon Marchi <simon.marchi@ericsson.com>
* NEWS: Announce new exit-code field in -list-thread-groups
output.
* inferior.c (exit_inferior_1): Don't clear exit code.
(inferior_appeared): Clear exit code.
* mi/mi-main.c (print_one_inferior): Add printing of the exit
code.
2014-10-01 Pedro Alves <palves@redhat.com>
* features/Makefile ($(outdir)/%.dat): Output "THIS FILE IS

View File

@ -40,6 +40,11 @@ queue-signal signal-name-or-number
even in non-stop mode. The "auto" mode has been removed, and "off"
is now the default mode.
* MI changes
** The -list-thread-groups command outputs an exit-code field for
inferiors that have exited.
*** Changes in GDB 7.8
* New command line options

View File

@ -1,3 +1,8 @@
2014-10-01 Simon Marchi <simon.marchi@ericsson.com>
* gdb.texinfo (Miscellaneous gdb/mi Commands): Document new
exit-code field in -list-thread-groups output.
2014-09-22 Jan-Benedict Glaw <jbglaw@lug-owl.de>
* gdb.texinfo (Set Breaks): Add missing "@end table".

View File

@ -31152,6 +31152,11 @@ valid type.
The target-specific process identifier. This field is only present
for thread groups of type @samp{process} and only if the process exists.
@item exit-code
The exit code of this group's last exited thread, formatted in octal.
This field is only present for thread groups of type @samp{process} and
only if the process is not running.
@item num_children
The number of children this thread group has. This field may be
absent for an available thread group.

View File

@ -275,8 +275,6 @@ exit_inferior_1 (struct inferior *inftoex, int silent)
inf->vfork_child = NULL;
}
inf->has_exit_code = 0;
inf->exit_code = 0;
inf->pending_detach = 0;
}
@ -322,6 +320,8 @@ void
inferior_appeared (struct inferior *inf, int pid)
{
inf->pid = pid;
inf->has_exit_code = 0;
inf->exit_code = 0;
observer_notify_inferior_appeared (inf);
}

View File

@ -658,6 +658,9 @@ print_one_inferior (struct inferior *inferior, void *xdata)
ui_out_field_fmt (uiout, "id", "i%d", inferior->num);
ui_out_field_string (uiout, "type", "process");
if (inferior->has_exit_code)
ui_out_field_string (uiout, "exit-code",
int_string (inferior->exit_code, 8, 0, 0, 1));
if (inferior->pid != 0)
ui_out_field_int (uiout, "pid", inferior->pid);

View File

@ -1,3 +1,8 @@
2014-10-01 Simon Marchi <simon.marchi@ericsson.com>
* gdb.mi/mi-exit-code.exp: New file.
* gdb.mi/mi-exit-code.c: New file.
2014-09-30 Yao Qi <yao@codesourcery.com>
* lib/prelink-support.exp (build_executable_own_libs): Error if

View File

@ -0,0 +1,27 @@
/* Copyright 1999-2014 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/>. */
int exit_code = 0;
int
main (int argc, char **argv)
{
if (argc > 1)
exit_code = atoi (argv[1]);
return exit_code;
}

View File

@ -0,0 +1,88 @@
# Copyright 1999-2014 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
load_lib mi-support.exp
set MIFLAGS "-i=mi"
gdb_exit
if [mi_gdb_start] {
continue
}
standard_testfile
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
untested "failed to compile $testfile"
return -1
}
proc test_list_thread_groups { } {
global hex
global decimal
# Before any run, exit-code should not be present.
mi_gdb_test \
"122-list-thread-groups" \
"122\\^done,groups=\\\[\{id=\"i1\",type=\"process\"\}\]" \
"-list-thread-groups before run shows no exit-code"
with_test_prefix "first run" {
mi_run_to_main
# During the run, exit-code should not be present.
mi_gdb_test \
"123-list-thread-groups" \
"123\\^done,groups=\\\[\{id=\"i1\",type=\"process\",pid=\"$decimal\",executable=\".*\".*" \
"-list-thread-groups during run shows no exit-code"
# Exit the inferior.
mi_send_resuming_command "exec-continue" "continuing to inferior exit"
mi_expect_stop "exited-normally" "" "" "" "" "" "exit normally"
# After the run, exit-code should be present.
mi_gdb_test \
"124-list-thread-groups" \
"124\\^done,groups=\\\[\{id=\"i1\",type=\"process\",exit-code=\"0\",executable=\".*\"\}\]" \
"-list-thread-groups after exit shows exit-code"
}
with_test_prefix "second run" {
mi_run_to_main
# Write the exit code we want in the global var
mi_gdb_test "set var exit_code = 8" ".*\\^done" "write exit code"
# During the second run, exit-code should not be present.
mi_gdb_test \
"125-list-thread-groups" \
"125\\^done,groups=\\\[\{id=\"i1\",type=\"process\",pid=\"$decimal\",executable=\".*\".*" \
"-list-thread-groups during run shows no exit-code"
# Exit the inferior.
mi_send_resuming_command "exec-continue" "continuing to inferior exit"
mi_expect_stop "exited" "" "" "" "" "" "exit with code"
# After the second run, exit-code should be present.
mi_gdb_test \
"126-list-thread-groups" \
"126\\^done,groups=\\\[\{id=\"i1\",type=\"process\",exit-code=\"010\",executable=\".*\"\}\]" \
"-list-thread-groups after exit shows exit-code"
}
}
test_list_thread_groups
mi_gdb_exit
return 0