/* Everything about signal catchpoints, for GDB.
- Copyright (C) 2011-2014 Free Software Foundation, Inc.
+ Copyright (C) 2011-2016 Free Software Foundation, Inc.
This file is part of GDB.
#include "valprint.h"
#include "cli/cli-utils.h"
#include "completer.h"
-#include "gdb_obstack.h"
+
+#include <string>
#define INTERNAL_SIGNAL(x) ((x) == GDB_SIGNAL_TRAP || (x) == GDB_SIGNAL_INT)
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)
catchpoints. */
static int
-signal_catchpoint_remove_location (struct bp_location *bl)
+signal_catchpoint_remove_location (struct bp_location *bl,
+ enum remove_bp_reason reason)
{
- 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)
ptid_t ptid;
struct target_waitstatus last;
const char *signal_name;
+ struct ui_out *uiout = current_uiout;
get_last_target_status (&ptid, &last);
signal_name = signal_to_name_or_int (last.value.sig);
annotate_catchpoint (b->number);
+ maybe_print_thread_hit_breakpoint (uiout);
- printf_filtered (_("\nCatchpoint %d (signal %s), "), b->number, signal_name);
+ printf_filtered (_("Catchpoint %d (signal %s), "), b->number, signal_name);
return PRINT_SRC_AND_LOC;
}
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;
{
int i;
gdb_signal_type iter;
- struct obstack text;
- struct cleanup *cleanup;
-
- obstack_init (&text);
- cleanup = make_cleanup_obstack_free (&text);
+ std::string text;
for (i = 0;
VEC_iterate (gdb_signal_type, c->signals_to_be_caught, i, iter);
const char *name = signal_to_name_or_int (iter);
if (i > 0)
- obstack_grow (&text, " ", 1);
- obstack_grow (&text, name, strlen (name));
+ text += " ";
+ text += name;
}
- obstack_grow (&text, "", 1);
- ui_out_field_string (uiout, "what", obstack_base (&text));
- do_cleanups (cleanup);
+ ui_out_field_string (uiout, "what", text.c_str ());
}
else
ui_out_field_string (uiout, "what",
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