This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Implement catch syscall group


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=e34879080d8935792ef3942efa5f25b4c3169b5a

commit e34879080d8935792ef3942efa5f25b4c3169b5a
Author: Gabriel Krisman Bertazi <gabriel@krisman.be>
Date:   Sat Jul 23 18:38:24 2016 -0300

    Implement catch syscall group
    
    Implement support to add catchpoints for a group of related syscalls
    using the syntax:
    
    (gdb) catch syscall group:<group>
    or
    (gdb) catch syscall g:<group>
    
    Several groups are predefined in the xml files for all architectures
    supported by GDB over Linux.  They are based on the groups defined by
    strace.
    
    gdb/
    
    	* xml-syscall.c (get_syscalls_by_group): New.
    	(get_syscall_group_names): New.
    	(struct syscall_group_desc): New structure to store group data.
    	(struct syscalls_info): Include field to store the group list.
    	(sysinfo_free_syscall_group_desc): New.
    	(free_syscalls_info): Free group list.
    	(syscall_group_create_syscall_group_desc): New.
    	(syscall_group_add_syscall): New.
    	(syscall_create_syscall_desc): Add syscall to its groups.
    	(syscall_start_syscall): Load group attribute.
    	(syscall_group_get_group_by_name): New.
    	(xml_list_syscalls_by_group): New.
    	(xml_list_of_groups): New.
    	* xml-syscall.h (get_syscalls_by_group): Export function
    	to retrieve a list of syscalls filtered by the group name.
    	(get_syscall_group_names): Export function to retrieve the list
    	of syscall groups.
    	* break-catch-syscall.c (catch_syscall_split_args): Verify if
    	argument is a syscall group and expand it to a list of syscalls
    	when creating catchpoints.
    	(catch_syscall_completer): Add word completion for system call
    	groups.
    	* configure.ac: Include dependency for xsltproc when building
    	in maintainer-mode.
    	* break-catch-syscall.c (_initialize_breakpoint): Update catch
    	syscall command documentation.
    	* NEWS: Include section about catching groups of syscalls.
    	* configure: Regenerate.
    	* data-directory/Makefile.in: Generate syscall xml when building
    	in maintainer mode.
    	* syscalls/gdb-syscalls.dtd: Include group attribute to the
    	syscall element.
    	* syscalls/apply-defaults.xsl: New.
    	* syscalls/linux-defaults.xml.in: New.
    	* syscalls/aarch64-linux.xml: Rename to aarch64-linux.xml.in.
    	* syscalls/amd64-linux.xml: Rename to amd64-linux.xml.in.
    	* syscalls/arm-linux.xml: Rename to arm-linux.xml.in.
    	* syscalls/bfin-linux.xml: Rename to bfin-linux.xml.in.
    	* syscalls/i386-linux.xml: Rename to i386-linux.xml.in.
    	* syscalls/mips-n32-linux.xml: Rename to mips-n32-linux.xml.in.
    	* syscalls/mips-n64-linux.xml: Rename to mips-n64-linux.xml.in.
    	* syscalls/mips-o32-linux.xml: Rename to mips-o32-linux.xml.in.
    	* syscalls/ppc-linux.xml: Rename to ppc-linux.xml.in.
    	* syscalls/ppc64-linux.xml: Rename to ppc64-linux.xml.in.
    	* syscalls/s390-linux.xml: Rename to s390-linux.xml.in.
    	* syscalls/s390x-linux.xml: Rename to s390x-linux.xml.in.
    	* syscalls/sparc-linux.xml: Rename to sparc-linux.xml.in.
    	* syscalls/sparc64-linux.xml: Rename to sparc64-linux.xml.in.
    	* syscalls/aarch64-linux.xml: Regenerate.
    	* syscalls/amd64-linux.xml: Regenerate.
    	* syscalls/arm-linux.xml: Regenerate.
    	* syscalls/i386-linux.xml: Regenerate.
    	* syscalls/mips-n32-linux.xml: Regenerate.
    	* syscalls/mips-n64-linux.xml: Regenerate.
    	* syscalls/mips-o32-linux.xml: Regenerate.
    	* syscalls/ppc-linux.xml: Regenerate.
    	* syscalls/ppc64-linux.xml: Regenerate.
    	* syscalls/s390-linux.xml: Regenerate.
    	* syscalls/s390x-linux.xml: Regenerate.
    	* syscalls/sparc-linux.xml: Regenerate.
    	* syscalls/sparc64-linux.xml: Regenerate.
    
    gdb/testsuite/
    
    	* gdb.base/catch-syscall.exp (do_syscall_tests): Add call
    	to test_catch_syscall_group.
    	(test_catch_syscall_group): New.
    
    gdb/doc/
    
    	* gdb.texinfo (Set Catchpoints): Add 'group' argument to catch
    	syscall.

Diff:
---
 gdb/ChangeLog                                      |  64 +++
 gdb/NEWS                                           |   5 +
 gdb/break-catch-syscall.c                          | 103 ++++-
 gdb/configure                                      |  54 +++
 gdb/configure.ac                                   |   9 +
 gdb/data-directory/Makefile.in                     |  25 +-
 gdb/doc/ChangeLog                                  |   5 +
 gdb/doc/gdb.texinfo                                |  28 +-
 gdb/syscalls/aarch64-linux.xml                     | 318 ++++++++-------
 gdb/syscalls/aarch64-linux.xml.in                  | 271 +++++++++++++
 gdb/syscalls/amd64-linux.xml                       | 367 +++++++++--------
 gdb/syscalls/amd64-linux.xml.in                    | 314 ++++++++++++++
 gdb/syscalls/apply-defaults.xsl                    |  43 ++
 gdb/syscalls/arm-linux.xml                         | 449 ++++++++++-----------
 gdb/syscalls/arm-linux.xml.in                      | 398 ++++++++++++++++++
 gdb/syscalls/{bfin-linux.xml => bfin-linux.xml.in} |   0
 gdb/syscalls/gdb-syscalls.dtd                      |   3 +-
 gdb/syscalls/i386-linux.xml                        | 357 ++++++++--------
 gdb/syscalls/i386-linux.xml.in                     | 340 ++++++++++++++++
 gdb/syscalls/linux-defaults.xml.in                 | 243 +++++++++++
 gdb/syscalls/mips-n32-linux.xml                    | 381 +++++++++--------
 gdb/syscalls/mips-n32-linux.xml.in                 | 319 +++++++++++++++
 gdb/syscalls/mips-n64-linux.xml                    | 371 +++++++++--------
 gdb/syscalls/mips-n64-linux.xml.in                 | 312 ++++++++++++++
 gdb/syscalls/mips-o32-linux.xml                    | 405 +++++++++----------
 gdb/syscalls/mips-o32-linux.xml.in                 | 347 ++++++++++++++++
 gdb/syscalls/ppc-linux.xml                         | 325 ++++++++-------
 gdb/syscalls/ppc-linux.xml.in                      | 310 ++++++++++++++
 gdb/syscalls/ppc64-linux.xml                       | 295 +++++++-------
 gdb/syscalls/ppc64-linux.xml.in                    | 295 ++++++++++++++
 gdb/syscalls/s390-linux.xml                        | 409 ++++++++++---------
 gdb/syscalls/s390-linux.xml.in                     | 367 +++++++++++++++++
 gdb/syscalls/s390x-linux.xml                       | 383 +++++++++---------
 gdb/syscalls/s390x-linux.xml.in                    | 334 +++++++++++++++
 gdb/syscalls/sparc-linux.xml                       | 403 +++++++++---------
 gdb/syscalls/sparc-linux.xml.in                    | 344 ++++++++++++++++
 gdb/syscalls/sparc64-linux.xml                     | 389 +++++++++---------
 gdb/syscalls/sparc64-linux.xml.in                  | 326 +++++++++++++++
 gdb/testsuite/ChangeLog                            |   6 +
 gdb/testsuite/gdb.base/catch-syscall.exp           |  39 ++
 gdb/xml-syscall.c                                  | 234 ++++++++++-
 gdb/xml-syscall.h                                  |  16 +
 42 files changed, 7538 insertions(+), 2468 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 56cd5ba..005c3e9 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,67 @@
+2016-07-23  Gabriel Krisman Bertazi  <gabriel@krisman.be>
+
+	* xml-syscall.c (get_syscalls_by_group): New.
+	(get_syscall_group_names): New.
+	(struct syscall_group_desc): New structure to store group data.
+	(struct syscalls_info): Include field to store the group list.
+	(sysinfo_free_syscall_group_desc): New.
+	(free_syscalls_info): Free group list.
+	(syscall_group_create_syscall_group_desc): New.
+	(syscall_group_add_syscall): New.
+	(syscall_create_syscall_desc): Add syscall to its groups.
+	(syscall_start_syscall): Load group attribute.
+	(syscall_group_get_group_by_name): New.
+	(xml_list_syscalls_by_group): New.
+	(xml_list_of_groups): New.
+	* xml-syscall.h (get_syscalls_by_group): Export function
+	to retrieve a list of syscalls filtered by the group name.
+	(get_syscall_group_names): Export function to retrieve the list
+	of syscall groups.
+	* break-catch-syscall.c (catch_syscall_split_args): Verify if
+	argument is a syscall group and expand it to a list of syscalls
+	when creating catchpoints.
+	(catch_syscall_completer): Add word completion for system call
+	groups.
+	* configure.ac: Include dependency for xsltproc when building
+	in maintainer-mode.
+	* break-catch-syscall.c (_initialize_breakpoint): Update catch
+	syscall command documentation.
+	* NEWS: Include section about catching groups of syscalls.
+	* configure: Regenerate.
+	* data-directory/Makefile.in: Generate syscall xml when building
+	in maintainer mode.
+	* syscalls/gdb-syscalls.dtd: Include group attribute to the
+	syscall element.
+	* syscalls/apply-defaults.xsl: New.
+	* syscalls/linux-defaults.xml.in: New.
+	* syscalls/aarch64-linux.xml: Rename to aarch64-linux.xml.in.
+	* syscalls/amd64-linux.xml: Rename to amd64-linux.xml.in.
+	* syscalls/arm-linux.xml: Rename to arm-linux.xml.in.
+	* syscalls/bfin-linux.xml: Rename to bfin-linux.xml.in.
+	* syscalls/i386-linux.xml: Rename to i386-linux.xml.in.
+	* syscalls/mips-n32-linux.xml: Rename to mips-n32-linux.xml.in.
+	* syscalls/mips-n64-linux.xml: Rename to mips-n64-linux.xml.in.
+	* syscalls/mips-o32-linux.xml: Rename to mips-o32-linux.xml.in.
+	* syscalls/ppc-linux.xml: Rename to ppc-linux.xml.in.
+	* syscalls/ppc64-linux.xml: Rename to ppc64-linux.xml.in.
+	* syscalls/s390-linux.xml: Rename to s390-linux.xml.in.
+	* syscalls/s390x-linux.xml: Rename to s390x-linux.xml.in.
+	* syscalls/sparc-linux.xml: Rename to sparc-linux.xml.in.
+	* syscalls/sparc64-linux.xml: Rename to sparc64-linux.xml.in.
+	* syscalls/aarch64-linux.xml: Regenerate.
+	* syscalls/amd64-linux.xml: Regenerate.
+	* syscalls/arm-linux.xml: Regenerate.
+	* syscalls/i386-linux.xml: Regenerate.
+	* syscalls/mips-n32-linux.xml: Regenerate.
+	* syscalls/mips-n64-linux.xml: Regenerate.
+	* syscalls/mips-o32-linux.xml: Regenerate.
+	* syscalls/ppc-linux.xml: Regenerate.
+	* syscalls/ppc64-linux.xml: Regenerate.
+	* syscalls/s390-linux.xml: Regenerate.
+	* syscalls/s390x-linux.xml: Regenerate.
+	* syscalls/sparc-linux.xml: Regenerate.
+	* syscalls/sparc64-linux.xml: Regenerate.
+
 2016-07-23  Andrew Pinski  <apinski@cavium.com>
 
 	* nat/aarch64-linux-hw-point.c
diff --git a/gdb/NEWS b/gdb/NEWS
index 0e339dd..17c762c 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -60,6 +60,11 @@
   for its own control and synchronization, invisible to the command
   line.
 
+* The "catch syscall" command catches groups of related syscalls.
+
+  The "catch syscall" command now supports catching a group of related
+  syscalls using the 'group:' or 'g:' prefix.
+
 * New commands
 
 skip -file file
diff --git a/gdb/break-catch-syscall.c b/gdb/break-catch-syscall.c
index dbebdda..602aba4 100644
--- a/gdb/break-catch-syscall.c
+++ b/gdb/break-catch-syscall.c
@@ -464,10 +464,38 @@ catch_syscall_split_args (char *arg)
       cur_name[i] = '\0';
       arg += i;
 
-      /* Check if the user provided a syscall name or a number.  */
+      /* Check if the user provided a syscall name, group, or a number.  */
       syscall_number = (int) strtol (cur_name, &endptr, 0);
       if (*endptr == '\0')
-	get_syscall_by_number (gdbarch, syscall_number, &s);
+	{
+	  get_syscall_by_number (gdbarch, syscall_number, &s);
+	  VEC_safe_push (int, result, s.number);
+	}
+      else if (startswith (cur_name, "g:")
+	       || startswith (cur_name, "group:"))
+	{
+	  /* 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)
+	    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.  */
+	      VEC_safe_push (int, result, syscall_list[i].number);
+	    }
+
+	  xfree (syscall_list);
+	}
       else
 	{
 	  /* We have a name.  Let's check if it's valid and convert it
@@ -479,10 +507,10 @@ catch_syscall_split_args (char *arg)
 	       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.  */
-      VEC_safe_push (int, result, s.number);
+	  /* Ok, it's valid.  */
+	  VEC_safe_push (int, result, s.number);
+	}
     }
 
   discard_cleanups (cleanup);
