/* Everything about syscall catchpoints, for GDB.
- Copyright (C) 2009-2017 Free Software Foundation, Inc.
+ Copyright (C) 2009-2018 Free Software Foundation, Inc.
This file is part of GDB.
#include "mi/mi-common.h"
#include "valprint.h"
#include "arch-utils.h"
-#include "observer.h"
+#include "observable.h"
#include "xml-syscall.h"
/* An instance of this type is used to represent a syscall catchpoint.
{
for (int iter : c->syscalls_to_be_caught)
{
- int elem;
-
if (iter >= inf_data->syscalls_counts.size ())
inf_data->syscalls_counts.resize (iter + 1);
++inf_data->syscalls_counts[iter];
return target_set_syscall_catchpoint (ptid_get_pid (inferior_ptid),
inf_data->total_syscalls_count != 0,
inf_data->any_syscall_count,
- inf_data->syscalls_counts.size (),
- inf_data->syscalls_counts.data ());
+ inf_data->syscalls_counts);
}
/* Implement the "remove" breakpoint_ops method for syscall
{
for (int iter : c->syscalls_to_be_caught)
{
- int elem;
if (iter >= inf_data->syscalls_counts.size ())
/* Shouldn't happen. */
continue;
return target_set_syscall_catchpoint (ptid_get_pid (inferior_ptid),
inf_data->total_syscalls_count != 0,
inf_data->any_syscall_count,
- inf_data->syscalls_counts.size (),
- inf_data->syscalls_counts.data ());
+ inf_data->syscalls_counts);
}
/* Implement the "breakpoint_hit" breakpoint_ops method for syscall
static int
breakpoint_hit_catch_syscall (const struct bp_location *bl,
- struct address_space *aspace, CORE_ADDR bp_addr,
+ const address_space *aspace, CORE_ADDR bp_addr,
const struct target_waitstatus *ws)
{
/* We must check if we are catching specific syscalls in this
/* Splits the argument using space as delimiter. */
static std::vector<int>
-catch_syscall_split_args (char *arg)
+catch_syscall_split_args (const char *arg)
{
std::vector<int> result;
struct gdbarch *gdbarch = target_gdbarch ();
/* Implement the "catch syscall" command. */
static void
-catch_syscall_command_1 (char *arg, int from_tty,
+catch_syscall_command_1 (const char *arg, int from_tty,
struct cmd_list_element *command)
{
int tempflag;
struct gdbarch *gdbarch = get_current_arch ();
gdb::unique_xmalloc_ptr<const char *> group_list;
const char *prefix;
- int i;
/* Completion considers ':' to be a word separator, so we use this to
verify whether the previous word was a group prefix. If so, we
std::vector<std::string> holders;
/* Append "group:" prefix to syscall groups. */
- for (i = 0; group_ptr[i] != NULL; i++)
- {
- std::string prefixed_group = string_printf ("group:%s",
- group_ptr[i]);
+ for (int i = 0; group_ptr[i] != NULL; i++)
+ holders.push_back (string_printf ("group:%s", group_ptr[i]));
- group_ptr[i] = prefixed_group.c_str ();
- holders.push_back (std::move (prefixed_group));
- }
+ for (int i = 0; group_ptr[i] != NULL; i++)
+ group_ptr[i] = holders[i].c_str ();
if (syscall_list != NULL)
complete_on_enum (tracker, syscall_list.get (), word, word);
{
initialize_syscall_catchpoint_ops ();
- observer_attach_inferior_exit (clear_syscall_counts);
+ gdb::observers::inferior_exit.attach (clear_syscall_counts);
catch_syscall_inferior_data
= register_inferior_data_with_cleanup (NULL,
catch_syscall_inferior_data_cleanup);