along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
-
-/* Standard C includes. */
#include <ctype.h>
-
-/* Local non-gdb includes. */
-#include "annotate.h"
-#include "arch-utils.h"
#include "breakpoint.h"
-#include "cli/cli-utils.h"
#include "gdbcmd.h"
#include "inferior.h"
+#include "cli/cli-utils.h"
+#include "annotate.h"
#include "mi/mi-common.h"
-#include "observable.h"
#include "valprint.h"
+#include "arch-utils.h"
+#include "observable.h"
#include "xml-syscall.h"
+#include "cli/cli-style.h"
/* An instance of this type is used to represent a syscall catchpoint.
A breakpoint is really of this type iff its ops pointer points to
std::vector<int> syscalls_to_be_caught;
};
-static const struct inferior_data *catch_syscall_inferior_data = NULL;
-
struct catch_syscall_inferior_data
{
/* We keep a count of the number of times the user has requested a
int total_syscalls_count;
};
+static const struct inferior_key<struct catch_syscall_inferior_data>
+ catch_syscall_inferior_data;
+
static struct catch_syscall_inferior_data *
get_catch_syscall_inferior_data (struct inferior *inf)
{
struct catch_syscall_inferior_data *inf_data;
- inf_data = ((struct catch_syscall_inferior_data *)
- inferior_data (inf, catch_syscall_inferior_data));
+ inf_data = catch_syscall_inferior_data.get (inf);
if (inf_data == NULL)
- {
- inf_data = new struct catch_syscall_inferior_data ();
- set_inferior_data (inf, catch_syscall_inferior_data, inf_data);
- }
+ inf_data = catch_syscall_inferior_data.emplace (inf);
return inf_data;
}
-static void
-catch_syscall_inferior_data_cleanup (struct inferior *inf, void *arg)
-{
- struct catch_syscall_inferior_data *inf_data
- = (struct catch_syscall_inferior_data *) arg;
- delete inf_data;
-}
-
-
/* Implement the "insert" breakpoint_ops method for syscall
catchpoints. */
: EXEC_ASYNC_SYSCALL_RETURN));
uiout->field_string ("disp", bpdisp_text (b->disposition));
}
- uiout->field_int ("bkptno", b->number);
+ uiout->field_signed ("bkptno", b->number);
if (last.kind == TARGET_WAITKIND_SYSCALL_ENTRY)
uiout->text (" (call to syscall ");
uiout->text (" (returned from syscall ");
if (s.name == NULL || uiout->is_mi_like_p ())
- uiout->field_int ("syscall-number", last.value.syscall_number);
+ uiout->field_signed ("syscall-number", last.value.syscall_number);
if (s.name != NULL)
uiout->field_string ("syscall-name", s.name);
xfree (text);
}
else
- uiout->field_string ("what", "<any syscall>");
+ uiout->field_string ("what", "<any syscall>", metadata_style.style ());
uiout->text ("\" ");
if (uiout->is_mi_like_p ())
initialize_syscall_catchpoint_ops ();
gdb::observers::inferior_exit.attach (clear_syscall_counts);
- catch_syscall_inferior_data
- = register_inferior_data_with_cleanup (NULL,
- catch_syscall_inferior_data_cleanup);
add_catch_command ("syscall", _("\
Catch system calls by their names, groups and/or numbers.\n\