36#define INTERNAL_SIGNAL(x) ((x) == GDB_SIGNAL_TRAP || (x) == GDB_SIGNAL_INT)
44 std::vector<gdb_signal> &&sigs,
91 const char *result = gdb_signal_to_name (sig);
93 if (strcmp (result,
"?") == 0)
94 result = plongest (sig);
115 for (
int i = 0; i < GDB_SIGNAL_LAST; ++i)
145 for (
int i = 0; i < GDB_SIGNAL_LAST; ++i)
170 gdb_signal signal_number;
175 signal_number = ws.
sig ();
183 if (signal_number == iter)
198 const char *signal_name;
226 if (opts.addressprint)
231 uiout->
text (
"signals \"");
233 uiout->
text (
"signal \"");
254 catch_all ?
"<any signal>" :
"<standard signals>",
328 std::unique_ptr<signal_catchpoint> c
338static std::vector<gdb_signal>
341 std::vector<gdb_signal> result;
347 gdb_signal signal_number;
351 if (one_arg.empty ())
355 if (one_arg ==
"all")
357 arg = skip_spaces (arg);
358 if (*arg !=
'\0' || !first)
359 error (_(
"'all' cannot be caught with other signals"));
361 gdb_assert (result.empty ());
368 num = (int) strtol (one_arg.c_str (), &endptr, 0);
373 signal_number = gdb_signal_from_name (one_arg.c_str ());
374 if (signal_number == GDB_SIGNAL_UNKNOWN)
375 error (_(
"Unknown signal name '%s'."), one_arg.c_str ());
378 result.push_back (signal_number);
381 result.shrink_to_fit ();
392 bool catch_all =
false;
393 std::vector<gdb_signal> filter;
397 arg = skip_spaces (arg);
416Catch signals by their names and/or numbers.\n\
417Usage: catch signal [[NAME|NUMBER] [NAME|NUMBER]...|all]\n\
418Arguments say which signals to catch. If no arguments\n\
419are given, every \"normal\" signal will be caught.\n\
420The argument \"all\" means to also catch signals used by GDB.\n\
421Arguments, if given, should be one or more signal names\n\
422(if your system supports that), or signal numbers."),
void annotate_field(int num)
void annotate_catchpoint(int num)
struct gdbarch * get_current_arch(void)
static void create_signal_catchpoint(int tempflag, std::vector< gdb_signal > &&filter, bool catch_all)
static void catch_signal_command(const char *arg, int from_tty, struct cmd_list_element *command)
static std::vector< gdb_signal > catch_signal_split_args(const char *arg, bool *catch_all)
static unsigned int signal_catch_counts[GDB_SIGNAL_LAST]
#define INTERNAL_SIGNAL(x)
static const char * signal_to_name_or_int(enum gdb_signal sig)
void _initialize_break_catch_sig()
void add_catch_command(const char *name, const char *docstring, cmd_func_ftype *func, completer_ftype *completer, void *user_data_catch, void *user_data_tcatch)
void install_breakpoint(int internal, std::unique_ptr< breakpoint > &&arg, int update_gll)
void maybe_print_thread_hit_breakpoint(struct ui_out *uiout)
ui_file_style style() const
void field_string(const char *fldname, const char *string, const ui_file_style &style=ui_file_style())
void field_skip(const char *fldname)
void text(const char *string)
bool is_mi_like_p() const
cli_style_option metadata_style
std::string extract_arg(const char **arg)
void signal_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
enum gdb_signal gdb_signal_from_command(int num)
void get_last_target_status(process_stratum_target **target, ptid_t *ptid, target_waitstatus *status)
void signal_catch_update(const unsigned int *info)
int breakpoint_hit(const struct bp_location *bl, const address_space *aspace, CORE_ADDR bp_addr, const target_waitstatus &ws) override
int remove_location(struct bp_location *, enum remove_bp_reason reason) override
enum print_stop_action print_it(const bpstat *bs) const override
int insert_location(struct bp_location *) override
void print_mention() const override
signal_catchpoint(struct gdbarch *gdbarch, bool temp, std::vector< gdb_signal > &&sigs, bool catch_all_)
std::vector< gdb_signal > signals_to_be_caught
void print_recreate(struct ui_file *fp) const override
bool explains_signal(enum gdb_signal) override
bool print_one(bp_location **) const override
target_waitkind kind() const
void gdb_printf(struct ui_file *stream, const char *format,...)
void get_user_print_options(struct value_print_options *opts)
@ TARGET_WAITKIND_STOPPED