Split rank_one_type_parm_func from rank_one_type
[deliverable/binutils-gdb.git] / gdb / break-catch-syscall.c
index dd7b37997b4519c8a323fc39ab450d711942d852..6a911fbc2a3aa470adbe3ab25b633c670d79778b 100644 (file)
@@ -1,6 +1,6 @@
 /* Everything about syscall catchpoints, for GDB.
 
-   Copyright (C) 2009-2017 Free Software Foundation, Inc.
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -27,7 +27,7 @@
 #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.
@@ -110,11 +110,10 @@ insert_catch_syscall (struct bp_location *bl)
        }
     }
 
-  return target_set_syscall_catchpoint (ptid_get_pid (inferior_ptid),
+  return target_set_syscall_catchpoint (inferior_ptid.pid (),
                                        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
@@ -142,11 +141,10 @@ remove_catch_syscall (struct bp_location *bl, enum remove_bp_reason reason)
         }
     }
 
-  return target_set_syscall_catchpoint (ptid_get_pid (inferior_ptid),
+  return target_set_syscall_catchpoint (inferior_ptid.pid (),
                                        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
@@ -267,7 +265,7 @@ print_one_catch_syscall (struct breakpoint *b,
 
       for (int iter : c->syscalls_to_be_caught)
         {
-          char *x = text;
+          char *previous_text = text;
           struct syscall s;
           get_syscall_by_number (gdbarch, iter, &s);
 
@@ -276,14 +274,15 @@ print_one_catch_syscall (struct breakpoint *b,
           else
             text = xstrprintf ("%s%d, ", text, iter);
 
-          /* We have to xfree the last 'text' (now stored at 'x')
-             because xstrprintf dynamically allocates new space for it
-             on every call.  */
-         xfree (x);
+          /* We have to xfree previous_text because xstrprintf dynamically
+            allocates new space for text on every call.  */
+         xfree (previous_text);
         }
       /* Remove the last comma.  */
       text[strlen (text) - 2] = '\0';
       uiout->field_string ("what", text);
+      /* xfree last text.  */
+      xfree (text);
     }
   else
     uiout->field_string ("what", "<any syscall>");
@@ -411,40 +410,23 @@ catch_syscall_split_args (const char *arg)
        {
          /* We have a syscall group.  Let's expand it into a syscall
             list before inserting.  */
-         struct syscall *syscall_list;
          const char *group_name;
 
          /* Skip over "g:" and "group:" prefix strings.  */
          group_name = strchr (cur_name, ':') + 1;
 
-         syscall_list = get_syscalls_by_group (gdbarch, group_name);
-
-         if (syscall_list == NULL)
+         if (!get_syscalls_by_group (gdbarch, group_name, &result))
            error (_("Unknown syscall group '%s'."), group_name);
-
-         for (i = 0; syscall_list[i].name != NULL; i++)
-           {
-             /* Insert each syscall that are part of the group.  No
-                need to check if it is valid.  */
-             result.push_back (syscall_list[i].number);
-           }
-
-         xfree (syscall_list);
        }
       else
        {
-         /* We have a name.  Let's check if it's valid and convert it
-            to a number.  */
-         get_syscall_by_name (gdbarch, cur_name, &s);
-
-         if (s.number == UNKNOWN_SYSCALL)
+         /* We have a name.  Let's check if it's valid and fetch a
+            list of matching numbers.  */
+         if (!get_syscalls_by_name (gdbarch, cur_name, &result))
            /* Here we have to issue an error instead of a warning,
               because GDB cannot do anything useful if there's no
               syscall number to be caught.  */
            error (_("Unknown syscall name '%s'."), cur_name);
-
-         /* Ok, it's valid.  */
-         result.push_back (s.number);
        }
     }
 
@@ -634,7 +616,7 @@ _initialize_break_catch_syscall (void)
 {
   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);
This page took 0.034612 seconds and 4 git commands to generate.