/* Everything about signal catchpoints, for GDB.
- Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+ Copyright (C) 2011-2015 Free Software Foundation, Inc.
This file is part of GDB.
#include "breakpoint.h"
#include "gdbcmd.h"
#include "inferior.h"
+#include "infrun.h"
#include "annotate.h"
#include "valprint.h"
#include "cli/cli-utils.h"
static int
signal_catchpoint_insert_location (struct bp_location *bl)
{
- struct signal_catchpoint *c = (void *) bl->owner;
+ struct signal_catchpoint *c = (struct signal_catchpoint *) bl->owner;
int i;
if (c->signals_to_be_caught != NULL)
static int
signal_catchpoint_remove_location (struct bp_location *bl)
{
- struct signal_catchpoint *c = (void *) bl->owner;
+ struct signal_catchpoint *c = (struct signal_catchpoint *) bl->owner;
int i;
if (c->signals_to_be_caught != NULL)
CORE_ADDR bp_addr,
const struct target_waitstatus *ws)
{
- const struct signal_catchpoint *c = (void *) bl->owner;
+ const struct signal_catchpoint *c
+ = (const struct signal_catchpoint *) bl->owner;
gdb_signal_type signal_number;
if (ws->kind != TARGET_WAITKIND_STOPPED)
VEC_iterate (gdb_signal_type, c->signals_to_be_caught, i, iter);
i++)
if (signal_number == iter)
- break;
+ return 1;
/* Not the same. */
- if (!iter)
- return 0;
+ gdb_assert (!iter);
+ return 0;
}
-
- return c->catch_all || !INTERNAL_SIGNAL (signal_number);
+ else
+ return c->catch_all || !INTERNAL_SIGNAL (signal_number);
}
/* Implement the "print_it" breakpoint_ops method for signal
signal_catchpoint_print_one (struct breakpoint *b,
struct bp_location **last_loc)
{
- struct signal_catchpoint *c = (void *) b;
+ struct signal_catchpoint *c = (struct signal_catchpoint *) b;
struct value_print_options opts;
struct ui_out *uiout = current_uiout;
static void
signal_catchpoint_print_mention (struct breakpoint *b)
{
- struct signal_catchpoint *c = (void *) b;
+ struct signal_catchpoint *c = (struct signal_catchpoint *) b;
if (c->signals_to_be_caught)
{
static void
signal_catchpoint_print_recreate (struct breakpoint *b, struct ui_file *fp)
{
- struct signal_catchpoint *c = (void *) b;
+ struct signal_catchpoint *c = (struct signal_catchpoint *) b;
fprintf_unfiltered (fp, "catch signal");
}
else if (c->catch_all)
fprintf_unfiltered (fp, " all");
+ fputc_unfiltered ('\n', fp);
}
/* Implement the "explains_signal" breakpoint_ops method for signal
catchpoints. */
-static enum bpstat_signal_value
-signal_catchpoint_explains_signal (struct breakpoint *b)
+static int
+signal_catchpoint_explains_signal (struct breakpoint *b, enum gdb_signal sig)
{
- return BPSTAT_SIGNAL_PASS;
+ return 1;
}
/* Create a new signal catchpoint. TEMPFLAG is true if this should be
{
int tempflag, catch_all = 0;
VEC (gdb_signal_type) *filter;
- struct gdbarch *gdbarch = get_current_arch ();
tempflag = get_cmd_context (command) == CATCH_TEMPORARY;