@@ -597,11 +625,58 @@ static VEC (char_ptr) *
 catch_syscall_completer (struct cmd_list_element *cmd,
                          const char *text, const char *word)
 {
-  const char **list = get_syscall_names (get_current_arch ());
-  VEC (char_ptr) *retlist
-    = (list == NULL) ? NULL : complete_on_enum (list, word, word);
+  struct gdbarch *gdbarch = get_current_arch ();
+  struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
+  VEC (char_ptr) *group_retlist = NULL;
+  VEC (char_ptr) *syscall_retlist = NULL;
+  VEC (char_ptr) *retlist = NULL;
+  const char **group_list = NULL;
+  const char **syscall_list = NULL;
+  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
+     build the completion list using group names only.  */
+  for (prefix = word; prefix != text && prefix[-1] != ' '; prefix--)
+    ;
+
+  if (startswith (prefix, "g:") || startswith (prefix, "group:"))
+    {
+      /* Perform completion inside 'group:' namespace only.  */
+      group_list = get_syscall_group_names (gdbarch);
+      retlist = (group_list == NULL
+		 ? NULL : complete_on_enum (group_list, word, word));
+    }
+  else
+    {
+      /* Complete with both, syscall names and groups.  */
+      syscall_list = get_syscall_names (gdbarch);
+      group_list = get_syscall_group_names (gdbarch);
+
+      /* Append "group:" prefix to syscall groups.  */
+      for (i = 0; group_list[i] != NULL; i++)
+	{
+	  char *prefixed_group = xstrprintf ("group:%s", group_list[i]);
+
+	  group_list[i] = prefixed_group;
+	  make_cleanup (xfree, prefixed_group);
+	}
+
+      syscall_retlist = ((syscall_list == NULL)
+			 ? NULL : complete_on_enum (syscall_list, word, word));
+      group_retlist = ((group_list == NULL)
+		       ? NULL : complete_on_enum (group_list, word, word));
+
+      retlist = VEC_merge (char_ptr, syscall_retlist, group_retlist);
+    }
+
+  VEC_free (char_ptr, syscall_retlist);
+  VEC_free (char_ptr, group_retlist);
+  xfree (syscall_list);
+  xfree (group_list);
+  do_cleanups (cleanups);
 
-  xfree (list);
   return retlist;
 }
 
