/* Everything about signal catchpoints, for GDB.
- Copyright (C) 2011-2017 Free Software Foundation, Inc.
+ Copyright (C) 2011-2020 Free Software Foundation, Inc.
This file is part of GDB.
#include "valprint.h"
#include "cli/cli-utils.h"
#include "completer.h"
+#include "cli/cli-style.h"
#include <string>
static int
signal_catchpoint_breakpoint_hit (const struct bp_location *bl,
- struct address_space *aspace,
+ const address_space *aspace,
CORE_ADDR bp_addr,
const struct target_waitstatus *ws)
{
signal_catchpoint_print_it (bpstat bs)
{
struct breakpoint *b = bs->breakpoint_at;
- ptid_t ptid;
struct target_waitstatus last;
const char *signal_name;
struct ui_out *uiout = current_uiout;
- get_last_target_status (&ptid, &last);
+ get_last_target_status (nullptr, nullptr, &last);
signal_name = signal_to_name_or_int (last.value.sig);
}
else
uiout->field_string ("what",
- c->catch_all ? "<any signal>" : "<standard signals>");
+ c->catch_all ? "<any signal>" : "<standard signals>",
+ metadata_style.style ());
uiout->text ("\" ");
if (uiout->is_mi_like_p ())
create_signal_catchpoint (int tempflag, std::vector<gdb_signal> &&filter,
bool catch_all)
{
- struct signal_catchpoint *c;
struct gdbarch *gdbarch = get_current_arch ();
- c = new signal_catchpoint ();
- init_catchpoint (c, gdbarch, tempflag, NULL, &signal_catchpoint_ops);
+ std::unique_ptr<signal_catchpoint> c (new signal_catchpoint ());
+ init_catchpoint (c.get (), gdbarch, tempflag, NULL, &signal_catchpoint_ops);
c->signals_to_be_caught = std::move (filter);
c->catch_all = catch_all;
- install_breakpoint (0, c, 1);
+ install_breakpoint (0, std::move (c), 1);
}
list, which is empty if no filtering is required. */
static std::vector<gdb_signal>
-catch_signal_split_args (char *arg, bool *catch_all)
+catch_signal_split_args (const char *arg, bool *catch_all)
{
std::vector<gdb_signal> result;
bool first = true;
gdb_signal signal_number;
char *endptr;
- gdb::unique_xmalloc_ptr<char> one_arg (extract_arg (&arg));
- if (one_arg == NULL)
+ std::string one_arg = extract_arg (&arg);
+ if (one_arg.empty ())
break;
/* Check for the special flag "all". */
- if (strcmp (one_arg.get (), "all") == 0)
+ if (one_arg == "all")
{
arg = skip_spaces (arg);
if (*arg != '\0' || !first)
first = false;
/* Check if the user provided a signal name or a number. */
- num = (int) strtol (one_arg.get (), &endptr, 0);
+ num = (int) strtol (one_arg.c_str (), &endptr, 0);
if (*endptr == '\0')
signal_number = gdb_signal_from_command (num);
else
{
- signal_number = gdb_signal_from_name (one_arg.get ());
+ signal_number = gdb_signal_from_name (one_arg.c_str ());
if (signal_number == GDB_SIGNAL_UNKNOWN)
- error (_("Unknown signal name '%s'."), one_arg.get ());
+ error (_("Unknown signal name '%s'."), one_arg.c_str ());
}
result.push_back (signal_number);
/* Implement the "catch signal" command. */
static void
-catch_signal_command (char *arg, int from_tty,
+catch_signal_command (const char *arg, int from_tty,
struct cmd_list_element *command)
{
int tempflag;
ops->explains_signal = signal_catchpoint_explains_signal;
}
-initialize_file_ftype _initialize_break_catch_sig;
-
+void _initialize_break_catch_sig ();
void
-_initialize_break_catch_sig (void)
+_initialize_break_catch_sig ()
{
initialize_signal_catchpoint_ops ();