Implement GDB/MI equivalent of "info exceptions" CLI command.
This patch implements a new GDB/MI command implementing the equivalent of the "info exceptions" CLI command. The command syntax is: -info-ada-exceptions [REGEXP] Here is an example of usage (slightly formatted by hand to make it easier to read): -info-ada-exceptions ions\.a_ ^done,ada-exceptions= {nr_rows="2",nr_cols="2", hdr=[{width="1",alignment="-1",col_name="name",colhdr="Name"}, {width="1",alignment="-1",col_name="address",colhdr="Address"}], body=[{name="global_exceptions.a_global_exception", address="0x0000000000613a80"}, {name="global_exceptions.a_private_exception", address="0x0000000000613ac0"}]} Also, in order to allow graphical frontends to easily determine whether this command is available or not, the output of the "-list-features" command has been augmented to contain "info-ada-exceptions". gdb/Changelog: * mi/mi-cmds.h (mi_cmd_info_ada_exceptions): Add declaration. * mi/mi-cmds.c (mi_cmds): Add entry for -info-ada-exceptions command. * mi/mi-cmd-info.c: #include "ada-lang.c" and "arch-utils.c". (mi_cmd_info_ada_exceptions): New function. * mi/mi-main.c (mi_cmd_list_features): Add "info-ada-exceptions". gdb/testsuite/ChangeLog: * gdb.ada/mi_exc_info: New testcase.
This commit is contained in:
parent
778865d3e2
commit
a7e332c24b
|
@ -19,6 +19,57 @@
|
|||
#include "defs.h"
|
||||
#include "osdata.h"
|
||||
#include "mi-cmds.h"
|
||||
#include "ada-lang.h"
|
||||
#include "arch-utils.h"
|
||||
|
||||
/* Implement the "-info-ada-exceptions" GDB/MI command. */
|
||||
|
||||
void
|
||||
mi_cmd_info_ada_exceptions (char *command, char **argv, int argc)
|
||||
{
|
||||
struct ui_out *uiout = current_uiout;
|
||||
struct gdbarch *gdbarch = get_current_arch ();
|
||||
char *regexp;
|
||||
struct cleanup *old_chain;
|
||||
VEC(ada_exc_info) *exceptions;
|
||||
int ix;
|
||||
struct ada_exc_info *info;
|
||||
|
||||
switch (argc)
|
||||
{
|
||||
case 0:
|
||||
regexp = NULL;
|
||||
break;
|
||||
case 1:
|
||||
regexp = argv[0];
|
||||
break;
|
||||
default:
|
||||
error (_("Usage: -info-ada-exceptions [REGEXP]"));
|
||||
break;
|
||||
}
|
||||
|
||||
exceptions = ada_exceptions_list (regexp);
|
||||
old_chain = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
|
||||
|
||||
make_cleanup_ui_out_table_begin_end
|
||||
(uiout, 2, VEC_length (ada_exc_info, exceptions), "ada-exceptions");
|
||||
ui_out_table_header (uiout, 1, ui_left, "name", "Name");
|
||||
ui_out_table_header (uiout, 1, ui_left, "address", "Address");
|
||||
ui_out_table_body (uiout);
|
||||
|
||||
for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
|
||||
{
|
||||
struct cleanup *sub_chain;
|
||||
|
||||
sub_chain = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
|
||||
ui_out_field_string (uiout, "name", info->name);
|
||||
ui_out_field_core_addr (uiout, "address", gdbarch, info->addr);
|
||||
|
||||
do_cleanups (sub_chain);
|
||||
}
|
||||
|
||||
do_cleanups (old_chain);
|
||||
}
|
||||
|
||||
void
|
||||
mi_cmd_info_os (char *command, char **argv, int argc)
|
||||
|
|
|
@ -124,6 +124,7 @@ static struct mi_cmd mi_cmds[] =
|
|||
DEF_MI_CMD_CLI ("gdb-version", "show version", 0),
|
||||
DEF_MI_CMD_MI ("inferior-tty-set", mi_cmd_inferior_tty_set),
|
||||
DEF_MI_CMD_MI ("inferior-tty-show", mi_cmd_inferior_tty_show),
|
||||
DEF_MI_CMD_MI ("info-ada-exceptions", mi_cmd_info_ada_exceptions),
|
||||
DEF_MI_CMD_MI ("info-os", mi_cmd_info_os),
|
||||
DEF_MI_CMD_MI ("interpreter-exec", mi_cmd_interpreter_exec),
|
||||
DEF_MI_CMD_MI ("list-features", mi_cmd_list_features),
|
||||
|
|
|
@ -73,6 +73,7 @@ extern mi_cmd_argv_ftype mi_cmd_file_list_exec_source_files;
|
|||
extern mi_cmd_argv_ftype mi_cmd_gdb_exit;
|
||||
extern mi_cmd_argv_ftype mi_cmd_inferior_tty_set;
|
||||
extern mi_cmd_argv_ftype mi_cmd_inferior_tty_show;
|
||||
extern mi_cmd_argv_ftype mi_cmd_info_ada_exceptions;
|
||||
extern mi_cmd_argv_ftype mi_cmd_info_os;
|
||||
extern mi_cmd_argv_ftype mi_cmd_interpreter_exec;
|
||||
extern mi_cmd_argv_ftype mi_cmd_list_features;
|
||||
|
|
|
@ -1815,6 +1815,7 @@ mi_cmd_list_features (char *command, char **argv, int argc)
|
|||
ui_out_field_string (uiout, NULL, "data-read-memory-bytes");
|
||||
ui_out_field_string (uiout, NULL, "breakpoint-notifications");
|
||||
ui_out_field_string (uiout, NULL, "ada-task-info");
|
||||
ui_out_field_string (uiout, NULL, "info-ada-exceptions");
|
||||
|
||||
#if HAVE_PYTHON
|
||||
if (gdb_python_initialized)
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2013-11-12 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* gdb.ada/mi_exc_info: New testcase.
|
||||
|
||||
2013-11-12 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* gdb.ada/info_exc: New testcase.
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
# Copyright 2013 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 "ada.exp"
|
||||
|
||||
standard_ada_testfile foo
|
||||
|
||||
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } {
|
||||
return -1
|
||||
}
|
||||
|
||||
load_lib mi-support.exp
|
||||
set MIFLAGS "-i=mi"
|
||||
|
||||
gdb_exit
|
||||
if [mi_gdb_start] {
|
||||
continue
|
||||
}
|
||||
|
||||
mi_delete_breakpoints
|
||||
mi_gdb_reinitialize_dir $srcdir/$subdir
|
||||
mi_gdb_load ${binfile}
|
||||
|
||||
mi_gdb_test "-info-ada-exceptions" \
|
||||
"\\^done,ada-exceptions={nr_rows=\"5\",nr_cols=\"2\",hdr=\\\[{width=\"1\",alignment=\"-1\",col_name=\"name\",colhdr=\"Name\"},{width=\"1\",alignment=\"-1\",col_name=\"address\",colhdr=\"Address\"}\\\],body=\\\[{name=\"constraint_error\",address=\"$hex\"},{name=\"program_error\",address=\"$hex\"},{name=\"storage_error\",address=\"$hex\"},{name=\"tasking_error\",address=\"$hex\"},{name=\"const.aint_global_e\",address=\"$hex\"}\\\]}" \
|
||||
"-info-ada-exceptions"
|
||||
|
||||
mi_gdb_test "-info-ada-exceptions task" \
|
||||
"\\^done,ada-exceptions={nr_rows=\"1\",nr_cols=\"2\",hdr=\\\[{width=\"1\",alignment=\"-1\",col_name=\"name\",colhdr=\"Name\"},{width=\"1\",alignment=\"-1\",col_name=\"address\",colhdr=\"Address\"}\\\],body=\\\[{name=\"tasking_error\",address=\"$hex\"}\\\]}" \
|
||||
"-info-ada-exceptions task"
|
||||
|
||||
mi_gdb_test "-info-ada-exceptions global" \
|
||||
"\\^done,ada-exceptions={nr_rows=\"1\",nr_cols=\"2\",hdr=\\\[{width=\"1\",alignment=\"-1\",col_name=\"name\",colhdr=\"Name\"},{width=\"1\",alignment=\"-1\",col_name=\"address\",colhdr=\"Address\"}\\\],body=\\\[{name=\"const.aint_global_e\",address=\"$hex\"}\\\]}" \
|
||||
"-info-ada-exceptions global"
|
||||
|
||||
mi_gdb_test "-info-ada-exceptions const.aint" \
|
||||
"\\^done,ada-exceptions={nr_rows=\"2\",nr_cols=\"2\",hdr=\\\[{width=\"1\",alignment=\"-1\",col_name=\"name\",colhdr=\"Name\"},{width=\"1\",alignment=\"-1\",col_name=\"address\",colhdr=\"Address\"}\\\],body=\\\[{name=\"constraint_error\",address=\"$hex\"},{name=\"const.aint_global_e\",address=\"$hex\"}\\\]}" \
|
||||
"-info-ada-exceptions const.aint"
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
-- Copyright 2013 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/>.
|
||||
|
||||
package Const is
|
||||
Aint_Global_E : exception;
|
||||
end Const;
|
|
@ -0,0 +1,20 @@
|
|||
-- Copyright 2013 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/>.
|
||||
|
||||
with Const; use Const;
|
||||
procedure Foo is
|
||||
begin
|
||||
raise Aint_Global_E;
|
||||
end Foo;
|
Loading…
Reference in New Issue