mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
2011-06-22 Pedro Alves <pedro@codesourcery.com>
* ada-lang.c: Include arch-utils.h. (ada_decode_exception_location): Make static. (catch_ada_exception_command): Moved here from breakpoint.c. (ada_decode_assert_location): Make static. (catch_assert_command): Moved here from breakpoint.c. (_initialize_ada_lang): Install the exception and assert catchpoint commands here. * ada-lang.h (ada_decode_exception_location) (ada_decode_assert_location): Delete declarations. * breakpoint.c (CATCH_PERMANENT, CATCH_TEMPORARY): Moved to breakpoint.h. (create_ada_exception_breakpoint): Make extern. (catch_ada_exception_command, catch_assert_command): Moved to ada-lang.c. (add_catch_command): Make extern. (_initilize_breakpoint): Don't install the exception and assert catchpoint commands here. * breakpoint.h (CATCH_PERMANENT, CATCH_TEMPORARY): Moved from breakpoint.c (add_catch_command, create_ada_exception_breakpoint): Declare.
This commit is contained in:
parent
c56053d23c
commit
9ac4176b6d
@ -1,3 +1,26 @@
|
||||
2011-06-22 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* ada-lang.c: Include arch-utils.h.
|
||||
(ada_decode_exception_location): Make static.
|
||||
(catch_ada_exception_command): Moved here from breakpoint.c.
|
||||
(ada_decode_assert_location): Make static.
|
||||
(catch_assert_command): Moved here from breakpoint.c.
|
||||
(_initialize_ada_lang): Install the exception and assert
|
||||
catchpoint commands here.
|
||||
* ada-lang.h (ada_decode_exception_location)
|
||||
(ada_decode_assert_location): Delete declarations.
|
||||
* breakpoint.c (CATCH_PERMANENT, CATCH_TEMPORARY): Moved to
|
||||
breakpoint.h.
|
||||
(create_ada_exception_breakpoint): Make extern.
|
||||
(catch_ada_exception_command, catch_assert_command): Moved to
|
||||
ada-lang.c.
|
||||
(add_catch_command): Make extern.
|
||||
(_initilize_breakpoint): Don't install the exception and assert
|
||||
catchpoint commands here.
|
||||
* breakpoint.h (CATCH_PERMANENT, CATCH_TEMPORARY): Moved from
|
||||
breakpoint.c
|
||||
(add_catch_command, create_ada_exception_breakpoint): Declare.
|
||||
|
||||
2011-06-22 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* breakpoint.c (init_raw_breakpoint_without_location): Don't add
|
||||
|
@ -61,6 +61,7 @@
|
||||
#include "psymtab.h"
|
||||
#include "value.h"
|
||||
#include "mi/mi-common.h"
|
||||
#include "arch-utils.h"
|
||||
|
||||
/* Define whether or not the C operator '/' truncates towards zero for
|
||||
differently signed operands (truncation direction is undefined in C).
|
||||
@ -11339,7 +11340,7 @@ ada_exception_sal (enum exception_catchpoint_kind ex, char *exp_string,
|
||||
See ada_exception_sal for a description of all the remaining
|
||||
function arguments of this function. */
|
||||
|
||||
struct symtab_and_line
|
||||
static struct symtab_and_line
|
||||
ada_decode_exception_location (char *args, char **addr_string,
|
||||
char **exp_string, char **cond_string,
|
||||
struct expression **cond,
|
||||
@ -11352,7 +11353,33 @@ ada_decode_exception_location (char *args, char **addr_string,
|
||||
cond, ops);
|
||||
}
|
||||
|
||||
struct symtab_and_line
|
||||
/* Implement the "catch exception" command. */
|
||||
|
||||
static void
|
||||
catch_ada_exception_command (char *arg, int from_tty,
|
||||
struct cmd_list_element *command)
|
||||
{
|
||||
struct gdbarch *gdbarch = get_current_arch ();
|
||||
int tempflag;
|
||||
struct symtab_and_line sal;
|
||||
char *addr_string = NULL;
|
||||
char *exp_string = NULL;
|
||||
char *cond_string = NULL;
|
||||
struct expression *cond = NULL;
|
||||
struct breakpoint_ops *ops = NULL;
|
||||
|
||||
tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
|
||||
|
||||
if (!arg)
|
||||
arg = "";
|
||||
sal = ada_decode_exception_location (arg, &addr_string, &exp_string,
|
||||
&cond_string, &cond, &ops);
|
||||
create_ada_exception_breakpoint (gdbarch, sal, addr_string, exp_string,
|
||||
cond_string, cond, ops, tempflag,
|
||||
from_tty);
|
||||
}
|
||||
|
||||
static struct symtab_and_line
|
||||
ada_decode_assert_location (char *args, char **addr_string,
|
||||
struct breakpoint_ops **ops)
|
||||
{
|
||||
@ -11370,6 +11397,26 @@ ada_decode_assert_location (char *args, char **addr_string,
|
||||
ops);
|
||||
}
|
||||
|
||||
/* Implement the "catch assert" command. */
|
||||
|
||||
static void
|
||||
catch_assert_command (char *arg, int from_tty,
|
||||
struct cmd_list_element *command)
|
||||
{
|
||||
struct gdbarch *gdbarch = get_current_arch ();
|
||||
int tempflag;
|
||||
struct symtab_and_line sal;
|
||||
char *addr_string = NULL;
|
||||
struct breakpoint_ops *ops = NULL;
|
||||
|
||||
tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
|
||||
|
||||
if (!arg)
|
||||
arg = "";
|
||||
sal = ada_decode_assert_location (arg, &addr_string, &ops);
|
||||
create_ada_exception_breakpoint (gdbarch, sal, addr_string, NULL, NULL, NULL,
|
||||
ops, tempflag, from_tty);
|
||||
}
|
||||
/* Operators */
|
||||
/* Information about operators given special treatment in functions
|
||||
below. */
|
||||
@ -11942,6 +11989,21 @@ this incurs a slight performance penalty, so it is recommended to NOT change\n\
|
||||
this option to \"off\" unless necessary."),
|
||||
NULL, NULL, &set_ada_list, &show_ada_list);
|
||||
|
||||
add_catch_command ("exception", _("\
|
||||
Catch Ada exceptions, when raised.\n\
|
||||
With an argument, catch only exceptions with the given name."),
|
||||
catch_ada_exception_command,
|
||||
NULL,
|
||||
CATCH_PERMANENT,
|
||||
CATCH_TEMPORARY);
|
||||
add_catch_command ("assert", _("\
|
||||
Catch failed Ada assertions, when raised.\n\
|
||||
With an argument, catch only exceptions with the given name."),
|
||||
catch_assert_command,
|
||||
NULL,
|
||||
CATCH_PERMANENT,
|
||||
CATCH_TEMPORARY);
|
||||
|
||||
varsize_limit = 65536;
|
||||
|
||||
obstack_init (&symbol_list_obstack);
|
||||
|
@ -387,15 +387,4 @@ extern int ada_build_task_list (int warn_if_null);
|
||||
|
||||
extern int ada_exception_catchpoint_p (struct breakpoint *b);
|
||||
|
||||
extern struct symtab_and_line
|
||||
ada_decode_exception_location (char *args, char **addr_string,
|
||||
char **exp_string, char **cond_string,
|
||||
struct expression **cond,
|
||||
struct breakpoint_ops **ops);
|
||||
|
||||
extern struct symtab_and_line
|
||||
ada_decode_assert_location (char *args, char **addr_string,
|
||||
struct breakpoint_ops **ops);
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -76,10 +76,6 @@
|
||||
#include "mi/mi-common.h"
|
||||
#include "python/python.h"
|
||||
|
||||
/* Arguments to pass as context to some catch command handlers. */
|
||||
#define CATCH_PERMANENT ((void *) (uintptr_t) 0)
|
||||
#define CATCH_TEMPORARY ((void *) (uintptr_t) 1)
|
||||
|
||||
/* Prototypes for local functions. */
|
||||
|
||||
static void enable_delete_command (char *, int);
|
||||
@ -10024,9 +10020,7 @@ catch_throw_command (char *arg, int from_tty, struct cmd_list_element *command)
|
||||
catch_exception_command_1 (EX_EVENT_THROW, arg, tempflag, from_tty);
|
||||
}
|
||||
|
||||
/* Create a breakpoint struct for Ada exception catchpoints. */
|
||||
|
||||
static void
|
||||
void
|
||||
create_ada_exception_breakpoint (struct gdbarch *gdbarch,
|
||||
struct symtab_and_line sal,
|
||||
char *addr_string,
|
||||
@ -10077,32 +10071,6 @@ create_ada_exception_breakpoint (struct gdbarch *gdbarch,
|
||||
update_global_location_list (1);
|
||||
}
|
||||
|
||||
/* Implement the "catch exception" command. */
|
||||
|
||||
static void
|
||||
catch_ada_exception_command (char *arg, int from_tty,
|
||||
struct cmd_list_element *command)
|
||||
{
|
||||
struct gdbarch *gdbarch = get_current_arch ();
|
||||
int tempflag;
|
||||
struct symtab_and_line sal;
|
||||
char *addr_string = NULL;
|
||||
char *exp_string = NULL;
|
||||
char *cond_string = NULL;
|
||||
struct expression *cond = NULL;
|
||||
struct breakpoint_ops *ops = NULL;
|
||||
|
||||
tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
|
||||
|
||||
if (!arg)
|
||||
arg = "";
|
||||
sal = ada_decode_exception_location (arg, &addr_string, &exp_string,
|
||||
&cond_string, &cond, &ops);
|
||||
create_ada_exception_breakpoint (gdbarch, sal, addr_string, exp_string,
|
||||
cond_string, cond, ops, tempflag,
|
||||
from_tty);
|
||||
}
|
||||
|
||||
/* Cleanup function for a syscall filter list. */
|
||||
static void
|
||||
clean_up_filters (void *arg)
|
||||
@ -10201,27 +10169,6 @@ this architecture yet."));
|
||||
&catch_syscall_breakpoint_ops);
|
||||
}
|
||||
|
||||
/* Implement the "catch assert" command. */
|
||||
|
||||
static void
|
||||
catch_assert_command (char *arg, int from_tty,
|
||||
struct cmd_list_element *command)
|
||||
{
|
||||
struct gdbarch *gdbarch = get_current_arch ();
|
||||
int tempflag;
|
||||
struct symtab_and_line sal;
|
||||
char *addr_string = NULL;
|
||||
struct breakpoint_ops *ops = NULL;
|
||||
|
||||
tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
|
||||
|
||||
if (!arg)
|
||||
arg = "";
|
||||
sal = ada_decode_assert_location (arg, &addr_string, &ops);
|
||||
create_ada_exception_breakpoint (gdbarch, sal, addr_string, NULL, NULL, NULL,
|
||||
ops, tempflag, from_tty);
|
||||
}
|
||||
|
||||
static void
|
||||
catch_command (char *arg, int from_tty)
|
||||
{
|
||||
@ -12956,9 +12903,7 @@ static struct cmd_list_element *catch_cmdlist;
|
||||
/* List of subcommands for "tcatch". */
|
||||
static struct cmd_list_element *tcatch_cmdlist;
|
||||
|
||||
/* Like add_cmd, but add the command to both the "catch" and "tcatch"
|
||||
lists, and pass some additional user data to the command function. */
|
||||
static void
|
||||
void
|
||||
add_catch_command (char *name, char *docstring,
|
||||
void (*sfunc) (char *args, int from_tty,
|
||||
struct cmd_list_element *command),
|
||||
@ -13324,20 +13269,6 @@ Arguments, if given, should be one or more system call names\n\
|
||||
catch_syscall_completer,
|
||||
CATCH_PERMANENT,
|
||||
CATCH_TEMPORARY);
|
||||
add_catch_command ("exception", _("\
|
||||
Catch Ada exceptions, when raised.\n\
|
||||
With an argument, catch only exceptions with the given name."),
|
||||
catch_ada_exception_command,
|
||||
NULL,
|
||||
CATCH_PERMANENT,
|
||||
CATCH_TEMPORARY);
|
||||
add_catch_command ("assert", _("\
|
||||
Catch failed Ada assertions, when raised.\n\
|
||||
With an argument, catch only exceptions with the given name."),
|
||||
catch_assert_command,
|
||||
NULL,
|
||||
CATCH_PERMANENT,
|
||||
CATCH_TEMPORARY);
|
||||
|
||||
c = add_com ("watch", class_breakpoint, watch_command, _("\
|
||||
Set a watchpoint for an expression.\n\
|
||||
|
@ -984,6 +984,36 @@ extern void awatch_command_wrapper (char *, int, int);
|
||||
extern void rwatch_command_wrapper (char *, int, int);
|
||||
extern void tbreak_command (char *, int);
|
||||
|
||||
/* Arguments to pass as context to some catch command handlers. */
|
||||
#define CATCH_PERMANENT ((void *) (uintptr_t) 0)
|
||||
#define CATCH_TEMPORARY ((void *) (uintptr_t) 1)
|
||||
|
||||
/* Like add_cmd, but add the command to both the "catch" and "tcatch"
|
||||
lists, and pass some additional user data to the command
|
||||
function. */
|
||||
|
||||
extern void
|
||||
add_catch_command (char *name, char *docstring,
|
||||
void (*sfunc) (char *args, int from_tty,
|
||||
struct cmd_list_element *command),
|
||||
char **(*completer) (struct cmd_list_element *cmd,
|
||||
char *text, char *word),
|
||||
void *user_data_catch,
|
||||
void *user_data_tcatch);
|
||||
|
||||
/* Create a breakpoint struct for Ada exception catchpoints. */
|
||||
|
||||
extern void
|
||||
create_ada_exception_breakpoint (struct gdbarch *gdbarch,
|
||||
struct symtab_and_line sal,
|
||||
char *addr_string,
|
||||
char *exp_string,
|
||||
char *cond_string,
|
||||
struct expression *cond,
|
||||
struct breakpoint_ops *ops,
|
||||
int tempflag,
|
||||
int from_tty);
|
||||
|
||||
extern int create_breakpoint (struct gdbarch *gdbarch, char *arg,
|
||||
char *cond_string, int thread,
|
||||
int parse_condition_and_thread,
|
||||
|
Loading…
Reference in New Issue
Block a user