diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 12 | ||||
-rw-r--r-- | gdb/break-catch-syscall.c | 14 | ||||
-rw-r--r-- | gdb/xml-syscall.c | 49 | ||||
-rw-r--r-- | gdb/xml-syscall.h | 10 |
4 files changed, 36 insertions, 49 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bf40e68..93ee629 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2018-12-13 John Baldwin <jhb@FreeBSD.org> + + * break-catch-syscall.c (catch_syscall_split_args): Pass 'result' + to get_syscalls_by_group. + * xml-syscall.c [!HAVE_LIBEXPAT] (get_syscalls_by_group): Return + false. + [HAVE_LIBEXPAT] (xml_list_syscalls_by_group): Append syscall + numbers to an existing vector of integers and return a bool. + (get_syscalls_by_group): Accept pointer to vector of integers + and change return type to bool. + * xml-syscall.h (get_syscalls_by_group): Likewise. + 2018-12-13 Jim Wilson <jimw@sifive.com> * riscv-tdep.c (riscv_print_one_register_info): For MSTATUS, add diff --git a/gdb/break-catch-syscall.c b/gdb/break-catch-syscall.c index 93ef74c..bad34d6 100644 --- a/gdb/break-catch-syscall.c +++ b/gdb/break-catch-syscall.c @@ -409,25 +409,13 @@ 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 { diff --git a/gdb/xml-syscall.c b/gdb/xml-syscall.c index bf17642..d1b5bf8 100644 --- a/gdb/xml-syscall.c +++ b/gdb/xml-syscall.c @@ -77,11 +77,12 @@ get_syscall_names (struct gdbarch *gdbarch) return NULL; } -struct syscall * -get_syscalls_by_group (struct gdbarch *gdbarch, const char *group) +bool +get_syscalls_by_group (struct gdbarch *gdbarch, const char *group, + std::vector<int> *syscall_numbers) { syscall_warn_user (); - return NULL; + return false; } const char ** @@ -444,40 +445,27 @@ xml_list_of_syscalls (struct gdbarch *gdbarch) } /* Iterate over the syscall_group_desc element to return a list of - syscalls that are part of the given group, terminated by an empty - element. If the syscall group doesn't exist, return NULL. */ + syscalls that are part of the given group. If the syscall group + doesn't exist, return false. */ -static struct syscall * -xml_list_syscalls_by_group (struct gdbarch *gdbarch, const char *group) +static bool +xml_list_syscalls_by_group (struct gdbarch *gdbarch, const char *group, + std::vector<int> *syscalls) { struct syscalls_info *syscalls_info = gdbarch_syscalls_info (gdbarch); struct syscall_group_desc *groupdesc; - struct syscall *syscalls = NULL; - int nsyscalls; - int i; - if (syscalls_info == NULL) - return NULL; + if (syscalls_info == NULL || syscalls == NULL) + return false; groupdesc = syscall_group_get_group_by_name (syscalls_info, group); if (groupdesc == NULL) - return NULL; - - nsyscalls = groupdesc->syscalls.size (); - syscalls = (struct syscall*) xmalloc ((nsyscalls + 1) - * sizeof (struct syscall)); - - for (i = 0; i < groupdesc->syscalls.size (); i++) - { - syscalls[i].name = groupdesc->syscalls[i]->name.c_str (); - syscalls[i].number = groupdesc->syscalls[i]->number; - } + return false; - /* Add final element marker. */ - syscalls[i].name = NULL; - syscalls[i].number = 0; + for (const struct syscall_desc *sysdesc : groupdesc->syscalls) + syscalls->push_back (sysdesc->number); - return syscalls; + return true; } /* Return a NULL terminated list of syscall groups or an empty list, if @@ -542,12 +530,13 @@ get_syscall_names (struct gdbarch *gdbarch) /* See comment in xml-syscall.h. */ -struct syscall * -get_syscalls_by_group (struct gdbarch *gdbarch, const char *group) +bool +get_syscalls_by_group (struct gdbarch *gdbarch, const char *group, + std::vector<int> *syscall_numbers) { init_syscalls_info (gdbarch); - return xml_list_syscalls_by_group (gdbarch, group); + return xml_list_syscalls_by_group (gdbarch, group, syscall_numbers); } /* See comment in xml-syscall.h. */ diff --git a/gdb/xml-syscall.h b/gdb/xml-syscall.h index 4429d66..012a4b7 100644 --- a/gdb/xml-syscall.h +++ b/gdb/xml-syscall.h @@ -51,13 +51,11 @@ void get_syscall_by_name (struct gdbarch *gdbarch, const char **get_syscall_names (struct gdbarch *gdbarch); /* Function used to retrieve the list of syscalls of a given group in - the system. Return a list of syscalls that are element of the - group, terminated by an empty element. The list is malloc'ed - and must be freed by the caller. If group doesn't exist, return - NULL. */ + the system. The syscall numbers are appended to SYSCALL_NUMBERS. + If the group doesn't exist, return false. */ -struct syscall *get_syscalls_by_group (struct gdbarch *gdbarch, - const char *group); +bool get_syscalls_by_group (struct gdbarch *gdbarch, const char *group, + std::vector<int> *syscall_numbers); /* Function used to retrieve the list of syscall groups in the system. Return an array of strings terminated by a NULL element. The list |