2012-05-24 02:33:47 +02:00
|
|
|
/* MI Command Set - information commands.
|
2013-01-01 07:33:28 +01:00
|
|
|
Copyright (C) 2011-2013 Free Software Foundation, Inc.
|
2012-05-24 02:33:47 +02:00
|
|
|
|
|
|
|
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/>. */
|
|
|
|
|
|
|
|
#include "defs.h"
|
|
|
|
#include "osdata.h"
|
|
|
|
#include "mi-cmds.h"
|
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.
2013-11-07 14:15:46 +01:00
|
|
|
#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);
|
|
|
|
}
|
2012-05-24 02:33:47 +02:00
|
|
|
|
|
|
|
void
|
|
|
|
mi_cmd_info_os (char *command, char **argv, int argc)
|
|
|
|
{
|
|
|
|
switch (argc)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
info_osdata_command ("", 0);
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
info_osdata_command (argv[0], 0);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
error (_("Usage: -info-os [INFOTYPE]"));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|