@@ -649,11 +724,11 @@ _initialize_break_catch_syscall (void)
 					   catch_syscall_inferior_data_cleanup);
 
   add_catch_command ("syscall", _("\
-Catch system calls by their names and/or numbers.\n\
-Arguments say which system calls to catch.  If no arguments\n\
-are given, every system call will be caught.\n\
-Arguments, if given, should be one or more system call names\n\
-(if your system supports that), or system call numbers."),
+Catch system calls by their names, groups and/or numbers.\n\
+Arguments say which system calls to catch.  If no arguments are given,\n\
+every system call will be caught.  Arguments, if given, should be one\n\
+or more system call names (if your system supports that), system call\n\
+groups or system call numbers."),
 		     catch_syscall_command_1,
 		     catch_syscall_completer,
 		     CATCH_PERMANENT,
diff --git a/gdb/configure b/gdb/configure
index 43d207c..067f86e 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -593,6 +593,7 @@ ac_subst_vars='LTLIBOBJS
 LIBOBJS
 GCORE_TRANSFORM_NAME
 GDB_TRANSFORM_NAME
+XSLTPROC
 GDB_NM_FILE
 LTLIBBABELTRACE
 LIBBABELTRACE
@@ -16499,6 +16500,59 @@ _ACEOF
 fi
 
 
+for ac_prog in xsltproc
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_XSLTPROC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $XSLTPROC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_XSLTPROC="$XSLTPROC" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_XSLTPROC="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+XSLTPROC=$ac_cv_path_XSLTPROC
+if test -n "$XSLTPROC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5
+$as_echo "$XSLTPROC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$XSLTPROC" && break
+done
+test -n "$XSLTPROC" || XSLTPROC="missing"
+
+if test "x$USE_MAINTAINER_MODE" = xyes; then
+  if test "${XSLTPROC}" = missing; then
+    as_fn_error "unable to find xsltproc.  maintainer-mode requires xsltproc." "$LINENO" 5
+  fi
+fi
+
+
 ac_sources="$files"
 ac_dests="$links"
 while test -n "$ac_sources"; do
diff --git a/gdb/configure.ac b/gdb/configure.ac
index 5e2e938..f774db7 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -2344,6 +2344,15 @@ if test "${nativefile}" != ""; then
 fi
 AC_SUBST(GDB_NM_FILE)
 
+dnl Add dependency for xsltproc if building with maintainer-mode enabled.
+AC_PATH_PROGS(XSLTPROC, xsltproc, missing)
+if test "x$USE_MAINTAINER_MODE" = xyes; then
+  if test "${XSLTPROC}" = missing; then
+    AC_ERROR(unable to find xsltproc.  maintainer-mode requires xsltproc.)
+  fi
+fi
+AC_SUBST(XSLTPROC)
+
 AC_LINK_FILES($files, $links)
 
 dnl Check for exe extension set on certain hosts (e.g. Win32)
diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in
index 0beca55..3f23516 100644
--- a/gdb/data-directory/Makefile.in
+++ b/gdb/data-directory/Makefile.in
@@ -22,6 +22,7 @@ PYTHON_SRCDIR = $(srcdir)/../python/lib
 GUILE_SRCDIR = $(srcdir)/../guile/lib
 SYSTEM_GDBINIT_SRCDIR = $(srcdir)/../system-gdbinit
 VPATH = $(srcdir):$(SYSCALLS_SRCDIR):$(PYTHON_SRCDIR):$(GUILE_SRCDIR):$(SYSTEM_GDBINIT_SRCDIR)
+XSLTPROC = @XSLTPROC@
 
 top_srcdir = @top_srcdir@
 top_builddir = @top_builddir@
@@ -44,15 +45,14 @@ GDB_DATADIR = @GDB_DATADIR@
 
 SYSCALLS_DIR = syscalls
 SYSCALLS_INSTALL_DIR = $(DESTDIR)$(GDB_DATADIR)/$(SYSCALLS_DIR)
-SYSCALLS_FILES = \
-	gdb-syscalls.dtd \
-	arm-linux.xml aarch64-linux.xml \
+GEN_SYSCALLS_FILES = arm-linux.xml aarch64-linux.xml \
 	ppc-linux.xml ppc64-linux.xml \
 	i386-linux.xml amd64-linux.xml \
 	sparc-linux.xml sparc64-linux.xml \
 	mips-o32-linux.xml mips-n32-linux.xml mips-n64-linux.xml \
-	s390-linux.xml s390x-linux.xml \
-	freebsd.xml
+	s390-linux.xml s390x-linux.xml
+
+SYSCALLS_FILES = gdb-syscalls.dtd freebsd.xml $(GEN_SYSCALLS_FILES)
 
 PYTHON_DIR = python
 PYTHON_INSTALL_DIR = $(DESTDIR)$(GDB_DATADIR)/$(PYTHON_DIR)
@@ -163,6 +163,21 @@ FLAGS_TO_PASS = \
 .PHONY: all
 all: stamp-syscalls stamp-python stamp-guile stamp-system-gdbinit
 
+%.xml: @MAINTAINER_MODE_TRUE@ %.xml.in apply-defaults.xsl linux-defaults.xml.in
+	$(XSLTPROC) -o $(SYSCALLS_SRCDIR)/$@ $(SYSCALLS_SRCDIR)/apply-defaults.xsl\
+		$(SYSCALLS_SRCDIR)/$@.in
+
+.PHONY: syscall-xml
+syscall-xml: $(GEN_SYSCALLS_FILES)
+
+.PHONY: clean-syscall-xml
+# Only clean files generated XML files.
+clean-syscall-xml:
+	files='$(GEN_SYSCALLS_FILES)' ; \
+	for file in $$files; do \
+		rm -f "$(SYSCALLS_SRCDIR)/$$file"; \
+	done
+
 # For portability's sake, we need to handle systems that don't have
 # symbolic links.
 stamp-syscalls: Makefile $(SYSCALLS_FILES)
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index e45d925..39eeab2 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,3 +1,8 @@
+2016-07-23  Gabriel Krisman Bertazi  <gabriel@krisman.be>
+
+	* gdb.texinfo (Set Catchpoints): Add 'group' argument to catch
+	syscall.
+
 2016-06-30  РÑ?Ñ?лан Ð?жбÑ?лаÑ?ов  <lrn1986@gmail.com>
 
 	* gdb.texinfo (Cygwin Native): Document the new 'signal-event'
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 285a912..ae74ed4 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -4375,7 +4375,7 @@ A failed Ada assertion.
 A call to @code{exec}.
 
 @item syscall
-@itemx syscall @r{[}@var{name} @r{|} @var{number}@r{]} @dots{} 
+@itemx syscall @r{[}@var{name} @r{|} @var{number} @r{|} @r{group:}@var{groupname} @r{|} @r{g:}@var{groupname}@r{]} @dots{}
 @kindex catch syscall
 @cindex break on a system call.
 A call to or return from a system call, a.k.a.@: @dfn{syscall}.  A
@@ -4410,6 +4410,15 @@ may be useful if @value{GDBN}'s database does not have the complete
 list of syscalls on your system (e.g., because @value{GDBN} lags
 behind the OS upgrades).
 
+You may specify a group of related syscalls to be caught at once using
+the @code{group:} syntax (@code{g:} is a shorter equivalent).  For
+instance, on some platforms @value{GDBN} allows you to catch all
+network related syscalls, by passing the argument @code{group:network}
+to @code{catch syscall}.  Note that not all syscall groups are
+available in every system.  You can use the command completion
+facilities (@pxref{Completion,, command completion}) to list the
+syscall groups available on your environment.
+
 The example below illustrates how this command works if you don't provide
 arguments to it:
 
@@ -4466,6 +4475,23 @@ Program exited normally.
 (@value{GDBP})
 @end smallexample
 
+Here is an example of catching a syscall group:
+
+@smallexample
+(@value{GDBP}) catch syscall group:process
+Catchpoint 1 (syscalls 'exit' [1] 'fork' [2] 'waitpid' [7]
+'execve' [11] 'wait4' [114] 'clone' [120] 'vfork' [190]
+'exit_group' [252] 'waitid' [284] 'unshare' [310])
+(@value{GDBP}) r
+Starting program: /tmp/catch-syscall
+
+Catchpoint 1 (call to syscall fork), 0x00007ffff7df4e27 in open64 ()
+   from /lib64/ld-linux-x86-64.so.2
+
+(@value{GDBP}) c
+Continuing.
+@end smallexample
+
 However, there can be situations when there is no corresponding name
 in XML file for that syscall number.  In this case, @value{GDBN} prints
 a warning message saying that it was not able to find the syscall name,
diff --git a/gdb/syscalls/aarch64-linux.xml b/gdb/syscalls/aarch64-linux.xml
index e1fa0da..aa83a0b 100644
--- a/gdb/syscalls/aarch64-linux.xml
+++ b/gdb/syscalls/aarch64-linux.xml
@@ -1,112 +1,110 @@
 <?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
 <!-- Copyright (C) 2015-2016 Free Software Foundation, Inc.
 
      Copying and distribution of this file, with or without modification,
      are permitted in any medium without royalty provided the copyright
      notice and this notice are preserved.  This file is offered as-is,
      without any warranty. -->
-
-<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
-
 <syscalls_info>
   <syscall name="io_setup" number="0"/>
   <syscall name="io_destroy" number="1"/>
   <syscall name="io_submit" number="2"/>
   <syscall name="io_cancel" number="3"/>
   <syscall name="io_getevents" number="4"/>
-  <syscall name="setxattr" number="5"/>
-  <syscall name="lsetxattr" number="6"/>
-  <syscall name="fsetxattr" number="7"/>
-  <syscall name="getxattr" number="8"/>
-  <syscall name="lgetxattr" number="9"/>
-  <syscall name="fgetxattr" number="10"/>
-  <syscall name="listxattr" number="11"/>
-  <syscall name="llistxattr" number="12"/>
-  <syscall name="flistxattr" number="13"/>
-  <syscall name="removexattr" number="14"/>
-  <syscall name="lremovexattr" number="15"/>
-  <syscall name="fremovexattr" number="16"/>
-  <syscall name="getcwd" number="17"/>
+  <syscall name="setxattr" number="5" groups="file"/>
+  <syscall name="lsetxattr" number="6" groups="file"/>
+  <syscall name="fsetxattr" number="7" groups="descriptor"/>
+  <syscall name="getxattr" number="8" groups="file"/>
+  <syscall name="lgetxattr" number="9" groups="file"/>
+  <syscall name="fgetxattr" number="10" groups="descriptor"/>
+  <syscall name="listxattr" number="11" groups="file"/>
+  <syscall name="llistxattr" number="12" groups="file"/>
+  <syscall name="flistxattr" number="13" groups="descriptor"/>
+  <syscall name="removexattr" number="14" groups="file"/>
+  <syscall name="lremovexattr" number="15" groups="file"/>
+  <syscall name="fremovexattr" number="16" groups="descriptor"/>
+  <syscall name="getcwd" number="17" groups="file"/>
   <syscall name="lookup_dcookie" number="18"/>
-  <syscall name="eventfd2" number="19"/>
-  <syscall name="epoll_create1" number="20"/>
-  <syscall name="epoll_ctl" number="21"/>
-  <syscall name="epoll_pwait" number="22"/>
-  <syscall name="dup" number="23"/>
-  <syscall name="dup3" number="24"/>
-  <syscall name="fcntl" number="25"/>
-  <syscall name="inotify_init1" number="26"/>
-  <syscall name="inotify_add_watch" number="27"/>
-  <syscall name="inotify_rm_watch" number="28"/>
-  <syscall name="ioctl" number="29"/>
+  <syscall name="eventfd2" number="19" groups="descriptor"/>
+  <syscall name="epoll_create1" number="20" groups="descriptor"/>
+  <syscall name="epoll_ctl" number="21" groups="descriptor"/>
+  <syscall name="epoll_pwait" number="22" groups="descriptor"/>
+  <syscall name="dup" number="23" groups="descriptor"/>
+  <syscall name="dup3" number="24" groups="descriptor"/>
+  <syscall name="fcntl" number="25" groups="descriptor"/>
+  <syscall name="inotify_init1" number="26" groups="descriptor"/>
+  <syscall name="inotify_add_watch" number="27" groups="descriptor"/>
+  <syscall name="inotify_rm_watch" number="28" groups="descriptor"/>
+  <syscall name="ioctl" number="29" groups="descriptor"/>
   <syscall name="ioprio_set" number="30"/>
   <syscall name="ioprio_get" number="31"/>
-  <syscall name="flock" number="32"/>
-  <syscall name="mknodat" number="33"/>
-  <syscall name="mkdirat" number="34"/>
-  <syscall name="unlinkat" number="35"/>
-  <syscall name="symlinkat" number="36"/>
-  <syscall name="linkat" number="37"/>
-  <syscall name="renameat" number="38"/>
-  <syscall name="umount2" number="39"/>
-  <syscall name="mount" number="40"/>
-  <syscall name="pivot_root" number="41"/>
+  <syscall name="flock" number="32" groups="descriptor"/>
+  <syscall name="mknodat" number="33" groups="descriptor,file"/>
+  <syscall name="mkdirat" number="34" groups="descriptor,file"/>
+  <syscall name="unlinkat" number="35" groups="descriptor,file"/>
+  <syscall name="symlinkat" number="36" groups="descriptor,file"/>
+  <syscall name="linkat" number="37" groups="descriptor,file"/>
+  <syscall name="renameat" number="38" groups="descriptor,file"/>
+  <syscall name="umount2" number="39" groups="file"/>
+  <syscall name="mount" number="40" groups="file"/>
+  <syscall name="pivot_root" number="41" groups="file"/>
   <syscall name="nfsservctl" number="42"/>
-  <syscall name="statfs" number="43"/>
-  <syscall name="fstatfs" number="44"/>
-  <syscall name="truncate" number="45"/>
-  <syscall name="ftruncate" number="46"/>
-  <syscall name="fallocate" number="47"/>
-  <syscall name="faccessat" number="48"/>
-  <syscall name="chdir" number="49"/>
-  <syscall name="fchdir" number="50"/>
-  <syscall name="chroot" number="51"/>
-  <syscall name="fchmod" number="52"/>
-  <syscall name="fchmodat" number="53"/>
-  <syscall name="fchownat" number="54"/>
-  <syscall name="fchown" number="55"/>
-  <syscall name="openat" number="56"/>
-  <syscall name="close" number="57"/>
+  <syscall name="statfs" number="43" groups="file"/>
+  <syscall name="fstatfs" number="44" groups="descriptor"/>
+  <syscall name="truncate" number="45" groups="file"/>
+  <syscall name="ftruncate" number="46" groups="descriptor"/>
+  <syscall name="fallocate" number="47" groups="descriptor"/>
+  <syscall name="faccessat" number="48" groups="descriptor,file"/>
+  <syscall name="chdir" number="49" groups="file"/>
+  <syscall name="fchdir" number="50" groups="descriptor"/>
+  <syscall name="chroot" number="51" groups="file"/>
+  <syscall name="fchmod" number="52" groups="descriptor"/>
+  <syscall name="fchmodat" number="53" groups="descriptor,file"/>
+  <syscall name="fchownat" number="54" groups="descriptor,file"/>
+  <syscall name="fchown" number="55" groups="descriptor"/>
+  <syscall name="openat" number="56" groups="descriptor,file"/>
+  <syscall name="close" number="57" groups="descriptor"/>
   <syscall name="vhangup" number="58"/>
-  <syscall name="pipe2" number="59"/>
-  <syscall name="quotactl" number="60"/>
-  <syscall name="getdents64" number="61"/>
-  <syscall name="lseek" number="62"/>
-  <syscall name="read" number="63"/>
-  <syscall name="write" number="64"/>
-  <syscall name="readv" number="65"/>
-  <syscall name="writev" number="66"/>
-  <syscall name="pread64" number="67"/>
-  <syscall name="pwrite64" number="68"/>
-  <syscall name="preadv" number="69"/>
-  <syscall name="pwritev" number="70"/>
-  <syscall name="sendfile" number="71"/>
-  <syscall name="pselect6" number="72"/>
-  <syscall name="ppoll" number="73"/>
-  <syscall name="signalfd4" number="74"/>
-  <syscall name="vmsplice" number="75"/>
-  <syscall name="splice" number="76"/>
-  <syscall name="tee" number="77"/>
-  <syscall name="readlinkat" number="78"/>
-  <syscall name="newfstatat" number="79"/>
-  <syscall name="fstat" number="80"/>
+  <syscall name="pipe2" number="59" groups="descriptor"/>
+  <syscall name="quotactl" number="60" groups="file"/>
+  <syscall name="getdents64" number="61" groups="descriptor"/>
+  <syscall name="lseek" number="62" groups="descriptor"/>
+  <syscall name="read" number="63" groups="descriptor"/>
+  <syscall name="write" number="64" groups="descriptor"/>
+  <syscall name="readv" number="65" groups="descriptor"/>
+  <syscall name="writev" number="66" groups="descriptor"/>
+  <syscall name="pread64" number="67" groups="descriptor"/>
+  <syscall name="pwrite64" number="68" groups="descriptor"/>
+  <syscall name="preadv" number="69" groups="descriptor"/>
+  <syscall name="pwritev" number="70" groups="descriptor"/>
+  <syscall name="sendfile" number="71" groups="descriptor,network"/>
+  <syscall name="pselect6" number="72" groups="descriptor"/>
+  <syscall name="ppoll" number="73" groups="descriptor"/>
+  <syscall name="signalfd4" number="74" groups="descriptor,signal"/>
+  <syscall name="vmsplice" number="75" groups="descriptor"/>
+  <syscall name="splice" number="76" groups="descriptor"/>
+  <syscall name="tee" number="77" groups="descriptor"/>
+  <syscall name="readlinkat" number="78" groups="descriptor,file"/>
+  <syscall name="newfstatat" number="79" groups="descriptor,file"/>
+  <syscall name="fstat" number="80" groups="descriptor"/>
   <syscall name="sync" number="81"/>
-  <syscall name="fsync" number="82"/>
-  <syscall name="fdatasync" number="83"/>
-  <syscall name="sync_file_range" number="84"/>
-  <syscall name="timerfd_create" number="85"/>
-  <syscall name="timerfd_settime" number="86"/>
-  <syscall name="timerfd_gettime" number="87"/>
-  <syscall name="utimensat" number="88"/>
-  <syscall name="acct" number="89"/>
+  <syscall name="fsync" number="82" groups="descriptor"/>
+  <syscall name="fdatasync" number="83" groups="descriptor"/>
+  <syscall name="sync_file_range" number="84" groups="descriptor"/>
+  <syscall name="timerfd_create" number="85" groups="descriptor"/>
+  <syscall name="timerfd_settime" number="86" groups="descriptor"/>
+  <syscall name="timerfd_gettime" number="87" groups="descriptor"/>
+  <syscall name="utimensat" number="88" groups="descriptor,file"/>
+  <syscall name="acct" number="89" groups="file"/>
   <syscall name="capget" number="90"/>
   <syscall name="capset" number="91"/>
   <syscall name="personality" number="92"/>
-  <syscall name="exit" number="93"/>
-  <syscall name="exit_group" number="94"/>
-  <syscall name="waitid" number="95"/>
+  <syscall name="exit" number="93" groups="process"/>
+  <syscall name="exit_group" number="94" groups="process"/>
+  <syscall name="waitid" number="95" groups="process"/>
   <syscall name="set_tid_address" number="96"/>
-  <syscall name="unshare" number="97"/>
+  <syscall name="unshare" number="97" groups="process"/>
   <syscall name="futex" number="98"/>
   <syscall name="set_robust_list" number="99"/>
   <syscall name="get_robust_list" number="100"/>
@@ -138,17 +136,17 @@
   <syscall name="sched_get_priority_min" number="126"/>
   <syscall name="sched_rr_get_interval" number="127"/>
   <syscall name="restart_syscall" number="128"/>
-  <syscall name="kill" number="129"/>
-  <syscall name="tkill" number="130"/>
-  <syscall name="tgkill" number="131"/>
-  <syscall name="sigaltstack" number="132"/>
-  <syscall name="rt_sigsuspend" number="133"/>
-  <syscall name="rt_sigaction" number="134"/>
-  <syscall name="rt_sigprocmask" number="135"/>
-  <syscall name="rt_sigpending" number="136"/>
-  <syscall name="rt_sigtimedwait" number="137"/>
-  <syscall name="rt_sigqueueinfo" number="138"/>
-  <syscall name="rt_sigreturn" number="139"/>
+  <syscall name="kill" number="129" groups="signal"/>
+  <syscall name="tkill" number="130" groups="signal"/>
+  <syscall name="tgkill" number="131" groups="signal"/>
+  <syscall name="sigaltstack" number="132" groups="signal"/>
+  <syscall name="rt_sigsuspend" number="133" groups="signal"/>
+  <syscall name="rt_sigaction" number="134" groups="signal"/>
+  <syscall name="rt_sigprocmask" number="135" groups="signal"/>
+  <syscall name="rt_sigpending" number="136" groups="signal"/>
+  <syscall name="rt_sigtimedwait" number="137" groups="signal"/>
+  <syscall name="rt_sigqueueinfo" number="138" groups="signal"/>
+  <syscall name="rt_sigreturn" number="139" groups="signal"/>
   <syscall name="setpriority" number="140"/>
   <syscall name="getpriority" number="141"/>
   <syscall name="reboot" number="142"/>
@@ -195,75 +193,75 @@
   <syscall name="mq_timedreceive" number="183"/>
   <syscall name="mq_notify" number="184"/>
   <syscall name="mq_getsetattr" number="185"/>
-  <syscall name="msgget" number="186"/>
-  <syscall name="msgctl" number="187"/>
-  <syscall name="msgrcv" number="188"/>
-  <syscall name="msgsnd" number="189"/>
-  <syscall name="semget" number="190"/>
-  <syscall name="semctl" number="191"/>
-  <syscall name="semtimedop" number="192"/>
-  <syscall name="semop" number="193"/>
-  <syscall name="shmget" number="194"/>
-  <syscall name="shmctl" number="195"/>
-  <syscall name="shmat" number="196"/>
-  <syscall name="shmdt" number="197"/>
-  <syscall name="socket" number="198"/>
-  <syscall name="socketpair" number="199"/>
-  <syscall name="bind" number="200"/>
-  <syscall name="listen" number="201"/>
-  <syscall name="accept" number="202"/>
-  <syscall name="connect" number="203"/>
-  <syscall name="getsockname" number="204"/>
-  <syscall name="getpeername" number="205"/>
-  <syscall name="sendto" number="206"/>
-  <syscall name="recvfrom" number="207"/>
-  <syscall name="setsockopt" number="208"/>
-  <syscall name="getsockopt" number="209"/>
-  <syscall name="shutdown" number="210"/>
-  <syscall name="sendmsg" number="211"/>
-  <syscall name="recvmsg" number="212"/>
-  <syscall name="readahead" number="213"/>
-  <syscall name="brk" number="214"/>
-  <syscall name="munmap" number="215"/>
-  <syscall name="mremap" number="216"/>
+  <syscall name="msgget" number="186" groups="ipc"/>
+  <syscall name="msgctl" number="187" groups="ipc"/>
+  <syscall name="msgrcv" number="188" groups="ipc"/>
+  <syscall name="msgsnd" number="189" groups="ipc"/>
+  <syscall name="semget" number="190" groups="ipc"/>
+  <syscall name="semctl" number="191" groups="ipc"/>
+  <syscall name="semtimedop" number="192" groups="ipc"/>
+  <syscall name="semop" number="193" groups="ipc"/>
+  <syscall name="shmget" number="194" groups="ipc"/>
+  <syscall name="shmctl" number="195" groups="ipc"/>
+  <syscall name="shmat" number="196" groups="ipc,memory"/>
+  <syscall name="shmdt" number="197" groups="ipc,memory"/>
+  <syscall name="socket" number="198" groups="network"/>
+  <syscall name="socketpair" number="199" groups="network"/>
+  <syscall name="bind" number="200" groups="network"/>
+  <syscall name="listen" number="201" groups="network"/>
+  <syscall name="accept" number="202" groups="network"/>
+  <syscall name="connect" number="203" groups="network"/>
+  <syscall name="getsockname" number="204" groups="network"/>
+  <syscall name="getpeername" number="205" groups="network"/>
+  <syscall name="sendto" number="206" groups="network"/>
+  <syscall name="recvfrom" number="207" groups="network"/>
+  <syscall name="setsockopt" number="208" groups="network"/>
+  <syscall name="getsockopt" number="209" groups="network"/>
+  <syscall name="shutdown" number="210" groups="network"/>
+  <syscall name="sendmsg" number="211" groups="network"/>
+  <syscall name="recvmsg" number="212" groups="network"/>
+  <syscall name="readahead" number="213" groups="descriptor"/>
+  <syscall name="brk" number="214" groups="memory"/>
+  <syscall name="munmap" number="215" groups="memory"/>
+  <syscall name="mremap" number="216" groups="memory"/>
   <syscall name="add_key" number="217"/>
   <syscall name="request_key" number="218"/>
   <syscall name="keyctl" number="219"/>
-  <syscall name="clone" number="220"/>
-  <syscall name="execve" number="221"/>
-  <syscall name="mmap" number="222"/>
-  <syscall name="fadvise64" number="223"/>
-  <syscall name="swapon" number="224"/>
-  <syscall name="swapoff" number="225"/>
-  <syscall name="mprotect" number="226"/>
-  <syscall name="msync" number="227"/>
-  <syscall name="mlock" number="228"/>
-  <syscall name="munlock" number="229"/>
-  <syscall name="mlockall" number="230"/>
-  <syscall name="munlockall" number="231"/>
-  <syscall name="mincore" number="232"/>
-  <syscall name="madvise" number="233"/>
-  <syscall name="remap_file_pages" number="234"/>
-  <syscall name="mbind" number="235"/>
-  <syscall name="get_mempolicy" number="236"/>
-  <syscall name="set_mempolicy" number="237"/>
-  <syscall name="migrate_pages" number="238"/>
-  <syscall name="move_pages" number="239"/>
-  <syscall name="rt_tgsigqueueinfo" number="240"/>
-  <syscall name="perf_event_open" number="241"/>
-  <syscall name="accept4" number="242"/>
-  <syscall name="recvmmsg" number="243"/>
+  <syscall name="clone" number="220" groups="process"/>
+  <syscall name="execve" number="221" groups="file,process"/>
+  <syscall name="mmap" number="222" groups="descriptor,memory"/>
+  <syscall name="fadvise64" number="223" groups="descriptor"/>
+  <syscall name="swapon" number="224" groups="file"/>
+  <syscall name="swapoff" number="225" groups="file"/>
+  <syscall name="mprotect" number="226" groups="memory"/>
+  <syscall name="msync" number="227" groups="memory"/>
+  <syscall name="mlock" number="228" groups="memory"/>
+  <syscall name="munlock" number="229" groups="memory"/>
+  <syscall name="mlockall" number="230" groups="memory"/>
+  <syscall name="munlockall" number="231" groups="memory"/>
+  <syscall name="mincore" number="232" groups="memory"/>
+  <syscall name="madvise" number="233" groups="memory"/>
+  <syscall name="remap_file_pages" number="234" groups="memory"/>
+  <syscall name="mbind" number="235" groups="memory"/>
+  <syscall name="get_mempolicy" number="236" groups="memory"/>
+  <syscall name="set_mempolicy" number="237" groups="memory"/>
+  <syscall name="migrate_pages" number="238" groups="memory"/>
+  <syscall name="move_pages" number="239" groups="memory"/>
+  <syscall name="rt_tgsigqueueinfo" number="240" groups="process,signal"/>
+  <syscall name="perf_event_open" number="241" groups="descriptor"/>
+  <syscall name="accept4" number="242" groups="network"/>
+  <syscall name="recvmmsg" number="243" groups="network"/>
   <syscall name="arch_specific_syscall" number="244"/>
-  <syscall name="wait4" number="260"/>
+  <syscall name="wait4" number="260" groups="process"/>
   <syscall name="prlimit64" number="261"/>
-  <syscall name="fanotify_init" number="262"/>
-  <syscall name="fanotify_mark" number="263"/>
-  <syscall name="name_to_handle_at" number="264"/>
-  <syscall name="open_by_handle_at" number="265"/>
+  <syscall name="fanotify_init" number="262" groups="descriptor"/>
+  <syscall name="fanotify_mark" number="263" groups="descriptor,file"/>
+  <syscall name="name_to_handle_at" number="264" groups="descriptor,file"/>
+  <syscall name="open_by_handle_at" number="265" groups="descriptor"/>
   <syscall name="clock_adjtime" number="266"/>
-  <syscall name="syncfs" number="267"/>
-  <syscall name="setns" number="268"/>
-  <syscall name="sendmmsg" number="269"/>
+  <syscall name="syncfs" number="267" groups="descriptor"/>
+  <syscall name="setns" number="268" groups="descriptor"/>
+  <syscall name="sendmmsg" number="269" groups="network"/>
   <syscall name="process_vm_readv" number="270"/>
   <syscall name="process_vm_writev" number="271"/>
   <syscall name="kcmp" number="272"/>
diff --git a/gdb/syscalls/aarch64-linux.xml.in b/gdb/syscalls/aarch64-linux.xml.in
new file mode 100644
index 0000000..e1fa0da
--- /dev/null
+++ b/gdb/syscalls/aarch64-linux.xml.in
@@ -0,0 +1,271 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2015-2016 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  This file is offered as-is,
+     without any warranty. -->
+
+<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
+
+<syscalls_info>
+  <syscall name="io_setup" number="0"/>
+  <syscall name="io_destroy" number="1"/>
+  <syscall name="io_submit" number="2"/>
+  <syscall name="io_cancel" number="3"/>
+  <syscall name="io_getevents" number="4"/>
+  <syscall name="setxattr" number="5"/>
+  <syscall name="lsetxattr" number="6"/>
+  <syscall name="fsetxattr" number="7"/>
+  <syscall name="getxattr" number="8"/>
+  <syscall name="lgetxattr" number="9"/>
+  <syscall name="fgetxattr" number="10"/>
+  <syscall name="listxattr" number="11"/>
+  <syscall name="llistxattr" number="12"/>
+  <syscall name="flistxattr" number="13"/>
+  <syscall name="removexattr" number="14"/>
+  <syscall name="lremovexattr" number="15"/>
+  <syscall name="fremovexattr" number="16"/>
+  <syscall name="getcwd" number="17"/>
+  <syscall name="lookup_dcookie" number="18"/>
+  <syscall name="eventfd2" number="19"/>
+  <syscall name="epoll_create1" number="20"/>
+  <syscall name="epoll_ctl" number="21"/>
+  <syscall name="epoll_pwait" number="22"/>
+  <syscall name="dup" number="23"/>
+  <syscall name="dup3" number="24"/>
+  <syscall name="fcntl" number="25"/>
+  <syscall name="inotify_init1" number="26"/>
+  <syscall name="inotify_add_watch" number="27"/>
+  <syscall name="inotify_rm_watch" number="28"/>
+  <syscall name="ioctl" number="29"/>
+  <syscall name="ioprio_set" number="30"/>
+  <syscall name="ioprio_get" number="31"/>
+  <syscall name="flock" number="32"/>
+  <syscall name="mknodat" number="33"/>
+  <syscall name="mkdirat" number="34"/>
+  <syscall name="unlinkat" number="35"/>
+  <syscall name="symlinkat" number="36"/>
+  <syscall name="linkat" number="37"/>
+  <syscall name="renameat" number="38"/>
+  <syscall name="umount2" number="39"/>
+  <syscall name="mount" number="40"/>
+  <syscall name="pivot_root" number="41"/>
+  <syscall name="nfsservctl" number="42"/>
+  <syscall name="statfs" number="43"/>
+  <syscall name="fstatfs" number="44"/>
+  <syscall name="truncate" number="45"/>
+  <syscall name="ftruncate" number="46"/>
+  <syscall name="fallocate" number="47"/>
+  <syscall name="faccessat" number="48"/>
+  <syscall name="chdir" number="49"/>
+  <syscall name="fchdir" number="50"/>
+  <syscall name="chroot" number="51"/>
+  <syscall name="fchmod" number="52"/>
+  <syscall name="fchmodat" number="53"/>
+  <syscall name="fchownat" number="54"/>
+  <syscall name="fchown" number="55"/>
+  <syscall name="openat" number="56"/>
+  <syscall name="close" number="57"/>
+  <syscall name="vhangup" number="58"/>
+  <syscall name="pipe2" number="59"/>
+  <syscall name="quotactl" number="60"/>
+  <syscall name="getdents64" number="61"/>
+  <syscall name="lseek" number="62"/>
+  <syscall name="read" number="63"/>
+  <syscall name="write" number="64"/>
+  <syscall name="readv" number="65"/>
+  <syscall name="writev" number="66"/>
+  <syscall name="pread64" number="67"/>
+  <syscall name="pwrite64" number="68"/>
+  <syscall name="preadv" number="69"/>
+  <syscall name="pwritev" number="70"/>
+  <syscall name="sendfile" number="71"/>
+  <syscall name="pselect6" number="72"/>
+  <syscall name="ppoll" number="73"/>
+  <syscall name="signalfd4" number="74"/>
+  <syscall name="vmsplice" number="75"/>
+  <syscall name="splice" number="76"/>
+  <syscall name="tee" number="77"/>
+  <syscall name="readlinkat" number="78"/>
+  <syscall name="newfstatat" number="79"/>
+  <syscall name="fstat" number="80"/>
+  <syscall name="sync" number="81"/>
+  <syscall name="fsync" number="82"/>
+  <syscall name="fdatasync" number="83"/>
+  <syscall name="sync_file_range" number="84"/>
+  <syscall name="timerfd_create" number="85"/>
+  <syscall name="timerfd_settime" number="86"/>
+  <syscall name="timerfd_gettime" number="87"/>
+  <syscall name="utimensat" number="88"/>
+  <syscall name="acct" number="89"/>
+  <syscall name="capget" number="90"/>
+  <syscall name="capset" number="91"/>
+  <syscall name="personality" number="92"/>
+  <syscall name="exit" number="93"/>
+  <syscall name="exit_group" number="94"/>
+  <syscall name="waitid" number="95"/>
+  <syscall name="set_tid_address" number="96"/>
+  <syscall name="unshare" number="97"/>
+  <syscall name="futex" number="98"/>
+  <syscall name="set_robust_list" number="99"/>
+  <syscall name="get_robust_list" number="100"/>
+  <syscall name="nanosleep" number="101"/>
+  <syscall name="getitimer" number="102"/>
+  <syscall name="setitimer" number="103"/>
+  <syscall name="kexec_load" number="104"/>
+  <syscall name="init_module" number="105"/>
+  <syscall name="delete_module" number="106"/>
+  <syscall name="timer_create" number="107"/>
+  <syscall name="timer_gettime" number="108"/>
+  <syscall name="timer_getoverrun" number="109"/>
+  <syscall name="timer_settime" number="110"/>
+  <syscall name="timer_delete" number="111"/>
+  <syscall name="clock_settime" number="112"/>
+  <syscall name="clock_gettime" number="113"/>
+  <syscall name="clock_getres" number="114"/>
+  <syscall name="clock_nanosleep" number="115"/>
+  <syscall name="syslog" number="116"/>
+  <syscall name="ptrace" number="117"/>
+  <syscall name="sched_setparam" number="118"/>
+  <syscall name="sched_setscheduler" number="119"/>
+  <syscall name="sched_getscheduler" number="120"/>
+  <syscall name="sched_getparam" number="121"/>
+  <syscall name="sched_setaffinity" number="122"/>
+  <syscall name="sched_getaffinity" number="123"/>
+  <syscall name="sched_yield" number="124"/>
+  <syscall name="sched_get_priority_max" number="125"/>
+  <syscall name="sched_get_priority_min" number="126"/>
+  <syscall name="sched_rr_get_interval" number="127"/>
+  <syscall name="restart_syscall" number="128"/>
+  <syscall name="kill" number="129"/>
+  <syscall name="tkill" number="130"/>
+  <syscall name="tgkill" number="131"/>
+  <syscall name="sigaltstack" number="132"/>
+  <syscall name="rt_sigsuspend" number="133"/>
+  <syscall name="rt_sigaction" number="134"/>
+  <syscall name="rt_sigprocmask" number="135"/>
+  <syscall name="rt_sigpending" number="136"/>
+  <syscall name="rt_sigtimedwait" number="137"/>
+  <syscall name="rt_sigqueueinfo" number="138"/>
+  <syscall name="rt_sigreturn" number="139"/>
+  <syscall name="setpriority" number="140"/>
+  <syscall name="getpriority" number="141"/>
+  <syscall name="reboot" number="142"/>
+  <syscall name="setregid" number="143"/>
+  <syscall name="setgid" number="144"/>
+  <syscall name="setreuid" number="145"/>
+  <syscall name="setuid" number="146"/>
+  <syscall name="setresuid" number="147"/>
+  <syscall name="getresuid" number="148"/>
+  <syscall name="setresgid" number="149"/>
+  <syscall name="getresgid" number="150"/>
+  <syscall name="setfsuid" number="151"/>
+  <syscall name="setfsgid" number="152"/>
+  <syscall name="times" number="153"/>
+  <syscall name="setpgid" number="154"/>
+  <syscall name="getpgid" number="155"/>
+  <syscall name="getsid" number="156"/>
+  <syscall name="setsid" number="157"/>
+  <syscall name="getgroups" number="158"/>
+  <syscall name="setgroups" number="159"/>
+  <syscall name="uname" number="160"/>
+  <syscall name="sethostname" number="161"/>
+  <syscall name="setdomainname" number="162"/>
+  <syscall name="getrlimit" number="163"/>
+  <syscall name="setrlimit" number="164"/>
+  <syscall name="getrusage" number="165"/>
+  <syscall name="umask" number="166"/>
+  <syscall name="prctl" number="167"/>
+  <syscall name="getcpu" number="168"/>
+  <syscall name="gettimeofday" number="169"/>
+  <syscall name="settimeofday" number="170"/>
+  <syscall name="adjtimex" number="171"/>
+  <syscall name="getpid" number="172"/>
+  <syscall name="getppid" number="173"/>
+  <syscall name="getuid" number="174"/>
+  <syscall name="geteuid" number="175"/>
+  <syscall name="getgid" number="176"/>
+  <syscall name="getegid" number="177"/>
+  <syscall name="gettid" number="178"/>
+  <syscall name="sysinfo" number="179"/>
+  <syscall name="mq_open" number="180"/>
+  <syscall name="mq_unlink" number="181"/>
+  <syscall name="mq_timedsend" number="182"/>
+  <syscall name="mq_timedreceive" number="183"/>
+  <syscall name="mq_notify" number="184"/>
+  <syscall name="mq_getsetattr" number="185"/>
+  <syscall name="msgget" number="186"/>
+  <syscall name="msgctl" number="187"/>
+  <syscall name="msgrcv" number="188"/>
+  <syscall name="msgsnd" number="189"/>
+  <syscall name="semget" number="190"/>
+  <syscall name="semctl" number="191"/>
+  <syscall name="semtimedop" number="192"/>
+  <syscall name="semop" number="193"/>
+  <syscall name="shmget" number="194"/>
+  <syscall name="shmctl" number="195"/>
+  <syscall name="shmat" number="196"/>
+  <syscall name="shmdt" number="197"/>
+  <syscall name="socket" number="198"/>
+  <syscall name="socketpair" number="199"/>
+  <syscall name="bind" number="200"/>
+  <syscall name="listen" number="201"/>
+  <syscall name="accept" number="202"/>
+  <syscall name="connect" number="203"/>
+  <syscall name="getsockname" number="204"/>
+  <syscall name="getpeername" number="205"/>
+  <syscall name="sendto" number="206"/>
+  <syscall name="recvfrom" number="207"/>
+  <syscall name="setsockopt" number="208"/>
+  <syscall name="getsockopt" number="209"/>
+  <syscall name="shutdown" number="210"/>
+  <syscall name="sendmsg" number="211"/>
+  <syscall name="recvmsg" number="212"/>
+  <syscall name="readahead" number="213"/>
+  <syscall name="brk" number="214"/>
+  <syscall name="munmap" number="215"/>
+  <syscall name="mremap" number="216"/>
+  <syscall name="add_key" number="217"/>
+  <syscall name="request_key" number="218"/>
+  <syscall name="keyctl" number="219"/>
+  <syscall name="clone" number="220"/>
+  <syscall name="execve" number="221"/>
+  <syscall name="mmap" number="222"/>
+  <syscall name="fadvise64" number="223"/>
+  <syscall name="swapon" number="224"/>
+  <syscall name="swapoff" number="225"/>
+  <syscall name="mprotect" number="226"/>
+  <syscall name="msync" number="227"/>
+  <syscall name="mlock" number="228"/>
+  <syscall name="munlock" number="229"/>
+  <syscall name="mlockall" number="230"/>
+  <syscall name="munlockall" number="231"/>
+  <syscall name="mincore" number="232"/>
+  <syscall name="madvise" number="233"/>
+  <syscall name="remap_file_pages" number="234"/>
+  <syscall name="mbind" number="235"/>
+  <syscall name="get_mempolicy" number="236"/>
+  <syscall name="set_mempolicy" number="237"/>
+  <syscall name="migrate_pages" number="238"/>
+  <syscall name="move_pages" number="239"/>
+  <syscall name="rt_tgsigqueueinfo" number="240"/>
+  <syscall name="perf_event_open" number="241"/>
+  <syscall name="accept4" number="242"/>
+  <syscall name="recvmmsg" number="243"/>
+  <syscall name="arch_specific_syscall" number="244"/>
+  <syscall name="wait4" number="260"/>
+  <syscall name="prlimit64" number="261"/>
+  <syscall name="fanotify_init" number="262"/>
+  <syscall name="fanotify_mark" number="263"/>
+  <syscall name="name_to_handle_at" number="264"/>
+  <syscall name="open_by_handle_at" number="265"/>
+  <syscall name="clock_adjtime" number="266"/>
+  <syscall name="syncfs" number="267"/>
+  <syscall name="setns" number="268"/>
+  <syscall name="sendmmsg" number="269"/>
+  <syscall name="process_vm_readv" number="270"/>
+  <syscall name="process_vm_writev" number="271"/>
+  <syscall name="kcmp" number="272"/>
+  <syscall name="syscalls" number="273"/>
+</syscalls_info>
diff --git a/gdb/syscalls/amd64-linux.xml b/gdb/syscalls/amd64-linux.xml
index 074b5870e..9778258 100644
--- a/gdb/syscalls/amd64-linux.xml
+++ b/gdb/syscalls/amd64-linux.xml
@@ -1,114 +1,111 @@
 <?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
 <!-- Copyright (C) 2009-2016 Free Software Foundation, Inc.
 
      Copying and distribution of this file, with or without modification,
      are permitted in any medium without royalty provided the copyright
      notice and this notice are preserved.  -->
-
-<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
-
 <!-- This file was generated using the following file:
      
      /usr/src/linux/arch/x86/include/asm/unistd_64.h
 
      The file mentioned above belongs to the Linux Kernel.  -->
-
 <syscalls_info>
-  <syscall name="read" number="0"/>
-  <syscall name="write" number="1"/>
-  <syscall name="open" number="2"/>
-  <syscall name="close" number="3"/>
-  <syscall name="stat" number="4"/>
-  <syscall name="fstat" number="5"/>
-  <syscall name="lstat" number="6"/>
-  <syscall name="poll" number="7"/>
-  <syscall name="lseek" number="8"/>
-  <syscall name="mmap" number="9"/>
-  <syscall name="mprotect" number="10"/>
-  <syscall name="munmap" number="11"/>
-  <syscall name="brk" number="12"/>
-  <syscall name="rt_sigaction" number="13"/>
-  <syscall name="rt_sigprocmask" number="14"/>
-  <syscall name="rt_sigreturn" number="15"/>
-  <syscall name="ioctl" number="16"/>
-  <syscall name="pread64" number="17"/>
-  <syscall name="pwrite64" number="18"/>
-  <syscall name="readv" number="19"/>
-  <syscall name="writev" number="20"/>
-  <syscall name="access" number="21"/>
-  <syscall name="pipe" number="22"/>
-  <syscall name="select" number="23"/>
+  <syscall name="read" number="0" groups="descriptor"/>
+  <syscall name="write" number="1" groups="descriptor"/>
+  <syscall name="open" number="2" groups="descriptor,file"/>
+  <syscall name="close" number="3" groups="descriptor"/>
+  <syscall name="stat" number="4" groups="file"/>
+  <syscall name="fstat" number="5" groups="descriptor"/>
+  <syscall name="lstat" number="6" groups="file"/>
+  <syscall name="poll" number="7" groups="descriptor"/>
+  <syscall name="lseek" number="8" groups="descriptor"/>
+  <syscall name="mmap" number="9" groups="descriptor,memory"/>
+  <syscall name="mprotect" number="10" groups="memory"/>
+  <syscall name="munmap" number="11" groups="memory"/>
+  <syscall name="brk" number="12" groups="memory"/>
+  <syscall name="rt_sigaction" number="13" groups="signal"/>
+  <syscall name="rt_sigprocmask" number="14" groups="signal"/>
+  <syscall name="rt_sigreturn" number="15" groups="signal"/>
+  <syscall name="ioctl" number="16" groups="descriptor"/>
+  <syscall name="pread64" number="17" groups="descriptor"/>
+  <syscall name="pwrite64" number="18" groups="descriptor"/>
+  <syscall name="readv" number="19" groups="descriptor"/>
+  <syscall name="writev" number="20" groups="descriptor"/>
+  <syscall name="access" number="21" groups="file"/>
+  <syscall name="pipe" number="22" groups="descriptor"/>
+  <syscall name="select" number="23" groups="descriptor"/>
   <syscall name="sched_yield" number="24"/>
-  <syscall name="mremap" number="25"/>
-  <syscall name="msync" number="26"/>
-  <syscall name="mincore" number="27"/>
-  <syscall name="madvise" number="28"/>
-  <syscall name="shmget" number="29"/>
-  <syscall name="shmat" number="30"/>
-  <syscall name="shmctl" number="31"/>
-  <syscall name="dup" number="32"/>
-  <syscall name="dup2" number="33"/>
-  <syscall name="pause" number="34"/>
+  <syscall name="mremap" number="25" groups="memory"/>
+  <syscall name="msync" number="26" groups="memory"/>
+  <syscall name="mincore" number="27" groups="memory"/>
+  <syscall name="madvise" number="28" groups="memory"/>
+  <syscall name="shmget" number="29" groups="ipc"/>
+  <syscall name="shmat" number="30" groups="ipc,memory"/>
+  <syscall name="shmctl" number="31" groups="ipc"/>
+  <syscall name="dup" number="32" groups="descriptor"/>
+  <syscall name="dup2" number="33" groups="descriptor"/>
+  <syscall name="pause" number="34" groups="signal"/>
   <syscall name="nanosleep" number="35"/>
   <syscall name="getitimer" number="36"/>
   <syscall name="alarm" number="37"/>
   <syscall name="setitimer" number="38"/>
   <syscall name="getpid" number="39"/>
-  <syscall name="sendfile" number="40"/>
-  <syscall name="socket" number="41"/>
-  <syscall name="connect" number="42"/>
-  <syscall name="accept" number="43"/>
-  <syscall name="sendto" number="44"/>
-  <syscall name="recvfrom" number="45"/>
-  <syscall name="sendmsg" number="46"/>
-  <syscall name="recvmsg" number="47"/>
-  <syscall name="shutdown" number="48"/>
-  <syscall name="bind" number="49"/>
-  <syscall name="listen" number="50"/>
-  <syscall name="getsockname" number="51"/>
-  <syscall name="getpeername" number="52"/>
-  <syscall name="socketpair" number="53"/>
-  <syscall name="setsockopt" number="54"/>
-  <syscall name="getsockopt" number="55"/>
-  <syscall name="clone" number="56"/>
-  <syscall name="fork" number="57"/>
-  <syscall name="vfork" number="58"/>
-  <syscall name="execve" number="59"/>
-  <syscall name="exit" number="60"/>
-  <syscall name="wait4" number="61"/>
-  <syscall name="kill" number="62"/>
+  <syscall name="sendfile" number="40" groups="descriptor,network"/>
+  <syscall name="socket" number="41" groups="network"/>
+  <syscall name="connect" number="42" groups="network"/>
+  <syscall name="accept" number="43" groups="network"/>
+  <syscall name="sendto" number="44" groups="network"/>
+  <syscall name="recvfrom" number="45" groups="network"/>
+  <syscall name="sendmsg" number="46" groups="network"/>
+  <syscall name="recvmsg" number="47" groups="network"/>
+  <syscall name="shutdown" number="48" groups="network"/>
+  <syscall name="bind" number="49" groups="network"/>
+  <syscall name="listen" number="50" groups="network"/>
+  <syscall name="getsockname" number="51" groups="network"/>
+  <syscall name="getpeername" number="52" groups="network"/>
+  <syscall name="socketpair" number="53" groups="network"/>
+  <syscall name="setsockopt" number="54" groups="network"/>
+  <syscall name="getsockopt" number="55" groups="network"/>
+  <syscall name="clone" number="56" groups="process"/>
+  <syscall name="fork" number="57" groups="process"/>
+  <syscall name="vfork" number="58" groups="process"/>
+  <syscall name="execve" number="59" groups="file,process"/>
+  <syscall name="exit" number="60" groups="process"/>
+  <syscall name="wait4" number="61" groups="process"/>
+  <syscall name="kill" number="62" groups="signal"/>
   <syscall name="uname" number="63"/>
-  <syscall name="semget" number="64"/>
-  <syscall name="semop" number="65"/>
-  <syscall name="semctl" number="66"/>
-  <syscall name="shmdt" number="67"/>
-  <syscall name="msgget" number="68"/>
-  <syscall name="msgsnd" number="69"/>
-  <syscall name="msgrcv" number="70"/>
-  <syscall name="msgctl" number="71"/>
-  <syscall name="fcntl" number="72"/>
-  <syscall name="flock" number="73"/>
-  <syscall name="fsync" number="74"/>
-  <syscall name="fdatasync" number="75"/>
-  <syscall name="truncate" number="76"/>
-  <syscall name="ftruncate" number="77"/>
-  <syscall name="getdents" number="78"/>
-  <syscall name="getcwd" number="79"/>
-  <syscall name="chdir" number="80"/>
-  <syscall name="fchdir" number="81"/>
-  <syscall name="rename" number="82"/>
-  <syscall name="mkdir" number="83"/>
-  <syscall name="rmdir" number="84"/>
-  <syscall name="creat" number="85"/>
-  <syscall name="link" number="86"/>
-  <syscall name="unlink" number="87"/>
-  <syscall name="symlink" number="88"/>
-  <syscall name="readlink" number="89"/>
-  <syscall name="chmod" number="90"/>
-  <syscall name="fchmod" number="91"/>
-  <syscall name="chown" number="92"/>
-  <syscall name="fchown" number="93"/>
-  <syscall name="lchown" number="94"/>
+  <syscall name="semget" number="64" groups="ipc"/>
+  <syscall name="semop" number="65" groups="ipc"/>
+  <syscall name="semctl" number="66" groups="ipc"/>
+  <syscall name="shmdt" number="67" groups="ipc,memory"/>
+  <syscall name="msgget" number="68" groups="ipc"/>
+  <syscall name="msgsnd" number="69" groups="ipc"/>
+  <syscall name="msgrcv" number="70" groups="ipc"/>
+  <syscall name="msgctl" number="71" groups="ipc"/>
+  <syscall name="fcntl" number="72" groups="descriptor"/>
+  <syscall name="flock" number="73" groups="descriptor"/>
+  <syscall name="fsync" number="74" groups="descriptor"/>
+  <syscall name="fdatasync" number="75" groups="descriptor"/>
+  <syscall name="truncate" number="76" groups="file"/>
+  <syscall name="ftruncate" number="77" groups="descriptor"/>
+  <syscall name="getdents" number="78" groups="descriptor"/>
+  <syscall name="getcwd" number="79" groups="file"/>
+  <syscall name="chdir" number="80" groups="file"/>
+  <syscall name="fchdir" number="81" groups="descriptor"/>
+  <syscall name="rename" number="82" groups="file"/>
+  <syscall name="mkdir" number="83" groups="file"/>
+  <syscall name="rmdir" number="84" groups="file"/>
+  <syscall name="creat" number="85" groups="descriptor,file"/>
+  <syscall name="link" number="86" groups="file"/>
+  <syscall name="unlink" number="87" groups="file"/>
+  <syscall name="symlink" number="88" groups="file"/>
+  <syscall name="readlink" number="89" groups="file"/>
+  <syscall name="chmod" number="90" groups="file"/>
+  <syscall name="fchmod" number="91" groups="descriptor"/>
+  <syscall name="chown" number="92" groups="file"/>
+  <syscall name="fchown" number="93" groups="descriptor"/>
+  <syscall name="lchown" number="94" groups="file"/>
   <syscall name="umask" number="95"/>
   <syscall name="gettimeofday" number="96"/>
   <syscall name="getrlimit" number="97"/>
@@ -141,18 +138,18 @@
   <syscall name="getsid" number="124"/>
   <syscall name="capget" number="125"/>
   <syscall name="capset" number="126"/>
-  <syscall name="rt_sigpending" number="127"/>
-  <syscall name="rt_sigtimedwait" number="128"/>
-  <syscall name="rt_sigqueueinfo" number="129"/>
-  <syscall name="rt_sigsuspend" number="130"/>
-  <syscall name="sigaltstack" number="131"/>
-  <syscall name="utime" number="132"/>
-  <syscall name="mknod" number="133"/>
-  <syscall name="uselib" number="134"/>
+  <syscall name="rt_sigpending" number="127" groups="signal"/>
+  <syscall name="rt_sigtimedwait" number="128" groups="signal"/>
+  <syscall name="rt_sigqueueinfo" number="129" groups="signal"/>
+  <syscall name="rt_sigsuspend" number="130" groups="signal"/>
+  <syscall name="sigaltstack" number="131" groups="signal"/>
+  <syscall name="utime" number="132" groups="file"/>
+  <syscall name="mknod" number="133" groups="file"/>
+  <syscall name="uselib" number="134" groups="file"/>
   <syscall name="personality" number="135"/>
   <syscall name="ustat" number="136"/>
-  <syscall name="statfs" number="137"/>
-  <syscall name="fstatfs" number="138"/>
+  <syscall name="statfs" number="137" groups="file"/>
+  <syscall name="fstatfs" number="138" groups="descriptor"/>
   <syscall name="sysfs" number="139"/>
   <syscall name="getpriority" number="140"/>
   <syscall name="setpriority" number="141"/>
@@ -163,26 +160,26 @@
   <syscall name="sched_get_priority_max" number="146"/>
   <syscall name="sched_get_priority_min" number="147"/>
   <syscall name="sched_rr_get_interval" number="148"/>
-  <syscall name="mlock" number="149"/>
-  <syscall name="munlock" number="150"/>
-  <syscall name="mlockall" number="151"/>
-  <syscall name="munlockall" number="152"/>
+  <syscall name="mlock" number="149" groups="memory"/>
+  <syscall name="munlock" number="150" groups="memory"/>
+  <syscall name="mlockall" number="151" groups="memory"/>
+  <syscall name="munlockall" number="152" groups="memory"/>
   <syscall name="vhangup" number="153"/>
   <syscall name="modify_ldt" number="154"/>
-  <syscall name="pivot_root" number="155"/>
+  <syscall name="pivot_root" number="155" groups="file"/>
   <syscall name="_sysctl" number="156"/>
   <syscall name="prctl" number="157"/>
-  <syscall name="arch_prctl" number="158"/>
+  <syscall name="arch_prctl" number="158" groups="process"/>
   <syscall name="adjtimex" number="159"/>
   <syscall name="setrlimit" number="160"/>
-  <syscall name="chroot" number="161"/>
+  <syscall name="chroot" number="161" groups="file"/>
   <syscall name="sync" number="162"/>
-  <syscall name="acct" number="163"/>
+  <syscall name="acct" number="163" groups="file"/>
   <syscall name="settimeofday" number="164"/>
-  <syscall name="mount" number="165"/>
-  <syscall name="umount2" number="166"/>
-  <syscall name="swapon" number="167"/>
-  <syscall name="swapoff" number="168"/>
+  <syscall name="mount" number="165" groups="file"/>
+  <syscall name="umount2" number="166" groups="file"/>
+  <syscall name="swapon" number="167" groups="file"/>
+  <syscall name="swapoff" number="168" groups="file"/>
   <syscall name="reboot" number="169"/>
   <syscall name="sethostname" number="170"/>
   <syscall name="setdomainname" number="171"/>
@@ -193,7 +190,7 @@
   <syscall name="delete_module" number="176"/>
   <syscall name="get_kernel_syms" number="177"/>
   <syscall name="query_module" number="178"/>
-  <syscall name="quotactl" number="179"/>
+  <syscall name="quotactl" number="179" groups="file"/>
   <syscall name="nfsservctl" number="180"/>
   <syscall name="getpmsg" number="181"/>
   <syscall name="putpmsg" number="182"/>
@@ -201,20 +198,20 @@
   <syscall name="tuxcall" number="184"/>
   <syscall name="security" number="185"/>
   <syscall name="gettid" number="186"/>
-  <syscall name="readahead" number="187"/>
-  <syscall name="setxattr" number="188"/>
-  <syscall name="lsetxattr" number="189"/>
-  <syscall name="fsetxattr" number="190"/>
-  <syscall name="getxattr" number="191"/>
-  <syscall name="lgetxattr" number="192"/>
-  <syscall name="fgetxattr" number="193"/>
-  <syscall name="listxattr" number="194"/>
-  <syscall name="llistxattr" number="195"/>
-  <syscall name="flistxattr" number="196"/>
-  <syscall name="removexattr" number="197"/>
-  <syscall name="lremovexattr" number="198"/>
-  <syscall name="fremovexattr" number="199"/>
-  <syscall name="tkill" number="200"/>
+  <syscall name="readahead" number="187" groups="descriptor"/>
+  <syscall name="setxattr" number="188" groups="file"/>
+  <syscall name="lsetxattr" number="189" groups="file"/>
+  <syscall name="fsetxattr" number="190" groups="descriptor"/>
+  <syscall name="getxattr" number="191" groups="file"/>
+  <syscall name="lgetxattr" number="192" groups="file"/>
+  <syscall name="fgetxattr" number="193" groups="descriptor"/>
+  <syscall name="listxattr" number="194" groups="file"/>
+  <syscall name="llistxattr" number="195" groups="file"/>
+  <syscall name="flistxattr" number="196" groups="descriptor"/>
+  <syscall name="removexattr" number="197" groups="file"/>
+  <syscall name="lremovexattr" number="198" groups="file"/>
+  <syscall name="fremovexattr" number="199" groups="descriptor"/>
+  <syscall name="tkill" number="200" groups="signal"/>
   <syscall name="time" number="201"/>
   <syscall name="futex" number="202"/>
   <syscall name="sched_setaffinity" number="203"/>
@@ -227,15 +224,15 @@
   <syscall name="io_cancel" number="210"/>
   <syscall name="get_thread_area" number="211"/>
   <syscall name="lookup_dcookie" number="212"/>
-  <syscall name="epoll_create" number="213"/>
+  <syscall name="epoll_create" number="213" groups="descriptor"/>
   <syscall name="epoll_ctl_old" number="214"/>
   <syscall name="epoll_wait_old" number="215"/>
-  <syscall name="remap_file_pages" number="216"/>
-  <syscall name="getdents64" number="217"/>
+  <syscall name="remap_file_pages" number="216" groups="memory"/>
+  <syscall name="getdents64" number="217" groups="descriptor"/>
   <syscall name="set_tid_address" number="218"/>
   <syscall name="restart_syscall" number="219"/>
-  <syscall name="semtimedop" number="220"/>
-  <syscall name="fadvise64" number="221"/>
+  <syscall name="semtimedop" number="220" groups="ipc"/>
+  <syscall name="fadvise64" number="221" groups="descriptor"/>
   <syscall name="timer_create" number="222"/>
   <syscall name="timer_settime" number="223"/>
   <syscall name="timer_gettime" number="224"/>
@@ -245,15 +242,15 @@
   <syscall name="clock_gettime" number="228"/>
   <syscall name="clock_getres" number="229"/>
   <syscall name="clock_nanosleep" number="230"/>
-  <syscall name="exit_group" number="231"/>
-  <syscall name="epoll_wait" number="232"/>
-  <syscall name="epoll_ctl" number="233"/>
-  <syscall name="tgkill" number="234"/>
-  <syscall name="utimes" number="235"/>
+  <syscall name="exit_group" number="231" groups="process"/>
+  <syscall name="epoll_wait" number="232" groups="descriptor"/>
+  <syscall name="epoll_ctl" number="233" groups="descriptor"/>
+  <syscall name="tgkill" number="234" groups="signal"/>
+  <syscall name="utimes" number="235" groups="file"/>
   <syscall name="vserver" number="236"/>
-  <syscall name="mbind" number="237"/>
-  <syscall name="set_mempolicy" number="238"/>
-  <syscall name="get_mempolicy" number="239"/>
+  <syscall name="mbind" number="237" groups="memory"/>
+  <syscall name="set_mempolicy" number="238" groups="memory"/>
+  <syscall name="get_mempolicy" number="239" groups="memory"/>
   <syscall name="mq_open" number="240"/>
   <syscall name="mq_unlink" number="241"/>
   <syscall name="mq_timedsend" number="242"/>
@@ -261,54 +258,54 @@
   <syscall name="mq_notify" number="244"/>
   <syscall name="mq_getsetattr" number="245"/>
   <syscall name="kexec_load" number="246"/>
-  <syscall name="waitid" number="247"/>
+  <syscall name="waitid" number="247" groups="process"/>
   <syscall name="add_key" number="248"/>
   <syscall name="request_key" number="249"/>
   <syscall name="keyctl" number="250"/>
   <syscall name="ioprio_set" number="251"/>
   <syscall name="ioprio_get" number="252"/>
-  <syscall name="inotify_init" number="253"/>
-  <syscall name="inotify_add_watch" number="254"/>
-  <syscall name="inotify_rm_watch" number="255"/>
-  <syscall name="migrate_pages" number="256"/>
-  <syscall name="openat" number="257"/>
-  <syscall name="mkdirat" number="258"/>
-  <syscall name="mknodat" number="259"/>
-  <syscall name="fchownat" number="260"/>
-  <syscall name="futimesat" number="261"/>
-  <syscall name="newfstatat" number="262"/>
-  <syscall name="unlinkat" number="263"/>
-  <syscall name="renameat" number="264"/>
-  <syscall name="linkat" number="265"/>
-  <syscall name="symlinkat" number="266"/>
-  <syscall name="readlinkat" number="267"/>
-  <syscall name="fchmodat" number="268"/>
-  <syscall name="faccessat" number="269"/>
-  <syscall name="pselect6" number="270"/>
-  <syscall name="ppoll" number="271"/>
-  <syscall name="unshare" number="272"/>
+  <syscall name="inotify_init" number="253" groups="descriptor"/>
+  <syscall name="inotify_add_watch" number="254" groups="descriptor"/>
+  <syscall name="inotify_rm_watch" number="255" groups="descriptor"/>
+  <syscall name="migrate_pages" number="256" groups="memory"/>
+  <syscall name="openat" number="257" groups="descriptor,file"/>
+  <syscall name="mkdirat" number="258" groups="descriptor,file"/>
+  <syscall name="mknodat" number="259" groups="descriptor,file"/>
+  <syscall name="fchownat" number="260" groups="descriptor,file"/>
+  <syscall name="futimesat" number="261" groups="descriptor,file"/>
+  <syscall name="newfstatat" number="262" groups="descriptor,file"/>
+  <syscall name="unlinkat" number="263" groups="descriptor,file"/>
+  <syscall name="renameat" number="264" groups="descriptor,file"/>
+  <syscall name="linkat" number="265" groups="descriptor,file"/>
+  <syscall name="symlinkat" number="266" groups="descriptor,file"/>
+  <syscall name="readlinkat" number="267" groups="descriptor,file"/>
+  <syscall name="fchmodat" number="268" groups="descriptor,file"/>
+  <syscall name="faccessat" number="269" groups="descriptor,file"/>
+  <syscall name="pselect6" number="270" groups="descriptor"/>
+  <syscall name="ppoll" number="271" groups="descriptor"/>
+  <syscall name="unshare" number="272" groups="process"/>
   <syscall name="set_robust_list" number="273"/>
   <syscall name="get_robust_list" number="274"/>
-  <syscall name="splice" number="275"/>
-  <syscall name="tee" number="276"/>
-  <syscall name="sync_file_range" number="277"/>
-  <syscall name="vmsplice" number="278"/>
-  <syscall name="move_pages" number="279"/>
-  <syscall name="utimensat" number="280"/>
-  <syscall name="epoll_pwait" number="281"/>
-  <syscall name="signalfd" number="282"/>
-  <syscall name="timerfd_create" number="283"/>
-  <syscall name="eventfd" number="284"/>
-  <syscall name="fallocate" number="285"/>
-  <syscall name="timerfd_settime" number="286"/>
-  <syscall name="timerfd_gettime" number="287"/>
-  <syscall name="accept4" number="288"/>
-  <syscall name="signalfd4" number="289"/>
-  <syscall name="eventfd2" number="290"/>
-  <syscall name="epoll_create1" number="291"/>
-  <syscall name="dup3" number="292"/>
-  <syscall name="pipe2" number="293"/>
-  <syscall name="inotify_init1" number="294"/>
-  <syscall name="preadv" number="295"/>
-  <syscall name="pwritev" number="296"/>
+  <syscall name="splice" number="275" groups="descriptor"/>
+  <syscall name="tee" number="276" groups="descriptor"/>
+  <syscall name="sync_file_range" number="277" groups="descriptor"/>
+  <syscall name="vmsplice" number="278" groups="descriptor"/>
+  <syscall name="move_pages" number="279" groups="memory"/>
+  <syscall name="utimensat" number="280" groups="descriptor,file"/>
+  <syscall name="epoll_pwait" number="281" groups="descriptor"/>
+  <syscall name="signalfd" number="282" groups="descriptor,signal"/>
+  <syscall name="timerfd_create" number="283" groups="descriptor"/>
+  <syscall name="eventfd" number="284" groups="descriptor"/>
+  <syscall name="fallocate" number="285" groups="descriptor"/>
+  <syscall name="timerfd_settime" number="286" groups="descriptor"/>
+  <syscall name="timerfd_gettime" number="287" groups="descriptor"/>
+  <syscall name="accept4" number="288" groups="network"/>
+  <syscall name="signalfd4" number="289" groups="descriptor,signal"/>
+  <syscall name="eventfd2" number="290" groups="descriptor"/>
+  <syscall name="epoll_create1" number="291" groups="descriptor"/>
+  <syscall name="dup3" number="292" groups="descriptor"/>
+  <syscall name="pipe2" number="293" groups="descriptor"/>
+  <syscall name="inotify_init1" number="294" groups="descriptor"/>
+  <syscall name="preadv" number="295" groups="descriptor"/>
+  <syscall name="pwritev" number="296" groups="descriptor"/>
 </syscalls_info>
diff --git a/gdb/syscalls/amd64-linux.xml.in b/gdb/syscalls/amd64-linux.xml.in
new file mode 100644
index 0000000..074b5870e
--- /dev/null
+++ b/gdb/syscalls/amd64-linux.xml.in
@@ -0,0 +1,314 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2009-2016 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
+
+<!-- This file was generated using the following file:
+     
+     /usr/src/linux/arch/x86/include/asm/unistd_64.h
+
+     The file mentioned above belongs to the Linux Kernel.  -->
+
+<syscalls_info>
+  <syscall name="read" number="0"/>
+  <syscall name="write" number="1"/>
+  <syscall name="open" number="2"/>
+  <syscall name="close" number="3"/>
+  <syscall name="stat" number="4"/>
+  <syscall name="fstat" number="5"/>
+  <syscall name="lstat" number="6"/>
+  <syscall name="poll" number="7"/>
+  <syscall name="lseek" number="8"/>
+  <syscall name="mmap" number="9"/>
+  <syscall name="mprotect" number="10"/>
+  <syscall name="munmap" number="11"/>
+  <syscall name="brk" number="12"/>
+  <syscall name="rt_sigaction" number="13"/>
+  <syscall name="rt_sigprocmask" number="14"/>
+  <syscall name="rt_sigreturn" number="15"/>
+  <syscall name="ioctl" number="16"/>
+  <syscall name="pread64" number="17"/>
+  <syscall name="pwrite64" number="18"/>
+  <syscall name="readv" number="19"/>
+  <syscall name="writev" number="20"/>
+  <syscall name="access" number="21"/>
+  <syscall name="pipe" number="22"/>
+  <syscall name="select" number="23"/>
+  <syscall name="sched_yield" number="24"/>
+  <syscall name="mremap" number="25"/>
+  <syscall name="msync" number="26"/>
+  <syscall name="mincore" number="27"/>
+  <syscall name="madvise" number="28"/>
+  <syscall name="shmget" number="29"/>
+  <syscall name="shmat" number="30"/>
+  <syscall name="shmctl" number="31"/>
+  <syscall name="dup" number="32"/>
+  <syscall name="dup2" number="33"/>
+  <syscall name="pause" number="34"/>
+  <syscall name="nanosleep" number="35"/>
+  <syscall name="getitimer" number="36"/>
+  <syscall name="alarm" number="37"/>
+  <syscall name="setitimer" number="38"/>
+  <syscall name="getpid" number="39"/>
+  <syscall name="sendfile" number="40"/>
+  <syscall name="socket" number="41"/>
+  <syscall name="connect" number="42"/>
+  <syscall name="accept" number="43"/>
+  <syscall name="sendto" number="44"/>
+  <syscall name="recvfrom" number="45"/>
+  <syscall name="sendmsg" number="46"/>
+  <syscall name="recvmsg" number="47"/>
+  <syscall name="shutdown" number="48"/>
+  <syscall name="bind" number="49"/>
+  <syscall name="listen" number="50"/>
+  <syscall name="getsockname" number="51"/>
+  <syscall name="getpeername" number="52"/>
+  <syscall name="socketpair" number="53"/>
+  <syscall name="setsockopt" number="54"/>
+  <syscall name="getsockopt" number="55"/>
+  <syscall name="clone" number="56"/>
+  <syscall name="fork" number="57"/>
+  <syscall name="vfork" number="58"/>
+  <syscall name="execve" number="59"/>
+  <syscall name="exit" number="60"/>
+  <syscall name="wait4" number="61"/>
+  <syscall name="kill" number="62"/>
+  <syscall name="uname" number="63"/>
+  <syscall name="semget" number="64"/>
+  <syscall name="semop" number="65"/>
+  <syscall name="semctl" number="66"/>
+  <syscall name="shmdt" number="67"/>
+  <syscall name="msgget" number="68"/>
+  <syscall name="msgsnd" number="69"/>
+  <syscall name="msgrcv" number="70"/>
+  <syscall name="msgctl" number="71"/>
+  <syscall name="fcntl" number="72"/>
+  <syscall name="flock" number="73"/>
+  <syscall name="fsync" number="74"/>
+  <syscall name="fdatasync" number="75"/>
+  <syscall name="truncate" number="76"/>
+  <syscall name="ftruncate" number="77"/>
+  <syscall name="getdents" number="78"/>
+  <syscall name="getcwd" number="79"/>
+  <syscall name="chdir" number="80"/>
+  <syscall name="fchdir" number="81"/>
+  <syscall name="rename" number="82"/>
+  <syscall name="mkdir" number="83"/>
+  <syscall name="rmdir" number="84"/>
+  <syscall name="creat" number="85"/>
+  <syscall name="link" number="86"/>
+  <syscall name="unlink" number="87"/>
+  <syscall name="symlink" number="88"/>
+  <syscall name="readlink" number="89"/>
+  <syscall name="chmod" number="90"/>
+  <syscall name="fchmod" number="91"/>
+  <syscall name="chown" number="92"/>
+  <syscall name="fchown" number="93"/>
+  <syscall name="lchown" number="94"/>
+  <syscall name="umask" number="95"/>
+  <syscall name="gettimeofday" number="96"/>
+  <syscall name="getrlimit" number="97"/>
+  <syscall name="getrusage" number="98"/>
+  <syscall name="sysinfo" number="99"/>
+  <syscall name="times" number="100"/>
+  <syscall name="ptrace" number="101"/>
+  <syscall name="getuid" number="102"/>
+  <syscall name="syslog" number="103"/>
+  <syscall name="getgid" number="104"/>
+  <syscall name="setuid" number="105"/>
+  <syscall name="setgid" number="106"/>
+  <syscall name="geteuid" number="107"/>
+  <syscall name="getegid" number="108"/>
+  <syscall name="setpgid" number="109"/>
+  <syscall name="getppid" number="110"/>
+  <syscall name="getpgrp" number="111"/>
+  <syscall name="setsid" number="112"/>
+  <syscall name="setreuid" number="113"/>
+  <syscall name="setregid" number="114"/>
+  <syscall name="getgroups" number="115"/>
+  <syscall name="setgroups" number="116"/>
+  <syscall name="setresuid" number="117"/>
+  <syscall name="getresuid" number="118"/>
+  <syscall name="setresgid" number="119"/>
+  <syscall name="getresgid" number="120"/>
+  <syscall name="getpgid" number="121"/>
+  <syscall name="setfsuid" number="122"/>
+  <syscall name="setfsgid" number="123"/>
+  <syscall name="getsid" number="124"/>
+  <syscall name="capget" number="125"/>
+  <syscall name="capset" number="126"/>
+  <syscall name="rt_sigpending" number="127"/>
+  <syscall name="rt_sigtimedwait" number="128"/>
+  <syscall name="rt_sigqueueinfo" number="129"/>
+  <syscall name="rt_sigsuspend" number="130"/>
+  <syscall name="sigaltstack" number="131"/>
+  <syscall name="utime" number="132"/>
+  <syscall name="mknod" number="133"/>
+  <syscall name="uselib" number="134"/>
+  <syscall name="personality" number="135"/>
+  <syscall name="ustat" number="136"/>
+  <syscall name="statfs" number="137"/>
+  <syscall name="fstatfs" number="138"/>
+  <syscall name="sysfs" number="139"/>
+  <syscall name="getpriority" number="140"/>
+  <syscall name="setpriority" number="141"/>
+  <syscall name="sched_setparam" number="142"/>
+  <syscall name="sched_getparam" number="143"/>
+  <syscall name="sched_setscheduler" number="144"/>
+  <syscall name="sched_getscheduler" number="145"/>
+  <syscall name="sched_get_priority_max" number="146"/>
+  <syscall name="sched_get_priority_min" number="147"/>
+  <syscall name="sched_rr_get_interval" number="148"/>
+  <syscall name="mlock" number="149"/>
+  <syscall name="munlock" number="150"/>
+  <syscall name="mlockall" number="151"/>
+  <syscall name="munlockall" number="152"/>
+  <syscall name="vhangup" number="153"/>
+  <syscall name="modify_ldt" number="154"/>
+  <syscall name="pivot_root" number="155"/>
+  <syscall name="_sysctl" number="156"/>
+  <syscall name="prctl" number="157"/>
+  <syscall name="arch_prctl" number="158"/>
+  <syscall name="adjtimex" number="159"/>
+  <syscall name="setrlimit" number="160"/>
+  <syscall name="chroot" number="161"/>
+  <syscall name="sync" number="162"/>
+  <syscall name="acct" number="163"/>
+  <syscall name="settimeofday" number="164"/>
+  <syscall name="mount" number="165"/>
+  <syscall name="umount2" number="166"/>
+  <syscall name="swapon" number="167"/>
+  <syscall name="swapoff" number="168"/>
+  <syscall name="reboot" number="169"/>
+  <syscall name="sethostname" number="170"/>
+  <syscall name="setdomainname" number="171"/>
+  <syscall name="iopl" number="172"/>
+  <syscall name="ioperm" number="173"/>
+  <syscall name="create_module" number="174"/>
+  <syscall name="init_module" number="175"/>
+  <syscall name="delete_module" number="176"/>
+  <syscall name="get_kernel_syms" number="177"/>
+  <syscall name="query_module" number="178"/>
+  <syscall name="quotactl" number="179"/>
+  <syscall name="nfsservctl" number="180"/>
+  <syscall name="getpmsg" number="181"/>
+  <syscall name="putpmsg" number="182"/>
+  <syscall name="afs_syscall" number="183"/>
+  <syscall name="tuxcall" number="184"/>
+  <syscall name="security" number="185"/>
+  <syscall name="gettid" number="186"/>
+  <syscall name="readahead" number="187"/>
+  <syscall name="setxattr" number="188"/>
+  <syscall name="lsetxattr" number="189"/>
+  <syscall name="fsetxattr" number="190"/>
+  <syscall name="getxattr" number="191"/>
+  <syscall name="lgetxattr" number="192"/>
+  <syscall name="fgetxattr" number="193"/>
+  <syscall name="listxattr" number="194"/>
+  <syscall name="llistxattr" number="195"/>
+  <syscall name="flistxattr" number="196"/>
+  <syscall name="removexattr" number="197"/>
+  <syscall name="lremovexattr" number="198"/>
+  <syscall name="fremovexattr" number="199"/>
+  <syscall name="tkill" number="200"/>
+  <syscall name="time" number="201"/>
+  <syscall name="futex" number="202"/>
+  <syscall name="sched_setaffinity" number="203"/>
+  <syscall name="sched_getaffinity" number="204"/>
+  <syscall name="set_thread_area" number="205"/>
+  <syscall name="io_setup" number="206"/>
+  <syscall name="io_destroy" number="207"/>
+  <syscall name="io_getevents" number="208"/>
+  <syscall name="io_submit" number="209"/>
+  <syscall name="io_cancel" number="210"/>
+  <syscall name="get_thread_area" number="211"/>
+  <syscall name="lookup_dcookie" number="212"/>
+  <syscall name="epoll_create" number="213"/>
+  <syscall name="epoll_ctl_old" number="214"/>
+  <syscall name="epoll_wait_old" number="215"/>
+  <syscall name="remap_file_pages" number="216"/>
+  <syscall name="getdents64" number="217"/>
+  <syscall name="set_tid_address" number="218"/>
+  <syscall name="restart_syscall" number="219"/>
+  <syscall name="semtimedop" number="220"/>
+  <syscall name="fadvise64" number="221"/>
+  <syscall name="timer_create" number="222"/>
+  <syscall name="timer_settime" number="223"/>
+  <syscall name="timer_gettime" number="224"/>
+  <syscall name="timer_getoverrun" number="225"/>
+  <syscall name="timer_delete" number="226"/>
+  <syscall name="clock_settime" number="227"/>
+  <syscall name="clock_gettime" number="228"/>
+  <syscall name="clock_getres" number="229"/>
+  <syscall name="clock_nanosleep" number="230"/>
+  <syscall name="exit_group" number="231"/>
+  <syscall name="epoll_wait" number="232"/>
+  <syscall name="epoll_ctl" number="233"/>
+  <syscall name="tgkill" number="234"/>
+  <syscall name="utimes" number="235"/>
+  <syscall name="vserver" number="236"/>
+  <syscall name="mbind" number="237"/>
+  <syscall name="set_mempolicy" number="238"/>
+  <syscall name="get_mempolicy" number="239"/>
+  <syscall name="mq_open" number="240"/>
+  <syscall name="mq_unlink" number="241"/>
+  <syscall name="mq_timedsend" number="242"/>
+  <syscall name="mq_timedreceive" number="243"/>
+  <syscall name="mq_notify" number="244"/>
+  <syscall name="mq_getsetattr" number="245"/>
+  <syscall name="kexec_load" number="246"/>
+  <syscall name="waitid" number="247"/>
+  <syscall name="add_key" number="248"/>
+  <syscall name="request_key" number="249"/>
+  <syscall name="keyctl" number="250"/>
+  <syscall name="ioprio_set" number="251"/>
+  <syscall name="ioprio_get" number="252"/>
+  <syscall name="inotify_init" number="253"/>
+  <syscall name="inotify_add_watch" number="254"/>
+  <syscall name="inotify_rm_watch" number="255"/>
+  <syscall name="migrate_pages" number="256"/>
+  <syscall name="openat" number="257"/>
+  <syscall name="mkdirat" number="258"/>
+  <syscall name="mknodat" number="259"/>
+  <syscall name="fchownat" number="260"/>
+  <syscall name="futimesat" number="261"/>
+  <syscall name="newfstatat" number="262"/>
+  <syscall name="unlinkat" number="263"/>
+  <syscall name="renameat" number="264"/>
+  <syscall name="linkat" number="265"/>
+  <syscall name="symlinkat" number="266"/>
+  <syscall name="readlinkat" number="267"/>
+  <syscall name="fchmodat" number="268"/>
+  <syscall name="faccessat" number="269"/>
+  <syscall name="pselect6" number="270"/>
+  <syscall name="ppoll" number="271"/>
+  <syscall name="unshare" number="272"/>
+  <syscall name="set_robust_list" number="273"/>
+  <syscall name="get_robust_list" number="274"/>
+  <syscall name="splice" number="275"/>
+  <syscall name="tee" number="276"/>
+  <syscall name="sync_file_range" number="277"/>
+  <syscall name="vmsplice" number="278"/>
+  <syscall name="move_pages" number="279"/>
+  <syscall name="utimensat" number="280"/>
+  <syscall name="epoll_pwait" number="281"/>
+  <syscall name="signalfd" number="282"/>
+  <syscall name="timerfd_create" number="283"/>
+  <syscall name="eventfd" number="284"/>
+  <syscall name="fallocate" number="285"/>
+  <syscall name="timerfd_settime" number="286"/>
+  <syscall name="timerfd_gettime" number="287"/>
+  <syscall name="accept4" number="288"/>
+  <syscall name="signalfd4" number="289"/>
+  <syscall name="eventfd2" number="290"/>
+  <syscall name="epoll_create1" number="291"/>
+  <syscall name="dup3" number="292"/>
+  <syscall name="pipe2" number="293"/>
+  <syscall name="inotify_init1" number="294"/>
+  <syscall name="preadv" number="295"/>
+  <syscall name="pwritev" number="296"/>
+</syscalls_info>
diff --git a/gdb/syscalls/apply-defaults.xsl b/gdb/syscalls/apply-defaults.xsl
new file mode 100644
index 0000000..5ab2b67
--- /dev/null
+++ b/gdb/syscalls/apply-defaults.xsl
@@ -0,0 +1,43 @@
+<!-- Generate syscall XML files based on defaults template.
+     Copyright (C) 2016 Free Software Foundation, Inc.
+
+     This file is part of GDB.
+
+     This program is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published by
+     the Free Software Foundation; either version 3 of the License, or
+     (at your option) any later version.
+
+     This program is distributed in the hope that it will be useful,
+     but WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+     GNU General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with this program.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<xsl:stylesheet version="1.0"
+		xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
+  <xsl:output method="xml" doctype-system="gdb-syscalls.dtd"/>
+
+  <xsl:template match="node()|@*" name="identity">
+    <xsl:copy>
+      <xsl:apply-templates select="node()|@*"/>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="/syscalls_info/syscall">
+    <xsl:copy>
+      <xsl:apply-templates select="@*|node()"/>
+      <xsl:variable name="syscall"><xsl:value-of select="@name"/></xsl:variable>
+      <xsl:variable name="tgroups"><xsl:value-of select="@groups"/></xsl:variable>
+      <xsl:for-each select="document('linux-defaults.xml.in')/syscalls_defaults/child::*[@name=$syscall]">
+	<xsl:attribute name="groups">
+	  <xsl:value-of select="@groups"/>
+	  <xsl:if test="$tgroups != '' ">,<xsl:value-of select="$tgroups"/></xsl:if>
+	</xsl:attribute>
+      </xsl:for-each>
+    </xsl:copy>
+  </xsl:template>
+
+</xsl:stylesheet>
diff --git a/gdb/syscalls/arm-linux.xml b/gdb/syscalls/arm-linux.xml
index c0a456b..0777c64 100644
--- a/gdb/syscalls/arm-linux.xml
+++ b/gdb/syscalls/arm-linux.xml
@@ -1,95 +1,92 @@
 <?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
 <!-- Copyright (C) 2009-2016 Free Software Foundation, Inc.
 
      Copying and distribution of this file, with or without modification,
      are permitted in any medium without royalty provided the copyright
      notice and this notice are preserved.  This file is offered as-is,
      without any warranty. -->
-
-<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
-
 <!-- This file was generated using the following file:
 
      linux/arch/arm/include/uapi/asm/unistd.h
 
      The file mentioned above belongs to the Linux Kernel.
      Some small hand-edits were made. -->
-
 <syscalls_info>
   <syscall name="restart_syscall" number="0"/>
-  <syscall name="exit" number="1"/>
-  <syscall name="fork" number="2"/>
-  <syscall name="read" number="3"/>
-  <syscall name="write" number="4"/>
-  <syscall name="open" number="5"/>
-  <syscall name="close" number="6"/>
-  <syscall name="waitpid" number="7"/> <!-- removed -->
-  <syscall name="creat" number="8"/>
-  <syscall name="link" number="9"/>
-  <syscall name="unlink" number="10"/>
-  <syscall name="execve" number="11"/>
-  <syscall name="chdir" number="12"/>
+  <syscall name="exit" number="1" groups="process"/>
+  <syscall name="fork" number="2" groups="process"/>
+  <syscall name="read" number="3" groups="descriptor"/>
+  <syscall name="write" number="4" groups="descriptor"/>
+  <syscall name="open" number="5" groups="descriptor,file"/>
+  <syscall name="close" number="6" groups="descriptor"/>
+  <syscall name="waitpid" number="7" groups="process"/> <!-- removed -->
+  <syscall name="creat" number="8" groups="descriptor,file"/>
+  <syscall name="link" number="9" groups="file"/>
+  <syscall name="unlink" number="10" groups="file"/>
+  <syscall name="execve" number="11" groups="file,process"/>
+  <syscall name="chdir" number="12" groups="file"/>
   <syscall name="time" number="13"/>
-  <syscall name="mknod" number="14"/>
-  <syscall name="chmod" number="15"/>
-  <syscall name="lchown" number="16"/>
-  <syscall name="break" number="17"/> <!-- removed -->
-  <syscall name="oldstat" number="18"/> <!-- removed -->
-  <syscall name="lseek" number="19"/>
+  <syscall name="mknod" number="14" groups="file"/>
+  <syscall name="chmod" number="15" groups="file"/>
+  <syscall name="lchown" number="16" groups="file"/>
+  <syscall name="break" number="17" groups="memory"/> <!-- removed -->
+  <syscall name="oldstat" number="18" groups="file"/> <!-- removed -->
+  <syscall name="lseek" number="19" groups="descriptor"/>
   <syscall name="getpid" number="20"/>
-  <syscall name="mount" number="21"/>
-  <syscall name="umount" number="22"/>
+  <syscall name="mount" number="21" groups="file"/>
+  <syscall name="umount" number="22" groups="file"/>
   <syscall name="setuid" number="23"/>
   <syscall name="getuid" number="24"/>
   <syscall name="stime" number="25"/>
   <syscall name="ptrace" number="26"/>
   <syscall name="alarm" number="27"/>
-  <syscall name="oldfstat" number="28"/> <!-- removed -->
-  <syscall name="pause" number="29"/>
-  <syscall name="utime" number="30"/>
+  <syscall name="oldfstat" number="28" groups="descriptor"/> <!-- removed -->
+  <syscall name="pause" number="29" groups="signal"/>
+  <syscall name="utime" number="30" groups="file"/>
   <syscall name="stty" number="31"/> <!-- removed -->
   <syscall name="gtty" number="32"/> <!-- removed -->
-  <syscall name="access" number="33"/>
+  <syscall name="access" number="33" groups="file"/>
   <syscall name="nice" number="34"/>
   <syscall name="ftime" number="35"/> <!-- removed -->
   <syscall name="sync" number="36"/>
-  <syscall name="kill" number="37"/>
-  <syscall name="rename" number="38"/>
-  <syscall name="mkdir" number="39"/>
-  <syscall name="rmdir" number="40"/>
-  <syscall name="dup" number="41"/>
-  <syscall name="pipe" number="42"/>
+  <syscall name="kill" number="37" groups="signal"/>
+  <syscall name="rename" number="38" groups="file"/>
+  <syscall name="mkdir" number="39" groups="file"/>
+  <syscall name="rmdir" number="40" groups="file"/>
+  <syscall name="dup" number="41" groups="descriptor"/>
+  <syscall name="pipe" number="42" groups="descriptor"/>
   <syscall name="times" number="43"/>
   <syscall name="prof" number="44"/> <!-- removed -->
-  <syscall name="brk" number="45"/>
+  <syscall name="brk" number="45" groups="memory"/>
   <syscall name="setgid" number="46"/>
   <syscall name="getgid" number="47"/>
-  <syscall name="signal" number="48"/> <!-- removed -->
+  <syscall name="signal" number="48" groups="signal"/> <!-- removed -->
   <syscall name="geteuid" number="49"/>
   <syscall name="getegid" number="50"/>
-  <syscall name="acct" number="51"/>
-  <syscall name="umount2" number="52"/>
+  <syscall name="acct" number="51" groups="file"/>
+  <syscall name="umount2" number="52" groups="file"/>
   <syscall name="lock" number="53"/> <!-- removed -->
-  <syscall name="ioctl" number="54"/>
-  <syscall name="fcntl" number="55"/>
+  <syscall name="ioctl" number="54" groups="descriptor"/>
+  <syscall name="fcntl" number="55" groups="descriptor"/>
   <syscall name="mpx" number="56"/> <!-- removed -->
   <syscall name="setpgid" number="57"/>
   <syscall name="ulimit" number="58"/> <!-- removed -->
   <syscall name="oldolduname" number="59"/> <!-- removed -->
   <syscall name="umask" number="60"/>
-  <syscall name="chroot" number="61"/>
+  <syscall name="chroot" number="61" groups="file"/>
   <syscall name="ustat" number="62"/>
-  <syscall name="dup2" number="63"/>
+  <syscall name="dup2" number="63" groups="descriptor"/>
   <syscall name="getppid" number="64"/>
   <syscall name="getpgrp" number="65"/>
   <syscall name="setsid" number="66"/>
-  <syscall name="sigaction" number="67"/>
-  <syscall name="sgetmask" number="68"/> <!-- removed -->
-  <syscall name="ssetmask" number="69"/> <!-- removed -->
+  <syscall name="sigaction" number="67" groups="signal"/>
+  <syscall name="sgetmask" number="68" groups="signal"/> <!-- removed -->
+  <syscall name="ssetmask" number="69" groups="signal"/> <!-- removed -->
   <syscall name="setreuid" number="70"/>
   <syscall name="setregid" number="71"/>
-  <syscall name="sigsuspend" number="72"/>
-  <syscall name="sigpending" number="73"/>
+  <syscall name="sigsuspend" number="72" groups="signal"/>
+  <syscall name="sigpending" number="73" groups="signal"/>
   <syscall name="sethostname" number="74"/>
   <syscall name="setrlimit" number="75"/>
   <syscall name="getrlimit" number="76"/>
@@ -98,78 +95,78 @@
   <syscall name="settimeofday" number="79"/>
   <syscall name="getgroups" number="80"/>
   <syscall name="setgroups" number="81"/>
-  <syscall name="select" number="82"/>
-  <syscall name="symlink" number="83"/>
-  <syscall name="oldlstat" number="84"/> <!-- removed -->
-  <syscall name="readlink" number="85"/>
-  <syscall name="uselib" number="86"/>
-  <syscall name="swapon" number="87"/>
+  <syscall name="select" number="82" groups="descriptor"/>
+  <syscall name="symlink" number="83" groups="file"/>
+  <syscall name="oldlstat" number="84" groups="file"/> <!-- removed -->
+  <syscall name="readlink" number="85" groups="file"/>
+  <syscall name="uselib" number="86" groups="file"/>
+  <syscall name="swapon" number="87" groups="file"/>
   <syscall name="reboot" number="88"/>
-  <syscall name="readdir" number="89"/>
-  <syscall name="mmap" number="90"/>
-  <syscall name="munmap" number="91"/>
-  <syscall name="truncate" number="92"/>
-  <syscall name="ftruncate" number="93"/>
-  <syscall name="fchmod" number="94"/>
-  <syscall name="fchown" number="95"/>
+  <syscall name="readdir" number="89" groups="descriptor"/>
+  <syscall name="mmap" number="90" groups="descriptor,memory"/>
+  <syscall name="munmap" number="91" groups="memory"/>
+  <syscall name="truncate" number="92" groups="file"/>
+  <syscall name="ftruncate" number="93" groups="descriptor"/>
+  <syscall name="fchmod" number="94" groups="descriptor"/>
+  <syscall name="fchown" number="95" groups="descriptor"/>
   <syscall name="getpriority" number="96"/>
   <syscall name="setpriority" number="97"/>
   <syscall name="profil" number="98"/> <!-- removed -->
-  <syscall name="statfs" number="99"/>
-  <syscall name="fstatfs" number="100"/>
+  <syscall name="statfs" number="99" groups="file"/>
+  <syscall name="fstatfs" number="100" groups="descriptor"/>
   <syscall name="ioperm" number="101"/> <!-- removed -->
-  <syscall name="socketcall" number="102"/>
+  <syscall name="socketcall" number="102" groups="descriptor"/>
   <syscall name="syslog" number="103"/>
   <syscall name="setitimer" number="104"/>
   <syscall name="getitimer" number="105"/>
-  <syscall name="stat" number="106"/>
-  <syscall name="lstat" number="107"/>
-  <syscall name="fstat" number="108"/>
+  <syscall name="stat" number="106" groups="file"/>
+  <syscall name="lstat" number="107" groups="file"/>
+  <syscall name="fstat" number="108" groups="descriptor"/>
   <syscall name="olduname" number="109"/> <!-- removed -->
   <syscall name="iopl" number="110"/> <!-- removed -->
   <syscall name="vhangup" number="111"/>
   <syscall name="idle" number="112"/> <!-- removed -->
   <syscall name="syscall" number="113"/>
-  <syscall name="wait4" number="114"/>
-  <syscall name="swapoff" number="115"/>
+  <syscall name="wait4" number="114" groups="process"/>
+  <syscall name="swapoff" number="115" groups="file"/>
   <syscall name="sysinfo" number="116"/>
-  <syscall name="ipc" number="117"/>
-  <syscall name="fsync" number="118"/>
-  <syscall name="sigreturn" number="119"/>
-  <syscall name="clone" number="120"/>
+  <syscall name="ipc" number="117" groups="ipc"/>
+  <syscall name="fsync" number="118" groups="descriptor"/>
+  <syscall name="sigreturn" number="119" groups="signal"/>
+  <syscall name="clone" number="120" groups="process"/>
   <syscall name="setdomainname" number="121"/>
   <syscall name="uname" number="122"/>
   <syscall name="modify_ldt" number="123"/> <!-- removed -->
   <syscall name="adjtimex" number="124"/>
-  <syscall name="mprotect" number="125"/>
-  <syscall name="sigprocmask" number="126"/>
+  <syscall name="mprotect" number="125" groups="memory"/>
+  <syscall name="sigprocmask" number="126" groups="signal"/>
   <syscall name="create_module" number="127"/> <!-- removed -->
   <syscall name="init_module" number="128"/>
   <syscall name="delete_module" number="129"/>
   <syscall name="get_kernel_syms" number="130"/> <!-- removed -->
-  <syscall name="quotactl" number="131"/>
+  <syscall name="quotactl" number="131" groups="file"/>
   <syscall name="getpgid" number="132"/>
-  <syscall name="fchdir" number="133"/>
+  <syscall name="fchdir" number="133" groups="descriptor"/>
   <syscall name="bdflush" number="134"/>
   <syscall name="sysfs" number="135"/>
   <syscall name="personality" number="136"/>
   <syscall name="afs_syscall" number="137"/> <!-- removed -->
   <syscall name="setfsuid" number="138"/>
   <syscall name="setfsgid" number="139"/>
-  <syscall name="_llseek" number="140"/>
-  <syscall name="getdents" number="141"/>
-  <syscall name="_newselect" number="142"/>
-  <syscall name="flock" number="143"/>
-  <syscall name="msync" number="144"/>
-  <syscall name="readv" number="145"/>
-  <syscall name="writev" number="146"/>
+  <syscall name="_llseek" number="140" groups="descriptor"/>
+  <syscall name="getdents" number="141" groups="descriptor"/>
+  <syscall name="_newselect" number="142" groups="descriptor"/>
+  <syscall name="flock" number="143" groups="descriptor"/>
+  <syscall name="msync" number="144" groups="memory"/>
+  <syscall name="readv" number="145" groups="descriptor"/>
+  <syscall name="writev" number="146" groups="descriptor"/>
   <syscall name="getsid" number="147"/>
-  <syscall name="fdatasync" number="148"/>
+  <syscall name="fdatasync" number="148" groups="descriptor"/>
   <syscall name="_sysctl" number="149"/>
-  <syscall name="mlock" number="150"/>
-  <syscall name="munlock" number="151"/>
-  <syscall name="mlockall" number="152"/>
-  <syscall name="munlockall" number="153"/>
+  <syscall name="mlock" number="150" groups="memory"/>
+  <syscall name="munlock" number="151" groups="memory"/>
+  <syscall name="mlockall" number="152" groups="memory"/>
+  <syscall name="munlockall" number="153" groups="memory"/>
   <syscall name="sched_setparam" number="154"/>
   <syscall name="sched_getparam" number="155"/>
   <syscall name="sched_setscheduler" number="156"/>
@@ -179,40 +176,40 @@
   <syscall name="sched_get_priority_min" number="160"/>
[...]

[diff truncated at 100000 bytes]


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]