public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* Re: [PATCH v5 4/5] Include group information to xml syscall files.
@ 2016-05-17 17:28 Doug Evans
  2016-05-20  2:30 ` Gabriel Krisman Bertazi
  0 siblings, 1 reply; 14+ messages in thread
From: Doug Evans @ 2016-05-17 17:28 UTC (permalink / raw)
  To: Gabriel Krisman Bertazi; +Cc: gdb-patches, palves, sergiodj

Gabriel Krisman Bertazi writes:
  > We maintain linux-defaults.xml.in, a template file to hold generic group
  > information.  It is used by the XSL script that parses the architecture
  > specific files to generate the final xml files, which are actually
  > installed and loaded by GDB.  The script is not run during the normal
  > build process, only when building in maintainer mode.
  >
  > gdb/
  >
  > 	* data-directory/Makefile.in: Generate syscall xml when building
  > 	in maintainer mode.
  > 	* configure.ac: Include dependency for xsltproc when building
  > 	in maintainer-mode.
  > 	* syscalls/apply-defaults.xsl: New file.
  > 	* syscalls/linux-defaults.xml.in: New file.
  > 	* 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.
  >...
  >
  > diff --git a/gdb/configure.ac b/gdb/configure.ac
  > index d1930f9..b6529aa 100644
  > --- a/gdb/configure.ac
  > +++ b/gdb/configure.ac
  > @@ -2338,6 +2338,16 @@ if test "${nativefile}" != ""; then
  >  fi
  >  AC_SUBST(GDB_NM_FILE)
  >
  > +dnl Add dependency for xsltproc if building with maintainer-mode  
enabled.
  > +if test "x$USE_MAINTAINER_MODE" = xyes; then
  > +  AC_PATH_PROGS(XSLTPROC, xsltproc, missing)
  > +  if test "${XSLTPROC}" = missing; then
  > +    AC_ERROR(unable to find xsltproc.  maintainer-mode requires  
xsltproc.)
  > +  fi
  > +fi
  > +AC_SUBST(XSLTPROC)

I wonder if we document maintainer-mode prerequisites anywhere.

  > +
  > +
  >  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 c05f379..9be925a 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@
  > @@ -162,6 +163,9 @@ FLAGS_TO_PASS = \
  >  .PHONY: all
  >  all: stamp-syscalls stamp-python stamp-guile stamp-system-gdbinit
  >
  > +@MAINTAINER_MODE_TRUE@%.xml: %.xml.in apply-defaults.xsl  
linux-defaults.xml.in
  > +@MAINTAINER_MODE_TRUE@	$(XSLTPROC) -o $(SYSCALLS_SRCDIR)/$@  
$(SYSCALLS_SRCDIR)/apply-defaults.xsl $<;\
  > +
  >  # For portability's sake, we need to handle systems that don't have
  >  # symbolic links.
  >  stamp-syscalls: Makefile $(SYSCALLS_FILES)
  > diff --git a/gdb/syscalls/aarch64-linux.xml  
b/gdb/syscalls/aarch64-linux.xml.in
  > similarity index 100%
  > rename from gdb/syscalls/aarch64-linux.xml
  > rename to gdb/syscalls/aarch64-linux.xml.in
  > diff --git a/gdb/syscalls/amd64-linux.xml  
b/gdb/syscalls/amd64-linux.xml.in
  > similarity index 100%
  > rename from gdb/syscalls/amd64-linux.xml
  > rename to gdb/syscalls/amd64-linux.xml.in
  > diff --git a/gdb/syscalls/apply-defaults.xsl  
b/gdb/syscalls/apply-defaults.xsl
  > new file mode 100644
  > index 0000000..6363fc4
  > --- /dev/null
  > +++ b/gdb/syscalls/apply-defaults.xsl
  > @@ -0,0 +1,27 @@
  > +<!-- Copyright (C) 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.  -->
  > +
  > +<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:for-each  
select="document('linux-defaults.xml.in')/syscalls_defaults/child::*[@name=$syscall]">
  > +	<xsl:attribute name="groups"><xsl:value-of  
select="@groups"/></xsl:attribute>
  > +      </xsl:for-each>
  > +    </xsl:copy>
  > +  </xsl:template>
  > +
  > +</xsl:stylesheet>

At the moment all group information comes from the defaults (I think).
I'm assuming all one has to do for special cases is add the group(s)
directly to the foo-xml.in file and that will work. Right?
IWBN to have some examples so people don't work from a default modus  
operandi
of adding everything to linux-defaults.xml.in.

btw, why is linux-defaults.xml.in a ".in" file?
I'd expect it to just be linux-defaults.xml.

  > diff --git a/gdb/syscalls/arm-linux.xml b/gdb/syscalls/arm-linux.xml.in
  > similarity index 100%
  > rename from gdb/syscalls/arm-linux.xml
  > rename to gdb/syscalls/arm-linux.xml.in
  > diff --git a/gdb/syscalls/bfin-linux.xml b/gdb/syscalls/bfin-linux.xml.in
  > similarity index 100%
  > rename from gdb/syscalls/bfin-linux.xml
  > rename to gdb/syscalls/bfin-linux.xml.in
  > diff --git a/gdb/syscalls/i386-linux.xml b/gdb/syscalls/i386-linux.xml.in
  > similarity index 100%
  > rename from gdb/syscalls/i386-linux.xml
  > rename to gdb/syscalls/i386-linux.xml.in
  > diff --git a/gdb/syscalls/linux-defaults.xml.in  
b/gdb/syscalls/linux-defaults.xml.in
  > new file mode 100644
  > index 0000000..1c4e187
  > --- /dev/null
  > +++ b/gdb/syscalls/linux-defaults.xml.in
  > @@ -0,0 +1,243 @@
  > +<?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.  -->
  > +
  > +<!-- The group field information was based on strace.  -->
  > +
  > +<syscalls_defaults>
  > +  <syscall name="read" groups="descriptor"/>
  > +  <syscall name="write" groups="descriptor"/>
  > +  <syscall name="open" groups="descriptor,file"/>
  > +  <syscall name="close" groups="descriptor"/>
  > +  <syscall name="stat" groups="file"/>
  > +  <syscall name="fstat" groups="descriptor"/>
  > +  <syscall name="lstat" groups="file"/>
  > +  <syscall name="poll" groups="descriptor"/>
  > +  <syscall name="lseek" groups="descriptor"/>
  > +  <syscall name="mmap" groups="descriptor,memory"/>
  > +  <syscall name="mprotect" groups="memory"/>
  > +  <syscall name="munmap" groups="memory"/>
  > +  <syscall name="brk" groups="memory"/>
  > +  <syscall name="rt_sigaction" groups="signal"/>
  > +  <syscall name="rt_sigprocmask" groups="signal"/>
  > +  <syscall name="rt_sigreturn" groups="signal"/>
  > +  <syscall name="ioctl" groups="descriptor"/>
  > +  <syscall name="pread64" groups="descriptor"/>
  > +  <syscall name="pwrite64" groups="descriptor"/>
  > +  <syscall name="readv" groups="descriptor"/>
  > +  <syscall name="writev" groups="descriptor"/>
  > +  <syscall name="access" groups="file"/>
  > +  <syscall name="pipe" groups="descriptor"/>
  > +  <syscall name="select" groups="descriptor"/>
  > +  <syscall name="mremap" groups="memory"/>
  > +  <syscall name="msync" groups="memory"/>
  > +  <syscall name="mincore" groups="memory"/>
  > +  <syscall name="madvise" groups="memory"/>
  > +  <syscall name="shmget" groups="ipc"/>
  > +  <syscall name="shmat" groups="ipc,memory"/>
  > +  <syscall name="shmctl" groups="ipc"/>
  > +  <syscall name="dup" groups="descriptor"/>
  > +  <syscall name="dup2" groups="descriptor"/>
  > +  <syscall name="pause" groups="signal"/>
  > +  <syscall name="sendfile" groups="descriptor,network"/>
  > +  <syscall name="socket" groups="network"/>
  > +  <syscall name="connect" groups="network"/>
  > +  <syscall name="accept" groups="network"/>
  > +  <syscall name="sendto" groups="network"/>
  > +  <syscall name="recvfrom" groups="network"/>
  > +  <syscall name="sendmsg" groups="network"/>
  > +  <syscall name="recvmsg" groups="network"/>
  > +  <syscall name="shutdown" groups="network"/>
  > +  <syscall name="bind" groups="network"/>
  > +  <syscall name="listen" groups="network"/>
  > +  <syscall name="getsockname" groups="network"/>
  > +  <syscall name="getpeername" groups="network"/>
  > +  <syscall name="socketpair" groups="network"/>
  > +  <syscall name="setsockopt" groups="network"/>
  > +  <syscall name="getsockopt" groups="network"/>
  > +  <syscall name="clone" groups="process"/>
  > +  <syscall name="fork" groups="process"/>
  > +  <syscall name="vfork" groups="process"/>
  > +  <syscall name="execve" groups="file,process"/>
  > +  <syscall name="execv" groups="file,process"/>
  > +  <syscall name="exit" groups="process"/>
  > +  <syscall name="wait4" groups="process"/>
  > +  <syscall name="kill" groups="signal"/>
  > +  <syscall name="semget" groups="ipc"/>
  > +  <syscall name="semop" groups="ipc"/>
  > +  <syscall name="semctl" groups="ipc"/>
  > +  <syscall name="shmdt" groups="ipc,memory"/>
  > +  <syscall name="msgget" groups="ipc"/>
  > +  <syscall name="msgsnd" groups="ipc"/>
  > +  <syscall name="msgrcv" groups="ipc"/>
  > +  <syscall name="msgctl" groups="ipc"/>
  > +  <syscall name="fcntl" groups="descriptor"/>
  > +  <syscall name="flock" groups="descriptor"/>
  > +  <syscall name="fsync" groups="descriptor"/>
  > +  <syscall name="fdatasync" groups="descriptor"/>
  > +  <syscall name="truncate" groups="file"/>
  > +  <syscall name="ftruncate" groups="descriptor"/>
  > +  <syscall name="getdents" groups="descriptor"/>
  > +  <syscall name="getcwd" groups="file"/>
  > +  <syscall name="chdir" groups="file"/>
  > +  <syscall name="fchdir" groups="descriptor"/>
  > +  <syscall name="rename" groups="file"/>
  > +  <syscall name="mkdir" groups="file"/>
  > +  <syscall name="rmdir" groups="file"/>
  > +  <syscall name="creat" groups="descriptor,file"/>
  > +  <syscall name="link" groups="file"/>
  > +  <syscall name="unlink" groups="file"/>
  > +  <syscall name="symlink" groups="file"/>
  > +  <syscall name="readlink" groups="file"/>
  > +  <syscall name="chmod" groups="file"/>
  > +  <syscall name="fchmod" groups="descriptor"/>
  > +  <syscall name="chown" groups="file"/>
  > +  <syscall name="fchown" groups="descriptor"/>
  > +  <syscall name="lchown" groups="file"/>
  > +  <syscall name="rt_sigpending" groups="signal"/>
  > +  <syscall name="rt_sigtimedwait" groups="signal"/>
  > +  <syscall name="rt_sigqueueinfo" groups="signal"/>
  > +  <syscall name="rt_sigsuspend" groups="signal"/>
  > +  <syscall name="sigaltstack" groups="signal"/>
  > +  <syscall name="utime" groups="file"/>
  > +  <syscall name="mknod" groups="file"/>
  > +  <syscall name="uselib" groups="file"/>
  > +  <syscall name="statfs" groups="file"/>
  > +  <syscall name="fstatfs" groups="descriptor"/>
  > +  <syscall name="mlock" groups="memory"/>
  > +  <syscall name="munlock" groups="memory"/>
  > +  <syscall name="mlockall" groups="memory"/>
  > +  <syscall name="munlockall" groups="memory"/>
  > +  <syscall name="pivot_root" groups="file"/>
  > +  <syscall name="arch_prctl" groups="process"/>
  > +  <syscall name="chroot" groups="file"/>
  > +  <syscall name="acct" groups="file"/>
  > +  <syscall name="mount" groups="file"/>
  > +  <syscall name="umount" groups="file"/>
  > +  <syscall name="umount2" groups="file"/>
  > +  <syscall name="swapon" groups="file"/>
  > +  <syscall name="swapoff" groups="file"/>
  > +  <syscall name="quotactl" groups="file"/>
  > +  <syscall name="readahead" groups="descriptor"/>
  > +  <syscall name="setxattr" groups="file"/>
  > +  <syscall name="lsetxattr" groups="file"/>
  > +  <syscall name="fsetxattr" groups="descriptor"/>
  > +  <syscall name="getxattr" groups="file"/>
  > +  <syscall name="lgetxattr" groups="file"/>
  > +  <syscall name="fgetxattr" groups="descriptor"/>
  > +  <syscall name="listxattr" groups="file"/>
  > +  <syscall name="llistxattr" groups="file"/>
  > +  <syscall name="flistxattr" groups="descriptor"/>
  > +  <syscall name="removexattr" groups="file"/>
  > +  <syscall name="lremovexattr" groups="file"/>
  > +  <syscall name="fremovexattr" groups="descriptor"/>
  > +  <syscall name="tkill" groups="signal"/>
  > +  <syscall name="epoll_create" groups="descriptor"/>
  > +  <syscall name="remap_file_pages" groups="memory"/>
  > +  <syscall name="getdents64" groups="descriptor"/>
  > +  <syscall name="semtimedop" groups="ipc"/>
  > +  <syscall name="fadvise64" groups="descriptor"/>
  > +  <syscall name="exit_group" groups="process"/>
  > +  <syscall name="epoll_wait" groups="descriptor"/>
  > +  <syscall name="epoll_ctl" groups="descriptor"/>
  > +  <syscall name="tgkill" groups="signal"/>
  > +  <syscall name="utimes" groups="file"/>
  > +  <syscall name="mbind" groups="memory"/>
  > +  <syscall name="set_mempolicy" groups="memory"/>
  > +  <syscall name="get_mempolicy" groups="memory"/>
  > +  <syscall name="waitid" groups="process"/>
  > +  <syscall name="inotify_init" groups="descriptor"/>
  > +  <syscall name="inotify_add_watch" groups="descriptor"/>
  > +  <syscall name="inotify_rm_watch" groups="descriptor"/>
  > +  <syscall name="migrate_pages" groups="memory"/>
  > +  <syscall name="openat" groups="descriptor,file"/>
  > +  <syscall name="mkdirat" groups="descriptor,file"/>
  > +  <syscall name="mknodat" groups="descriptor,file"/>
  > +  <syscall name="fchownat" groups="descriptor,file"/>
  > +  <syscall name="futimesat" groups="descriptor,file"/>
  > +  <syscall name="newfstatat" groups="descriptor,file"/>
  > +  <syscall name="unlinkat" groups="descriptor,file"/>
  > +  <syscall name="renameat" groups="descriptor,file"/>
  > +  <syscall name="linkat" groups="descriptor,file"/>
  > +  <syscall name="symlinkat" groups="descriptor,file"/>
  > +  <syscall name="readlinkat" groups="descriptor,file"/>
  > +  <syscall name="fchmodat" groups="descriptor,file"/>
  > +  <syscall name="faccessat" groups="descriptor,file"/>
  > +  <syscall name="pselect6" groups="descriptor"/>
  > +  <syscall name="ppoll" groups="descriptor"/>
  > +  <syscall name="unshare" groups="process"/>
  > +  <syscall name="splice" groups="descriptor"/>
  > +  <syscall name="tee" groups="descriptor"/>
  > +  <syscall name="sync_file_range" groups="descriptor"/>
  > +  <syscall name="vmsplice" groups="descriptor"/>
  > +  <syscall name="move_pages" groups="memory"/>
  > +  <syscall name="utimensat" groups="descriptor,file"/>
  > +  <syscall name="epoll_pwait" groups="descriptor"/>
  > +  <syscall name="signalfd" groups="descriptor,signal"/>
  > +  <syscall name="timerfd_create" groups="descriptor"/>
  > +  <syscall name="eventfd" groups="descriptor"/>
  > +  <syscall name="fallocate" groups="descriptor"/>
  > +  <syscall name="timerfd_settime" groups="descriptor"/>
  > +  <syscall name="timerfd_gettime" groups="descriptor"/>
  > +  <syscall name="accept4" groups="network"/>
  > +  <syscall name="signalfd4" groups="descriptor,signal"/>
  > +  <syscall name="eventfd2" groups="descriptor"/>
  > +  <syscall name="epoll_create1" groups="descriptor"/>
  > +  <syscall name="dup3" groups="descriptor"/>
  > +  <syscall name="pipe2" groups="descriptor"/>
  > +  <syscall name="inotify_init1" groups="descriptor"/>
  > +  <syscall name="preadv" groups="descriptor"/>
  > +  <syscall name="pwritev" groups="descriptor"/>
  > +  <syscall name="send" groups="network"/>
  > +  <syscall name="recv" groups="network"/>
  > +  <syscall name="statfs64" groups="file"/>
  > +  <syscall name="fstatfs64" groups="descriptor"/>
  > +  <syscall name="sendfile64" groups="descriptor,network"/>
  > +  <syscall name="rt_tgsigqueueinfo" groups="process,signal"/>
  > +  <syscall name="perf_event_open" groups="descriptor"/>
  > +  <syscall name="recvmmsg" groups="network"/>
  > +  <syscall name="fanotify_init" groups="descriptor"/>
  > +  <syscall name="fanotify_mark" groups="descriptor,file"/>
  > +  <syscall name="fchown32" groups="descriptor"/>
  > +  <syscall name="chown32" groups="file"/>
  > +  <syscall name="fcntl64" groups="descriptor"/>
  > +  <syscall name="mmap2" groups="descriptor,memory"/>
  > +  <syscall name="truncate64" groups="file"/>
  > +  <syscall name="ftruncate64" groups="descriptor"/>
  > +  <syscall name="stat64" groups="file"/>
  > +  <syscall name="lstat64" groups="file"/>
  > +  <syscall name="fstat64" groups="descriptor"/>
  > +  <syscall name="lchown32" groups="file"/>
  > +  <syscall name="name_to_handle_at" groups="descriptor,file"/>
  > +  <syscall name="open_by_handle_at" groups="descriptor"/>
  > +  <syscall name="_llseek" groups="descriptor"/>
  > +  <syscall name="syncfs" groups="descriptor"/>
  > +  <syscall name="sendmmsg" groups="network"/>
  > +  <syscall name="setns" groups="descriptor"/>
  > +  <syscall name="finit_module" groups="descriptor"/>
  > +  <syscall name="oldstat" groups="file"/>
  > +  <syscall name="sigaction" groups="signal"/>
  > +  <syscall name="sigreturn" groups="signal"/>
  > +  <syscall name="sigsuspend" groups="signal"/>
  > +  <syscall name="sigpending" groups="signal"/>
  > +  <syscall name="sigprocmask" groups="signal"/>
  > +  <syscall name="ipc" groups="ipc"/>
  > +  <syscall name="readdir" groups="descriptor"/>
  > +  <syscall name="socketcall" groups="descriptor"/>
  > +  <syscall name="break" groups="memory"/>
  > +  <syscall name="oldfstat" groups="descriptor"/>
  > +  <syscall name="signal" groups="signal"/>
  > +  <syscall name="sgetmask" groups="signal"/>
  > +  <syscall name="ssetmask" groups="signal"/>
  > +  <syscall name="oldlstat" groups="file"/>
  > +  <syscall name="waitpid" groups="process"/>
  > +  <syscall name="pread" groups="descriptor"/>
  > +  <syscall name="pwrite" groups="descriptor"/>
  > +  <syscall name="fadvise64_64" groups="descriptor"/>
  > +  <syscall name="fstatat64" groups="descriptor,file"/>
  > +  <syscall name="_newselect" groups="descriptor"/>
  > +  <syscall name="timerfd" groups="descriptor"/>
  > +</syscalls_defaults>
  > diff --git a/gdb/syscalls/mips-n32-linux.xml  
b/gdb/syscalls/mips-n32-linux.xml.in
  > similarity index 100%
  > rename from gdb/syscalls/mips-n32-linux.xml
  > rename to gdb/syscalls/mips-n32-linux.xml.in
  > diff --git a/gdb/syscalls/mips-n64-linux.xml  
b/gdb/syscalls/mips-n64-linux.xml.in
  > similarity index 100%
  > rename from gdb/syscalls/mips-n64-linux.xml
  > rename to gdb/syscalls/mips-n64-linux.xml.in
  > diff --git a/gdb/syscalls/mips-o32-linux.xml  
b/gdb/syscalls/mips-o32-linux.xml.in
  > similarity index 100%
  > rename from gdb/syscalls/mips-o32-linux.xml
  > rename to gdb/syscalls/mips-o32-linux.xml.in
  > diff --git a/gdb/syscalls/ppc-linux.xml b/gdb/syscalls/ppc-linux.xml.in
  > similarity index 100%
  > rename from gdb/syscalls/ppc-linux.xml
  > rename to gdb/syscalls/ppc-linux.xml.in
  > diff --git a/gdb/syscalls/ppc64-linux.xml  
b/gdb/syscalls/ppc64-linux.xml.in
  > similarity index 100%
  > rename from gdb/syscalls/ppc64-linux.xml
  > rename to gdb/syscalls/ppc64-linux.xml.in
  > diff --git a/gdb/syscalls/s390-linux.xml b/gdb/syscalls/s390-linux.xml.in
  > similarity index 100%
  > rename from gdb/syscalls/s390-linux.xml
  > rename to gdb/syscalls/s390-linux.xml.in
  > diff --git a/gdb/syscalls/s390x-linux.xml  
b/gdb/syscalls/s390x-linux.xml.in
  > similarity index 100%
  > rename from gdb/syscalls/s390x-linux.xml
  > rename to gdb/syscalls/s390x-linux.xml.in
  > diff --git a/gdb/syscalls/sparc-linux.xml  
b/gdb/syscalls/sparc-linux.xml.in
  > similarity index 100%
  > rename from gdb/syscalls/sparc-linux.xml
  > rename to gdb/syscalls/sparc-linux.xml.in
  > diff --git a/gdb/syscalls/sparc64-linux.xml  
b/gdb/syscalls/sparc64-linux.xml.in
  > similarity index 100%
  > rename from gdb/syscalls/sparc64-linux.xml
  > rename to gdb/syscalls/sparc64-linux.xml.in
  > --
  > 2.4.3
  >

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v5 4/5] Include group information to xml syscall files.
  2016-05-17 17:28 [PATCH v5 4/5] Include group information to xml syscall files Doug Evans
@ 2016-05-20  2:30 ` Gabriel Krisman Bertazi
  2016-05-20  2:56   ` [PATCH v6 1/5] Implemement support for groups of syscalls in the xml-syscall interface Gabriel Krisman Bertazi
  2016-05-20  3:10   ` [RESEND PATCH v6 4/5] Include group information to xml syscall files Gabriel Krisman Bertazi
  0 siblings, 2 replies; 14+ messages in thread
From: Gabriel Krisman Bertazi @ 2016-05-20  2:30 UTC (permalink / raw)
  To: Doug Evans; +Cc: gdb-patches, palves, sergiodj

[-- Attachment #1: Type: text/plain, Size: 1212 bytes --]


Hey Doug,

> At the moment all group information comes from the defaults (I think).
> I'm assuming all one has to do for special cases is add the group(s)
> directly to the foo-xml.in file and that will work. Right?

Yes, it will (partially) work, but there is a limitation there.  You can
add groups for specific architectures directly in the <arch>.xml.in
file, but we don't allow appending more groups if there are some already
defined for that syscall in the linux-defaults file.  In other words,
appending more groups for a given syscall is not supported.  I didn't
see a need for that when I wrote it a while ago.

But this is a limitation, so I fixed that up in v6, which I'll post
soon after this email.

> IWBN to have some examples so people don't work from a default modus
> operandi
> of adding everything to linux-defaults.xml.in.

I didn't see the need nor have a good example for that now.. Do you have
a suggestion? Shouldn't we enforce it during review?

> btw, why is linux-defaults.xml.in a ".in" file?
> I'd expect it to just be linux-defaults.xml.

Because it won't be used directly, but serve as input to the xsl
pre-processor.

-- 
Gabriel Krisman Bertazi

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 818 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v6 2/5] Add support to catch groups of syscalls.
  2016-05-20  2:56   ` [PATCH v6 1/5] Implemement support for groups of syscalls in the xml-syscall interface Gabriel Krisman Bertazi
  2016-05-20  2:56     ` [PATCH v6 5/5] Update documentation on catching a group of related syscalls Gabriel Krisman Bertazi
@ 2016-05-20  2:56     ` Gabriel Krisman Bertazi
  2016-05-26 18:17       ` Sergio Durigan Junior
  2016-05-20  2:56     ` [PATCH v6 3/5] Add tests for catching groups of syscalls on supported architectures Gabriel Krisman Bertazi
  2016-05-26 18:22     ` [PATCH v6 1/5] Implemement support for groups of syscalls in the xml-syscall interface Sergio Durigan Junior
  3 siblings, 1 reply; 14+ messages in thread
From: Gabriel Krisman Bertazi @ 2016-05-20  2:56 UTC (permalink / raw)
  To: gdb-patches; +Cc: palves, sergiodj, dje, Gabriel Krisman Bertazi

This implements the catchpoint side.  While parsing 'catch syscall'
arguments, we verify if the argument is a syscall group and expand it to
a list of syscalls that are part of that group.

gdb/

	* 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.
---
 gdb/break-catch-syscall.c | 93 ++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 84 insertions(+), 9 deletions(-)

diff --git a/gdb/break-catch-syscall.c b/gdb/break-catch-syscall.c
index dbebdda..c564b8f 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;
 }
 
-- 
2.4.11

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v6 3/5] Add tests for catching groups of syscalls on supported architectures.
  2016-05-20  2:56   ` [PATCH v6 1/5] Implemement support for groups of syscalls in the xml-syscall interface Gabriel Krisman Bertazi
  2016-05-20  2:56     ` [PATCH v6 5/5] Update documentation on catching a group of related syscalls Gabriel Krisman Bertazi
  2016-05-20  2:56     ` [PATCH v6 2/5] Add support to catch groups of syscalls Gabriel Krisman Bertazi
@ 2016-05-20  2:56     ` Gabriel Krisman Bertazi
  2016-05-26 18:18       ` Sergio Durigan Junior
  2016-05-26 18:22     ` [PATCH v6 1/5] Implemement support for groups of syscalls in the xml-syscall interface Sergio Durigan Junior
  3 siblings, 1 reply; 14+ messages in thread
From: Gabriel Krisman Bertazi @ 2016-05-20  2:56 UTC (permalink / raw)
  To: gdb-patches; +Cc: palves, sergiodj, dje, Gabriel Krisman Bertazi

gdb/testsuite/

	* gdb.base/catch-syscall.exp (do_syscall_tests): Add call
	to test_catch_syscall_group.
	(test_catch_syscall_group): New.
---
 gdb/testsuite/gdb.base/catch-syscall.exp | 39 ++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/gdb/testsuite/gdb.base/catch-syscall.exp b/gdb/testsuite/gdb.base/catch-syscall.exp
index 5679000..e55bd70 100644
--- a/gdb/testsuite/gdb.base/catch-syscall.exp
+++ b/gdb/testsuite/gdb.base/catch-syscall.exp
@@ -370,6 +370,42 @@ proc test_catch_syscall_fail_nodatadir {} {
     }
 }
 
+proc test_catch_syscall_group {} {
+    global decimal
+
+    set sysnum "\\\[${decimal}\\\]"
+
+    gdb_test "catch syscall g:process" \
+	"Catchpoint $decimal \\(syscalls (\'(clone|fork|execve|exit)\' $sysnum)+.*" \
+	"set catchpoint on a group of syscalls"
+
+    gdb_test "catch syscall group:process read" \
+	"Catchpoint $decimal \\(syscalls (\'(clone|fork|execve|exit)\' $sysnum)+.*read.*\\)" \
+	"set catchpoints on a group of syscalls and on a single syscall"
+
+    gdb_test "catch syscall group:" \
+	"Unknown syscall group ''\." \
+	"set catchpoints on an invalid group"
+
+    gdb_test "catch syscall g:junk" \
+	"Unknown syscall group 'junk'\." \
+	"set catchpoints on an unknown group."
+
+    gdb_test "complete catch syscall g:proc" \
+	"catch syscall g:process" \
+	"complete catch syscall group with 'g:' prefix"
+
+    gdb_test "complete catch syscall group:proc" \
+	"catch syscall group:process" \
+	"complete catch syscall group with 'group:' prefix"
+
+    gdb_test_sequence "complete catch syscall g" \
+	"complete catch syscall group suggests 'group:' prefix" {
+	    "group:descriptor" "group:file" "group:ipc" "group:memory"
+	    "group:network" "group:process" "group:signal"
+	}
+}
+
 proc do_syscall_tests {} {
     # NOTE: We don't have to point gdb at the correct data-directory.
     # For the build tree that is handled by INTERNAL_GDBFLAGS.
@@ -420,6 +456,9 @@ proc do_syscall_tests {} {
     # Testing if the 'catch syscall' command works when switching to
     # different architectures on-the-fly (PR gdb/10737).
     if [runto_main] then { test_catch_syscall_multi_arch }
+
+    # Testing the 'catch' syscall command for a group of syscalls.
+    if [runto_main] then { test_catch_syscall_group }
 }
 
 proc test_catch_syscall_without_args_noxml {} {
-- 
2.4.11

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v6 5/5] Update documentation on catching a group of related syscalls.
  2016-05-20  2:56   ` [PATCH v6 1/5] Implemement support for groups of syscalls in the xml-syscall interface Gabriel Krisman Bertazi
@ 2016-05-20  2:56     ` Gabriel Krisman Bertazi
  2016-05-20  5:48       ` Eli Zaretskii
  2016-05-20  2:56     ` [PATCH v6 2/5] Add support to catch groups of syscalls Gabriel Krisman Bertazi
                       ` (2 subsequent siblings)
  3 siblings, 1 reply; 14+ messages in thread
From: Gabriel Krisman Bertazi @ 2016-05-20  2:56 UTC (permalink / raw)
  To: gdb-patches; +Cc: palves, sergiodj, dje, Gabriel Krisman Bertazi

gdb/

	* break-catch-syscall.c (_initialize_breakpoint): Update catch
	syscall command documentation.
	* NEWS: Include section about catching groups of syscalls.

gdb/doc/

	* gdb.texinfo (Set Catchpoints): Add 'group' argument to catch
	syscall.
---
 gdb/NEWS                  |  5 +++++
 gdb/break-catch-syscall.c | 10 +++++-----
 gdb/doc/gdb.texinfo       | 28 +++++++++++++++++++++++++++-
 3 files changed, 37 insertions(+), 6 deletions(-)

diff --git a/gdb/NEWS b/gdb/NEWS
index 3e8e7a1..5fa8500 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -32,6 +32,11 @@
   language.  See https://www.rust-lang.org/ for more information about
   Rust.
 
+* 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 c564b8f..602aba4 100644
--- a/gdb/break-catch-syscall.c
+++ b/gdb/break-catch-syscall.c
@@ -724,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/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 42d1a63..da98fdb 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,
-- 
2.4.11

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v6 1/5] Implemement support for groups of syscalls in the xml-syscall interface.
  2016-05-20  2:30 ` Gabriel Krisman Bertazi
@ 2016-05-20  2:56   ` Gabriel Krisman Bertazi
  2016-05-20  2:56     ` [PATCH v6 5/5] Update documentation on catching a group of related syscalls Gabriel Krisman Bertazi
                       ` (3 more replies)
  2016-05-20  3:10   ` [RESEND PATCH v6 4/5] Include group information to xml syscall files Gabriel Krisman Bertazi
  1 sibling, 4 replies; 14+ messages in thread
From: Gabriel Krisman Bertazi @ 2016-05-20  2:56 UTC (permalink / raw)
  To: gdb-patches; +Cc: palves, sergiodj, dje, Gabriel Krisman Bertazi

This is done by maintaining a list of syscall_group_desc for each
syscall group inside the syscalls_info structure.  Inside each
syscall_group_desc we have a vector of pointers to the syscalls that are
part of that group.

gdb/

	* syscalls/gdb-syscalls.dtd: Include group attribute to the
	syscall element.
	* 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.
---
 gdb/syscalls/gdb-syscalls.dtd |   3 +-
 gdb/xml-syscall.c             | 234 +++++++++++++++++++++++++++++++++++++++++-
 gdb/xml-syscall.h             |  16 +++
 3 files changed, 250 insertions(+), 3 deletions(-)

diff --git a/gdb/syscalls/gdb-syscalls.dtd b/gdb/syscalls/gdb-syscalls.dtd
index 3deda12..de47d4d 100644
--- a/gdb/syscalls/gdb-syscalls.dtd
+++ b/gdb/syscalls/gdb-syscalls.dtd
@@ -11,4 +11,5 @@
 <!ELEMENT syscall		EMPTY>
 <!ATTLIST syscall
 	name			CDATA	#REQUIRED
-	number			CDATA	#REQUIRED>
+	number			CDATA	#REQUIRED
+	groups			CDATA	#IMPLIED>
diff --git a/gdb/xml-syscall.c b/gdb/xml-syscall.c
index ceaf750..c7c307e 100644
--- a/gdb/xml-syscall.c
+++ b/gdb/xml-syscall.c
@@ -77,6 +77,20 @@ get_syscall_names (struct gdbarch *gdbarch)
   return NULL;
 }
 
+struct syscall *
+get_syscalls_by_group (struct gdbarch *gdbarch, const char *group)
+{
+  syscall_warn_user ();
+  return NULL;
+}
+
+const char **
+get_syscall_group_names (struct gdbarch *gdbarch)
+{
+  syscall_warn_user ();
+  return NULL;
+}
+
 #else /* ! HAVE_LIBEXPAT */
 
 /* Structure which describes a syscall.  */
@@ -92,6 +106,19 @@ typedef struct syscall_desc
 } *syscall_desc_p;
 DEF_VEC_P(syscall_desc_p);
 
+/* Structure of a syscall group.  */
+typedef struct syscall_group_desc
+{
+  /* The group name.  */
+
+  char *name;
+
+  /* The syscalls that are part of the group.  */
+
+  VEC(syscall_desc_p) *syscalls;
+} *syscall_group_desc_p;
+DEF_VEC_P(syscall_group_desc_p);
+
 /* Structure that represents syscalls information.  */
 struct syscalls_info
 {
@@ -99,6 +126,10 @@ struct syscalls_info
 
   VEC(syscall_desc_p) *syscalls;
 
+  /* The syscall groups.  */
+
+  VEC(syscall_group_desc_p) *groups;
+
   /* Variable that will hold the last known data-directory.  This is
      useful to know whether we should re-read the XML info for the
      target.  */
@@ -126,11 +157,21 @@ syscalls_info_free_syscalls_desc (struct syscall_desc *sd)
   xfree (sd->name);
 }
 
+/* Free syscall_group_desc members but not the structure itself.  */
+
+static void
+syscalls_info_free_syscall_group_desc (struct syscall_group_desc *sd)
+{
+  VEC_free (syscall_desc_p, sd->syscalls);
+  xfree (sd->name);
+}
+
 static void
 free_syscalls_info (void *arg)
 {
   struct syscalls_info *syscalls_info = (struct syscalls_info *) arg;
   struct syscall_desc *sysdesc;
+  struct syscall_group_desc *groupdesc;
   int i;
 
   xfree (syscalls_info->my_gdb_datadir);
@@ -144,6 +185,17 @@ free_syscalls_info (void *arg)
       VEC_free (syscall_desc_p, syscalls_info->syscalls);
     }
 
+  if (syscalls_info->groups != NULL)
+    {
+      for (i = 0;
+	   VEC_iterate (syscall_group_desc_p,
+			syscalls_info->groups, i, groupdesc);
+	   i++)
+	syscalls_info_free_syscall_group_desc (groupdesc);
+
+      VEC_free (syscall_group_desc_p, syscalls_info->groups);
+    }
+
   xfree (syscalls_info);
 }
 
@@ -153,16 +205,73 @@ make_cleanup_free_syscalls_info (struct syscalls_info *syscalls_info)
   return make_cleanup (free_syscalls_info, syscalls_info);
 }
 
+/* Create a new syscall group.  Return pointer to the
+   syscall_group_desc structure that represents the new group.  */
+
+static struct syscall_group_desc *
+syscall_group_create_syscall_group_desc (struct syscalls_info *syscalls_info,
+					 const char *group)
+{
+  struct syscall_group_desc *groupdesc = XCNEW (struct syscall_group_desc);
+
+  groupdesc->name = xstrdup (group);
+
+  VEC_safe_push (syscall_group_desc_p, syscalls_info->groups, groupdesc);
+
+  return groupdesc;
+}
+
+/* Add a syscall to the group.  If group doesn't exist, create it.  */
+
+static void
+syscall_group_add_syscall (struct syscalls_info *syscalls_info,
+			   struct syscall_desc *syscall,
+			   const char *group)
+{
+  struct syscall_group_desc *groupdesc;
+  int i;
+
+  /* Search for an existing group.  */
+  for (i = 0;
+       VEC_iterate (syscall_group_desc_p, syscalls_info->groups, i, groupdesc);
+       i++)
+    {
+      if (strcmp (groupdesc->name, group) == 0)
+	break;
+    }
+
+  if (groupdesc == NULL)
+    {
+      /* No group was found with this name.  We must create a new
+	 one.  */
+      groupdesc = syscall_group_create_syscall_group_desc (syscalls_info,
+							   group);
+    }
+
+  VEC_safe_push (syscall_desc_p, groupdesc->syscalls, syscall);
+}
+
 static void
 syscall_create_syscall_desc (struct syscalls_info *syscalls_info,
-                             const char *name, int number)
+			     const char *name, int number,
+			     char *groups)
 {
   struct syscall_desc *sysdesc = XCNEW (struct syscall_desc);
+  char *group;
 
   sysdesc->name = xstrdup (name);
   sysdesc->number = number;
 
   VEC_safe_push (syscall_desc_p, syscalls_info->syscalls, sysdesc);
+
+  /*  Add syscall to its groups.  */
+  if (groups != NULL)
+    {
+      for (group = strtok (groups, ",");
+	   group != NULL;
+	   group = strtok (NULL, ","))
+	syscall_group_add_syscall (syscalls_info, sysdesc, group);
+    }
 }
 
 /* Handle the start of a <syscall> element.  */
@@ -177,6 +286,7 @@ syscall_start_syscall (struct gdb_xml_parser *parser,
   /* syscall info.  */
   char *name = NULL;
   int number = 0;
+  char *groups = NULL;
 
   len = VEC_length (gdb_xml_value_s, attributes);
 
@@ -186,13 +296,15 @@ syscall_start_syscall (struct gdb_xml_parser *parser,
         name = (char *) attrs[i].value;
       else if (strcmp (attrs[i].name, "number") == 0)
         number = * (ULONGEST *) attrs[i].value;
+      else if (strcmp (attrs[i].name, "groups") == 0)
+        groups = (char *) attrs[i].value;
       else
         internal_error (__FILE__, __LINE__,
                         _("Unknown attribute name '%s'."), attrs[i].name);
     }
 
   gdb_assert (name);
-  syscall_create_syscall_desc (data->syscalls_info, name, number);
+  syscall_create_syscall_desc (data->syscalls_info, name, number, groups);
 }
 
 
@@ -200,6 +312,7 @@ syscall_start_syscall (struct gdb_xml_parser *parser,
 static const struct gdb_xml_attribute syscall_attr[] = {
   { "number", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL },
   { "name", GDB_XML_AF_NONE, NULL, NULL },
+  { "groups", GDB_XML_AF_OPTIONAL, NULL, NULL },
   { NULL, GDB_XML_AF_NONE, NULL, NULL }
 };
 
@@ -321,6 +434,34 @@ init_syscalls_info (struct gdbarch *gdbarch)
   set_gdbarch_syscalls_info (gdbarch, syscalls_info);
 }
 
+/* Search for a syscall group by its name.  Return syscall_group_desc
+   structure for the group if found or NULL otherwise.  */
+
+static struct syscall_group_desc *
+syscall_group_get_group_by_name (const struct syscalls_info *syscalls_info,
+				 const char *group)
+{
+  struct syscall_group_desc *groupdesc;
+  int i;
+
+  if (syscalls_info == NULL)
+    return NULL;
+
+  if (group == NULL)
+    return NULL;
+
+   /* Search for existing group.  */
+  for (i = 0;
+       VEC_iterate (syscall_group_desc_p, syscalls_info->groups, i, groupdesc);
+       i++)
+    {
+      if (strcmp (groupdesc->name, group) == 0)
+	return groupdesc;
+    }
+
+  return NULL;
+}
+
 static int
 xml_get_syscall_number (struct gdbarch *gdbarch,
                         const char *syscall_name)
@@ -388,6 +529,75 @@ xml_list_of_syscalls (struct gdbarch *gdbarch)
   return names;
 }
 
+/* Iterate over the syscall_group_desc element to return a list of
+   syscalls that are part of the given group, terminated by an empty
+   element.  If the syscall group doesn't exist, return NULL.  */
+
+static struct syscall *
+xml_list_syscalls_by_group (struct gdbarch *gdbarch, const char *group)
+{
+  struct syscalls_info *syscalls_info = gdbarch_syscalls_info (gdbarch);
+  struct syscall_group_desc *groupdesc;
+  struct syscall_desc *sysdesc;
+  struct syscall *syscalls = NULL;
+  int nsyscalls;
+  int i;
+
+  if (syscalls_info == NULL)
+    return NULL;
+
+  groupdesc = syscall_group_get_group_by_name (syscalls_info, group);
+  if (groupdesc == NULL)
+    return NULL;
+
+  nsyscalls = VEC_length (syscall_desc_p, groupdesc->syscalls);
+  syscalls = (struct syscall*) xmalloc ((nsyscalls + 1)
+					* sizeof (struct syscall));
+
+  for (i = 0;
+       VEC_iterate (syscall_desc_p, groupdesc->syscalls, i, sysdesc);
+       i++)
+    {
+      syscalls[i].name = sysdesc->name;
+      syscalls[i].number = sysdesc->number;
+    }
+
+  /* Add final element marker.  */
+  syscalls[i].name = NULL;
+  syscalls[i].number = 0;
+
+  return syscalls;
+}
+
+/* Return a NULL terminated list of syscall groups or an empty list, if
+   no syscall group is available.  Return NULL, if there is no syscall
+   information available.  */
+
+static const char **
+xml_list_of_groups (struct gdbarch *gdbarch)
+{
+  struct syscalls_info *syscalls_info = gdbarch_syscalls_info (gdbarch);
+  struct syscall_group_desc *groupdesc;
+  const char **names = NULL;
+  int i;
+  int ngroups;
+
+  if (syscalls_info == NULL)
+    return NULL;
+
+  ngroups = VEC_length (syscall_group_desc_p, syscalls_info->groups);
+  names = (const char**) xmalloc ((ngroups + 1) * sizeof (char *));
+
+  for (i = 0;
+       VEC_iterate (syscall_group_desc_p, syscalls_info->groups, i, groupdesc);
+       i++)
+    names[i] = groupdesc->name;
+
+  names[i] = NULL;
+
+  return names;
+}
+
 void
 set_xml_syscall_file_name (struct gdbarch *gdbarch, const char *name)
 {
@@ -422,4 +632,24 @@ get_syscall_names (struct gdbarch *gdbarch)
   return xml_list_of_syscalls (gdbarch);
 }
 
+/* See comment in xml-syscall.h.  */
+
+struct syscall *
+get_syscalls_by_group (struct gdbarch *gdbarch, const char *group)
+{
+  init_syscalls_info (gdbarch);
+
+  return xml_list_syscalls_by_group (gdbarch, group);
+}
+
+/* See comment in xml-syscall.h.  */
+
+const char **
+get_syscall_group_names (struct gdbarch *gdbarch)
+{
+  init_syscalls_info (gdbarch);
+
+  return xml_list_of_groups (gdbarch);
+}
+
 #endif /* ! HAVE_LIBEXPAT */
diff --git a/gdb/xml-syscall.h b/gdb/xml-syscall.h
index b0dd401..407613e 100644
--- a/gdb/xml-syscall.h
+++ b/gdb/xml-syscall.h
@@ -50,4 +50,20 @@ void get_syscall_by_name (struct gdbarch *gdbarch,
 
 const char **get_syscall_names (struct gdbarch *gdbarch);
 
+/* Function used to retrieve the list of syscalls of a given group in
+   the system.  Return a list of syscalls that are element of the
+   group, terminated by an empty element. The list is malloc'ed
+   and must be freed by the caller.  If group doesn't exist, return
+   NULL.  */
+
+struct syscall *get_syscalls_by_group (struct gdbarch *gdbarch,
+				       const char *group);
+
+/* Function used to retrieve the list of syscall groups in the system.
+   Return an array of strings terminated by a NULL element.  The list
+   must be freed by the caller.  Return NULL if there is no syscall
+   information available.  */
+
+const char **get_syscall_group_names (struct gdbarch *gdbarch);
+
 #endif /* XML_SYSCALL_H */
-- 
2.4.11

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [RESEND PATCH v6 4/5] Include group information to xml syscall files.
  2016-05-20  2:30 ` Gabriel Krisman Bertazi
  2016-05-20  2:56   ` [PATCH v6 1/5] Implemement support for groups of syscalls in the xml-syscall interface Gabriel Krisman Bertazi
@ 2016-05-20  3:10   ` Gabriel Krisman Bertazi
  2016-05-26 18:14     ` Sergio Durigan Junior
  2016-05-27 10:18     ` Pedro Alves
  1 sibling, 2 replies; 14+ messages in thread
From: Gabriel Krisman Bertazi @ 2016-05-20  3:10 UTC (permalink / raw)
  To: gdb-patches; +Cc: palves, sergiodj, dje, Gabriel Krisman Bertazi

Patch 4/5 bounced due to size. Resending with -M to detect renames...

Sorry for duplicates..

-- >8 --

We maintain linux-defaults.xml.in, a template file to hold generic group
information.  It is used by the XSL script that parses the architecture
specific files to generate the final xml files, which are actually
installed and loaded by GDB.  The script is not run during the normal
build process, only when building in maintainer mode.

gdb/

	* data-directory/Makefile.in: Generate syscall xml when building
	in maintainer mode.
	* configure.ac: Include dependency for xsltproc when building
	in maintainer-mode.
	* syscalls/apply-defaults.xsl: New file.
	* syscalls/linux-defaults.xml.in: New file.
	* 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.
---
 gdb/configure.ac                                   |  10 +
 gdb/data-directory/Makefile.in                     |   4 +
 .../{aarch64-linux.xml => aarch64-linux.xml.in}    |   0
 .../{amd64-linux.xml => amd64-linux.xml.in}        |   0
 gdb/syscalls/apply-defaults.xsl                    |  31 +++
 gdb/syscalls/{arm-linux.xml => arm-linux.xml.in}   |   0
 gdb/syscalls/{bfin-linux.xml => bfin-linux.xml.in} |   0
 gdb/syscalls/{i386-linux.xml => i386-linux.xml.in} |   0
 gdb/syscalls/linux-defaults.xml.in                 | 243 +++++++++++++++++++++
 .../{mips-n32-linux.xml => mips-n32-linux.xml.in}  |   0
 .../{mips-n64-linux.xml => mips-n64-linux.xml.in}  |   0
 .../{mips-o32-linux.xml => mips-o32-linux.xml.in}  |   0
 gdb/syscalls/{ppc-linux.xml => ppc-linux.xml.in}   |   0
 .../{ppc64-linux.xml => ppc64-linux.xml.in}        |   0
 gdb/syscalls/{s390-linux.xml => s390-linux.xml.in} |   0
 .../{s390x-linux.xml => s390x-linux.xml.in}        |   0
 .../{sparc-linux.xml => sparc-linux.xml.in}        |   0
 .../{sparc64-linux.xml => sparc64-linux.xml.in}    |   0
 18 files changed, 288 insertions(+)
 rename gdb/syscalls/{aarch64-linux.xml => aarch64-linux.xml.in} (100%)
 rename gdb/syscalls/{amd64-linux.xml => amd64-linux.xml.in} (100%)
 create mode 100644 gdb/syscalls/apply-defaults.xsl
 rename gdb/syscalls/{arm-linux.xml => arm-linux.xml.in} (100%)
 rename gdb/syscalls/{bfin-linux.xml => bfin-linux.xml.in} (100%)
 rename gdb/syscalls/{i386-linux.xml => i386-linux.xml.in} (100%)
 create mode 100644 gdb/syscalls/linux-defaults.xml.in
 rename gdb/syscalls/{mips-n32-linux.xml => mips-n32-linux.xml.in} (100%)
 rename gdb/syscalls/{mips-n64-linux.xml => mips-n64-linux.xml.in} (100%)
 rename gdb/syscalls/{mips-o32-linux.xml => mips-o32-linux.xml.in} (100%)
 rename gdb/syscalls/{ppc-linux.xml => ppc-linux.xml.in} (100%)
 rename gdb/syscalls/{ppc64-linux.xml => ppc64-linux.xml.in} (100%)
 rename gdb/syscalls/{s390-linux.xml => s390-linux.xml.in} (100%)
 rename gdb/syscalls/{s390x-linux.xml => s390x-linux.xml.in} (100%)
 rename gdb/syscalls/{sparc-linux.xml => sparc-linux.xml.in} (100%)
 rename gdb/syscalls/{sparc64-linux.xml => sparc64-linux.xml.in} (100%)

diff --git a/gdb/configure.ac b/gdb/configure.ac
index 4364c02..4b57175 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -2338,6 +2338,16 @@ if test "${nativefile}" != ""; then
 fi
 AC_SUBST(GDB_NM_FILE)
 
+dnl Add dependency for xsltproc if building with maintainer-mode enabled.
+if test "x$USE_MAINTAINER_MODE" = xyes; then
+  AC_PATH_PROGS(XSLTPROC, xsltproc, missing)
+  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 c05f379..9be925a 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@
@@ -162,6 +163,9 @@ FLAGS_TO_PASS = \
 .PHONY: all
 all: stamp-syscalls stamp-python stamp-guile stamp-system-gdbinit
 
+@MAINTAINER_MODE_TRUE@%.xml: %.xml.in apply-defaults.xsl linux-defaults.xml.in
+@MAINTAINER_MODE_TRUE@	$(XSLTPROC) -o $(SYSCALLS_SRCDIR)/$@ $(SYSCALLS_SRCDIR)/apply-defaults.xsl $<;\
+
 # For portability's sake, we need to handle systems that don't have
 # symbolic links.
 stamp-syscalls: Makefile $(SYSCALLS_FILES)
diff --git a/gdb/syscalls/aarch64-linux.xml b/gdb/syscalls/aarch64-linux.xml.in
similarity index 100%
rename from gdb/syscalls/aarch64-linux.xml
rename to gdb/syscalls/aarch64-linux.xml.in
diff --git a/gdb/syscalls/amd64-linux.xml b/gdb/syscalls/amd64-linux.xml.in
similarity index 100%
rename from gdb/syscalls/amd64-linux.xml
rename to gdb/syscalls/amd64-linux.xml.in
diff --git a/gdb/syscalls/apply-defaults.xsl b/gdb/syscalls/apply-defaults.xsl
new file mode 100644
index 0000000..fb9b8f1
--- /dev/null
+++ b/gdb/syscalls/apply-defaults.xsl
@@ -0,0 +1,31 @@
+<!-- Copyright (C) 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.  -->
+
+<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.in
similarity index 100%
rename from gdb/syscalls/arm-linux.xml
rename to gdb/syscalls/arm-linux.xml.in
diff --git a/gdb/syscalls/bfin-linux.xml b/gdb/syscalls/bfin-linux.xml.in
similarity index 100%
rename from gdb/syscalls/bfin-linux.xml
rename to gdb/syscalls/bfin-linux.xml.in
diff --git a/gdb/syscalls/i386-linux.xml b/gdb/syscalls/i386-linux.xml.in
similarity index 100%
rename from gdb/syscalls/i386-linux.xml
rename to gdb/syscalls/i386-linux.xml.in
diff --git a/gdb/syscalls/linux-defaults.xml.in b/gdb/syscalls/linux-defaults.xml.in
new file mode 100644
index 0000000..1c4e187
--- /dev/null
+++ b/gdb/syscalls/linux-defaults.xml.in
@@ -0,0 +1,243 @@
+<?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.  -->
+
+<!-- The group field information was based on strace.  -->
+
+<syscalls_defaults>
+  <syscall name="read" groups="descriptor"/>
+  <syscall name="write" groups="descriptor"/>
+  <syscall name="open" groups="descriptor,file"/>
+  <syscall name="close" groups="descriptor"/>
+  <syscall name="stat" groups="file"/>
+  <syscall name="fstat" groups="descriptor"/>
+  <syscall name="lstat" groups="file"/>
+  <syscall name="poll" groups="descriptor"/>
+  <syscall name="lseek" groups="descriptor"/>
+  <syscall name="mmap" groups="descriptor,memory"/>
+  <syscall name="mprotect" groups="memory"/>
+  <syscall name="munmap" groups="memory"/>
+  <syscall name="brk" groups="memory"/>
+  <syscall name="rt_sigaction" groups="signal"/>
+  <syscall name="rt_sigprocmask" groups="signal"/>
+  <syscall name="rt_sigreturn" groups="signal"/>
+  <syscall name="ioctl" groups="descriptor"/>
+  <syscall name="pread64" groups="descriptor"/>
+  <syscall name="pwrite64" groups="descriptor"/>
+  <syscall name="readv" groups="descriptor"/>
+  <syscall name="writev" groups="descriptor"/>
+  <syscall name="access" groups="file"/>
+  <syscall name="pipe" groups="descriptor"/>
+  <syscall name="select" groups="descriptor"/>
+  <syscall name="mremap" groups="memory"/>
+  <syscall name="msync" groups="memory"/>
+  <syscall name="mincore" groups="memory"/>
+  <syscall name="madvise" groups="memory"/>
+  <syscall name="shmget" groups="ipc"/>
+  <syscall name="shmat" groups="ipc,memory"/>
+  <syscall name="shmctl" groups="ipc"/>
+  <syscall name="dup" groups="descriptor"/>
+  <syscall name="dup2" groups="descriptor"/>
+  <syscall name="pause" groups="signal"/>
+  <syscall name="sendfile" groups="descriptor,network"/>
+  <syscall name="socket" groups="network"/>
+  <syscall name="connect" groups="network"/>
+  <syscall name="accept" groups="network"/>
+  <syscall name="sendto" groups="network"/>
+  <syscall name="recvfrom" groups="network"/>
+  <syscall name="sendmsg" groups="network"/>
+  <syscall name="recvmsg" groups="network"/>
+  <syscall name="shutdown" groups="network"/>
+  <syscall name="bind" groups="network"/>
+  <syscall name="listen" groups="network"/>
+  <syscall name="getsockname" groups="network"/>
+  <syscall name="getpeername" groups="network"/>
+  <syscall name="socketpair" groups="network"/>
+  <syscall name="setsockopt" groups="network"/>
+  <syscall name="getsockopt" groups="network"/>
+  <syscall name="clone" groups="process"/>
+  <syscall name="fork" groups="process"/>
+  <syscall name="vfork" groups="process"/>
+  <syscall name="execve" groups="file,process"/>
+  <syscall name="execv" groups="file,process"/>
+  <syscall name="exit" groups="process"/>
+  <syscall name="wait4" groups="process"/>
+  <syscall name="kill" groups="signal"/>
+  <syscall name="semget" groups="ipc"/>
+  <syscall name="semop" groups="ipc"/>
+  <syscall name="semctl" groups="ipc"/>
+  <syscall name="shmdt" groups="ipc,memory"/>
+  <syscall name="msgget" groups="ipc"/>
+  <syscall name="msgsnd" groups="ipc"/>
+  <syscall name="msgrcv" groups="ipc"/>
+  <syscall name="msgctl" groups="ipc"/>
+  <syscall name="fcntl" groups="descriptor"/>
+  <syscall name="flock" groups="descriptor"/>
+  <syscall name="fsync" groups="descriptor"/>
+  <syscall name="fdatasync" groups="descriptor"/>
+  <syscall name="truncate" groups="file"/>
+  <syscall name="ftruncate" groups="descriptor"/>
+  <syscall name="getdents" groups="descriptor"/>
+  <syscall name="getcwd" groups="file"/>
+  <syscall name="chdir" groups="file"/>
+  <syscall name="fchdir" groups="descriptor"/>
+  <syscall name="rename" groups="file"/>
+  <syscall name="mkdir" groups="file"/>
+  <syscall name="rmdir" groups="file"/>
+  <syscall name="creat" groups="descriptor,file"/>
+  <syscall name="link" groups="file"/>
+  <syscall name="unlink" groups="file"/>
+  <syscall name="symlink" groups="file"/>
+  <syscall name="readlink" groups="file"/>
+  <syscall name="chmod" groups="file"/>
+  <syscall name="fchmod" groups="descriptor"/>
+  <syscall name="chown" groups="file"/>
+  <syscall name="fchown" groups="descriptor"/>
+  <syscall name="lchown" groups="file"/>
+  <syscall name="rt_sigpending" groups="signal"/>
+  <syscall name="rt_sigtimedwait" groups="signal"/>
+  <syscall name="rt_sigqueueinfo" groups="signal"/>
+  <syscall name="rt_sigsuspend" groups="signal"/>
+  <syscall name="sigaltstack" groups="signal"/>
+  <syscall name="utime" groups="file"/>
+  <syscall name="mknod" groups="file"/>
+  <syscall name="uselib" groups="file"/>
+  <syscall name="statfs" groups="file"/>
+  <syscall name="fstatfs" groups="descriptor"/>
+  <syscall name="mlock" groups="memory"/>
+  <syscall name="munlock" groups="memory"/>
+  <syscall name="mlockall" groups="memory"/>
+  <syscall name="munlockall" groups="memory"/>
+  <syscall name="pivot_root" groups="file"/>
+  <syscall name="arch_prctl" groups="process"/>
+  <syscall name="chroot" groups="file"/>
+  <syscall name="acct" groups="file"/>
+  <syscall name="mount" groups="file"/>
+  <syscall name="umount" groups="file"/>
+  <syscall name="umount2" groups="file"/>
+  <syscall name="swapon" groups="file"/>
+  <syscall name="swapoff" groups="file"/>
+  <syscall name="quotactl" groups="file"/>
+  <syscall name="readahead" groups="descriptor"/>
+  <syscall name="setxattr" groups="file"/>
+  <syscall name="lsetxattr" groups="file"/>
+  <syscall name="fsetxattr" groups="descriptor"/>
+  <syscall name="getxattr" groups="file"/>
+  <syscall name="lgetxattr" groups="file"/>
+  <syscall name="fgetxattr" groups="descriptor"/>
+  <syscall name="listxattr" groups="file"/>
+  <syscall name="llistxattr" groups="file"/>
+  <syscall name="flistxattr" groups="descriptor"/>
+  <syscall name="removexattr" groups="file"/>
+  <syscall name="lremovexattr" groups="file"/>
+  <syscall name="fremovexattr" groups="descriptor"/>
+  <syscall name="tkill" groups="signal"/>
+  <syscall name="epoll_create" groups="descriptor"/>
+  <syscall name="remap_file_pages" groups="memory"/>
+  <syscall name="getdents64" groups="descriptor"/>
+  <syscall name="semtimedop" groups="ipc"/>
+  <syscall name="fadvise64" groups="descriptor"/>
+  <syscall name="exit_group" groups="process"/>
+  <syscall name="epoll_wait" groups="descriptor"/>
+  <syscall name="epoll_ctl" groups="descriptor"/>
+  <syscall name="tgkill" groups="signal"/>
+  <syscall name="utimes" groups="file"/>
+  <syscall name="mbind" groups="memory"/>
+  <syscall name="set_mempolicy" groups="memory"/>
+  <syscall name="get_mempolicy" groups="memory"/>
+  <syscall name="waitid" groups="process"/>
+  <syscall name="inotify_init" groups="descriptor"/>
+  <syscall name="inotify_add_watch" groups="descriptor"/>
+  <syscall name="inotify_rm_watch" groups="descriptor"/>
+  <syscall name="migrate_pages" groups="memory"/>
+  <syscall name="openat" groups="descriptor,file"/>
+  <syscall name="mkdirat" groups="descriptor,file"/>
+  <syscall name="mknodat" groups="descriptor,file"/>
+  <syscall name="fchownat" groups="descriptor,file"/>
+  <syscall name="futimesat" groups="descriptor,file"/>
+  <syscall name="newfstatat" groups="descriptor,file"/>
+  <syscall name="unlinkat" groups="descriptor,file"/>
+  <syscall name="renameat" groups="descriptor,file"/>
+  <syscall name="linkat" groups="descriptor,file"/>
+  <syscall name="symlinkat" groups="descriptor,file"/>
+  <syscall name="readlinkat" groups="descriptor,file"/>
+  <syscall name="fchmodat" groups="descriptor,file"/>
+  <syscall name="faccessat" groups="descriptor,file"/>
+  <syscall name="pselect6" groups="descriptor"/>
+  <syscall name="ppoll" groups="descriptor"/>
+  <syscall name="unshare" groups="process"/>
+  <syscall name="splice" groups="descriptor"/>
+  <syscall name="tee" groups="descriptor"/>
+  <syscall name="sync_file_range" groups="descriptor"/>
+  <syscall name="vmsplice" groups="descriptor"/>
+  <syscall name="move_pages" groups="memory"/>
+  <syscall name="utimensat" groups="descriptor,file"/>
+  <syscall name="epoll_pwait" groups="descriptor"/>
+  <syscall name="signalfd" groups="descriptor,signal"/>
+  <syscall name="timerfd_create" groups="descriptor"/>
+  <syscall name="eventfd" groups="descriptor"/>
+  <syscall name="fallocate" groups="descriptor"/>
+  <syscall name="timerfd_settime" groups="descriptor"/>
+  <syscall name="timerfd_gettime" groups="descriptor"/>
+  <syscall name="accept4" groups="network"/>
+  <syscall name="signalfd4" groups="descriptor,signal"/>
+  <syscall name="eventfd2" groups="descriptor"/>
+  <syscall name="epoll_create1" groups="descriptor"/>
+  <syscall name="dup3" groups="descriptor"/>
+  <syscall name="pipe2" groups="descriptor"/>
+  <syscall name="inotify_init1" groups="descriptor"/>
+  <syscall name="preadv" groups="descriptor"/>
+  <syscall name="pwritev" groups="descriptor"/>
+  <syscall name="send" groups="network"/>
+  <syscall name="recv" groups="network"/>
+  <syscall name="statfs64" groups="file"/>
+  <syscall name="fstatfs64" groups="descriptor"/>
+  <syscall name="sendfile64" groups="descriptor,network"/>
+  <syscall name="rt_tgsigqueueinfo" groups="process,signal"/>
+  <syscall name="perf_event_open" groups="descriptor"/>
+  <syscall name="recvmmsg" groups="network"/>
+  <syscall name="fanotify_init" groups="descriptor"/>
+  <syscall name="fanotify_mark" groups="descriptor,file"/>
+  <syscall name="fchown32" groups="descriptor"/>
+  <syscall name="chown32" groups="file"/>
+  <syscall name="fcntl64" groups="descriptor"/>
+  <syscall name="mmap2" groups="descriptor,memory"/>
+  <syscall name="truncate64" groups="file"/>
+  <syscall name="ftruncate64" groups="descriptor"/>
+  <syscall name="stat64" groups="file"/>
+  <syscall name="lstat64" groups="file"/>
+  <syscall name="fstat64" groups="descriptor"/>
+  <syscall name="lchown32" groups="file"/>
+  <syscall name="name_to_handle_at" groups="descriptor,file"/>
+  <syscall name="open_by_handle_at" groups="descriptor"/>
+  <syscall name="_llseek" groups="descriptor"/>
+  <syscall name="syncfs" groups="descriptor"/>
+  <syscall name="sendmmsg" groups="network"/>
+  <syscall name="setns" groups="descriptor"/>
+  <syscall name="finit_module" groups="descriptor"/>
+  <syscall name="oldstat" groups="file"/>
+  <syscall name="sigaction" groups="signal"/>
+  <syscall name="sigreturn" groups="signal"/>
+  <syscall name="sigsuspend" groups="signal"/>
+  <syscall name="sigpending" groups="signal"/>
+  <syscall name="sigprocmask" groups="signal"/>
+  <syscall name="ipc" groups="ipc"/>
+  <syscall name="readdir" groups="descriptor"/>
+  <syscall name="socketcall" groups="descriptor"/>
+  <syscall name="break" groups="memory"/>
+  <syscall name="oldfstat" groups="descriptor"/>
+  <syscall name="signal" groups="signal"/>
+  <syscall name="sgetmask" groups="signal"/>
+  <syscall name="ssetmask" groups="signal"/>
+  <syscall name="oldlstat" groups="file"/>
+  <syscall name="waitpid" groups="process"/>
+  <syscall name="pread" groups="descriptor"/>
+  <syscall name="pwrite" groups="descriptor"/>
+  <syscall name="fadvise64_64" groups="descriptor"/>
+  <syscall name="fstatat64" groups="descriptor,file"/>
+  <syscall name="_newselect" groups="descriptor"/>
+  <syscall name="timerfd" groups="descriptor"/>
+</syscalls_defaults>
diff --git a/gdb/syscalls/mips-n32-linux.xml b/gdb/syscalls/mips-n32-linux.xml.in
similarity index 100%
rename from gdb/syscalls/mips-n32-linux.xml
rename to gdb/syscalls/mips-n32-linux.xml.in
diff --git a/gdb/syscalls/mips-n64-linux.xml b/gdb/syscalls/mips-n64-linux.xml.in
similarity index 100%
rename from gdb/syscalls/mips-n64-linux.xml
rename to gdb/syscalls/mips-n64-linux.xml.in
diff --git a/gdb/syscalls/mips-o32-linux.xml b/gdb/syscalls/mips-o32-linux.xml.in
similarity index 100%
rename from gdb/syscalls/mips-o32-linux.xml
rename to gdb/syscalls/mips-o32-linux.xml.in
diff --git a/gdb/syscalls/ppc-linux.xml b/gdb/syscalls/ppc-linux.xml.in
similarity index 100%
rename from gdb/syscalls/ppc-linux.xml
rename to gdb/syscalls/ppc-linux.xml.in
diff --git a/gdb/syscalls/ppc64-linux.xml b/gdb/syscalls/ppc64-linux.xml.in
similarity index 100%
rename from gdb/syscalls/ppc64-linux.xml
rename to gdb/syscalls/ppc64-linux.xml.in
diff --git a/gdb/syscalls/s390-linux.xml b/gdb/syscalls/s390-linux.xml.in
similarity index 100%
rename from gdb/syscalls/s390-linux.xml
rename to gdb/syscalls/s390-linux.xml.in
diff --git a/gdb/syscalls/s390x-linux.xml b/gdb/syscalls/s390x-linux.xml.in
similarity index 100%
rename from gdb/syscalls/s390x-linux.xml
rename to gdb/syscalls/s390x-linux.xml.in
diff --git a/gdb/syscalls/sparc-linux.xml b/gdb/syscalls/sparc-linux.xml.in
similarity index 100%
rename from gdb/syscalls/sparc-linux.xml
rename to gdb/syscalls/sparc-linux.xml.in
diff --git a/gdb/syscalls/sparc64-linux.xml b/gdb/syscalls/sparc64-linux.xml.in
similarity index 100%
rename from gdb/syscalls/sparc64-linux.xml
rename to gdb/syscalls/sparc64-linux.xml.in
-- 
2.4.11

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v6 5/5] Update documentation on catching a group of related syscalls.
  2016-05-20  2:56     ` [PATCH v6 5/5] Update documentation on catching a group of related syscalls Gabriel Krisman Bertazi
@ 2016-05-20  5:48       ` Eli Zaretskii
  0 siblings, 0 replies; 14+ messages in thread
From: Eli Zaretskii @ 2016-05-20  5:48 UTC (permalink / raw)
  To: Gabriel Krisman Bertazi; +Cc: gdb-patches, palves, sergiodj, dje

> From: Gabriel Krisman Bertazi <gabriel@krisman.be>
> Cc: palves@redhat.com,	sergiodj@redhat.com,	dje@google.com,	Gabriel Krisman Bertazi <gabriel@krisman.be>
> Date: Thu, 19 May 2016 23:55:48 -0300
> 
> gdb/
> 
> 	* break-catch-syscall.c (_initialize_breakpoint): Update catch
> 	syscall command documentation.
> 	* NEWS: Include section about catching groups of syscalls.
> 
> gdb/doc/
> 
> 	* gdb.texinfo (Set Catchpoints): Add 'group' argument to catch
> 	syscall.

OK.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [RESEND PATCH v6 4/5] Include group information to xml syscall files.
  2016-05-20  3:10   ` [RESEND PATCH v6 4/5] Include group information to xml syscall files Gabriel Krisman Bertazi
@ 2016-05-26 18:14     ` Sergio Durigan Junior
  2016-05-27 10:18     ` Pedro Alves
  1 sibling, 0 replies; 14+ messages in thread
From: Sergio Durigan Junior @ 2016-05-26 18:14 UTC (permalink / raw)
  To: Gabriel Krisman Bertazi; +Cc: gdb-patches, palves, dje

On Thursday, May 19 2016, Gabriel Krisman Bertazi wrote:

> Patch 4/5 bounced due to size. Resending with -M to detect renames...
>
> Sorry for duplicates..
>
> -- >8 --
>
> We maintain linux-defaults.xml.in, a template file to hold generic group
> information.  It is used by the XSL script that parses the architecture
> specific files to generate the final xml files, which are actually
> installed and loaded by GDB.  The script is not run during the normal
> build process, only when building in maintainer mode.

Hey Gabriel,

Thanks for the patch.  I am pleased to see the nice work you did by
creating the XSLT.

FWIW, this patch looks good to me.

> gdb/
>
> 	* data-directory/Makefile.in: Generate syscall xml when building
> 	in maintainer mode.
> 	* configure.ac: Include dependency for xsltproc when building
> 	in maintainer-mode.
> 	* syscalls/apply-defaults.xsl: New file.
> 	* syscalls/linux-defaults.xml.in: New file.
> 	* 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.
> ---
>  gdb/configure.ac                                   |  10 +
>  gdb/data-directory/Makefile.in                     |   4 +
>  .../{aarch64-linux.xml => aarch64-linux.xml.in}    |   0
>  .../{amd64-linux.xml => amd64-linux.xml.in}        |   0
>  gdb/syscalls/apply-defaults.xsl                    |  31 +++
>  gdb/syscalls/{arm-linux.xml => arm-linux.xml.in}   |   0
>  gdb/syscalls/{bfin-linux.xml => bfin-linux.xml.in} |   0
>  gdb/syscalls/{i386-linux.xml => i386-linux.xml.in} |   0
>  gdb/syscalls/linux-defaults.xml.in                 | 243 +++++++++++++++++++++
>  .../{mips-n32-linux.xml => mips-n32-linux.xml.in}  |   0
>  .../{mips-n64-linux.xml => mips-n64-linux.xml.in}  |   0
>  .../{mips-o32-linux.xml => mips-o32-linux.xml.in}  |   0
>  gdb/syscalls/{ppc-linux.xml => ppc-linux.xml.in}   |   0
>  .../{ppc64-linux.xml => ppc64-linux.xml.in}        |   0
>  gdb/syscalls/{s390-linux.xml => s390-linux.xml.in} |   0
>  .../{s390x-linux.xml => s390x-linux.xml.in}        |   0
>  .../{sparc-linux.xml => sparc-linux.xml.in}        |   0
>  .../{sparc64-linux.xml => sparc64-linux.xml.in}    |   0
>  18 files changed, 288 insertions(+)
>  rename gdb/syscalls/{aarch64-linux.xml => aarch64-linux.xml.in} (100%)
>  rename gdb/syscalls/{amd64-linux.xml => amd64-linux.xml.in} (100%)
>  create mode 100644 gdb/syscalls/apply-defaults.xsl
>  rename gdb/syscalls/{arm-linux.xml => arm-linux.xml.in} (100%)
>  rename gdb/syscalls/{bfin-linux.xml => bfin-linux.xml.in} (100%)
>  rename gdb/syscalls/{i386-linux.xml => i386-linux.xml.in} (100%)
>  create mode 100644 gdb/syscalls/linux-defaults.xml.in
>  rename gdb/syscalls/{mips-n32-linux.xml => mips-n32-linux.xml.in} (100%)
>  rename gdb/syscalls/{mips-n64-linux.xml => mips-n64-linux.xml.in} (100%)
>  rename gdb/syscalls/{mips-o32-linux.xml => mips-o32-linux.xml.in} (100%)
>  rename gdb/syscalls/{ppc-linux.xml => ppc-linux.xml.in} (100%)
>  rename gdb/syscalls/{ppc64-linux.xml => ppc64-linux.xml.in} (100%)
>  rename gdb/syscalls/{s390-linux.xml => s390-linux.xml.in} (100%)
>  rename gdb/syscalls/{s390x-linux.xml => s390x-linux.xml.in} (100%)
>  rename gdb/syscalls/{sparc-linux.xml => sparc-linux.xml.in} (100%)
>  rename gdb/syscalls/{sparc64-linux.xml => sparc64-linux.xml.in} (100%)
>
> diff --git a/gdb/configure.ac b/gdb/configure.ac
> index 4364c02..4b57175 100644
> --- a/gdb/configure.ac
> +++ b/gdb/configure.ac
> @@ -2338,6 +2338,16 @@ if test "${nativefile}" != ""; then
>  fi
>  AC_SUBST(GDB_NM_FILE)
>  
> +dnl Add dependency for xsltproc if building with maintainer-mode enabled.
> +if test "x$USE_MAINTAINER_MODE" = xyes; then
> +  AC_PATH_PROGS(XSLTPROC, xsltproc, missing)
> +  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 c05f379..9be925a 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@
> @@ -162,6 +163,9 @@ FLAGS_TO_PASS = \
>  .PHONY: all
>  all: stamp-syscalls stamp-python stamp-guile stamp-system-gdbinit
>  
> +@MAINTAINER_MODE_TRUE@%.xml: %.xml.in apply-defaults.xsl linux-defaults.xml.in
> +@MAINTAINER_MODE_TRUE@	$(XSLTPROC) -o $(SYSCALLS_SRCDIR)/$@ $(SYSCALLS_SRCDIR)/apply-defaults.xsl $<;\
> +
>  # For portability's sake, we need to handle systems that don't have
>  # symbolic links.
>  stamp-syscalls: Makefile $(SYSCALLS_FILES)
> diff --git a/gdb/syscalls/aarch64-linux.xml b/gdb/syscalls/aarch64-linux.xml.in
> similarity index 100%
> rename from gdb/syscalls/aarch64-linux.xml
> rename to gdb/syscalls/aarch64-linux.xml.in
> diff --git a/gdb/syscalls/amd64-linux.xml b/gdb/syscalls/amd64-linux.xml.in
> similarity index 100%
> rename from gdb/syscalls/amd64-linux.xml
> rename to gdb/syscalls/amd64-linux.xml.in
> diff --git a/gdb/syscalls/apply-defaults.xsl b/gdb/syscalls/apply-defaults.xsl
> new file mode 100644
> index 0000000..fb9b8f1
> --- /dev/null
> +++ b/gdb/syscalls/apply-defaults.xsl
> @@ -0,0 +1,31 @@
> +<!-- Copyright (C) 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.  -->
> +
> +<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.in
> similarity index 100%
> rename from gdb/syscalls/arm-linux.xml
> rename to gdb/syscalls/arm-linux.xml.in
> diff --git a/gdb/syscalls/bfin-linux.xml b/gdb/syscalls/bfin-linux.xml.in
> similarity index 100%
> rename from gdb/syscalls/bfin-linux.xml
> rename to gdb/syscalls/bfin-linux.xml.in
> diff --git a/gdb/syscalls/i386-linux.xml b/gdb/syscalls/i386-linux.xml.in
> similarity index 100%
> rename from gdb/syscalls/i386-linux.xml
> rename to gdb/syscalls/i386-linux.xml.in
> diff --git a/gdb/syscalls/linux-defaults.xml.in b/gdb/syscalls/linux-defaults.xml.in
> new file mode 100644
> index 0000000..1c4e187
> --- /dev/null
> +++ b/gdb/syscalls/linux-defaults.xml.in
> @@ -0,0 +1,243 @@
> +<?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.  -->
> +
> +<!-- The group field information was based on strace.  -->
> +
> +<syscalls_defaults>
> +  <syscall name="read" groups="descriptor"/>
> +  <syscall name="write" groups="descriptor"/>
> +  <syscall name="open" groups="descriptor,file"/>
> +  <syscall name="close" groups="descriptor"/>
> +  <syscall name="stat" groups="file"/>
> +  <syscall name="fstat" groups="descriptor"/>
> +  <syscall name="lstat" groups="file"/>
> +  <syscall name="poll" groups="descriptor"/>
> +  <syscall name="lseek" groups="descriptor"/>
> +  <syscall name="mmap" groups="descriptor,memory"/>
> +  <syscall name="mprotect" groups="memory"/>
> +  <syscall name="munmap" groups="memory"/>
> +  <syscall name="brk" groups="memory"/>
> +  <syscall name="rt_sigaction" groups="signal"/>
> +  <syscall name="rt_sigprocmask" groups="signal"/>
> +  <syscall name="rt_sigreturn" groups="signal"/>
> +  <syscall name="ioctl" groups="descriptor"/>
> +  <syscall name="pread64" groups="descriptor"/>
> +  <syscall name="pwrite64" groups="descriptor"/>
> +  <syscall name="readv" groups="descriptor"/>
> +  <syscall name="writev" groups="descriptor"/>
> +  <syscall name="access" groups="file"/>
> +  <syscall name="pipe" groups="descriptor"/>
> +  <syscall name="select" groups="descriptor"/>
> +  <syscall name="mremap" groups="memory"/>
> +  <syscall name="msync" groups="memory"/>
> +  <syscall name="mincore" groups="memory"/>
> +  <syscall name="madvise" groups="memory"/>
> +  <syscall name="shmget" groups="ipc"/>
> +  <syscall name="shmat" groups="ipc,memory"/>
> +  <syscall name="shmctl" groups="ipc"/>
> +  <syscall name="dup" groups="descriptor"/>
> +  <syscall name="dup2" groups="descriptor"/>
> +  <syscall name="pause" groups="signal"/>
> +  <syscall name="sendfile" groups="descriptor,network"/>
> +  <syscall name="socket" groups="network"/>
> +  <syscall name="connect" groups="network"/>
> +  <syscall name="accept" groups="network"/>
> +  <syscall name="sendto" groups="network"/>
> +  <syscall name="recvfrom" groups="network"/>
> +  <syscall name="sendmsg" groups="network"/>
> +  <syscall name="recvmsg" groups="network"/>
> +  <syscall name="shutdown" groups="network"/>
> +  <syscall name="bind" groups="network"/>
> +  <syscall name="listen" groups="network"/>
> +  <syscall name="getsockname" groups="network"/>
> +  <syscall name="getpeername" groups="network"/>
> +  <syscall name="socketpair" groups="network"/>
> +  <syscall name="setsockopt" groups="network"/>
> +  <syscall name="getsockopt" groups="network"/>
> +  <syscall name="clone" groups="process"/>
> +  <syscall name="fork" groups="process"/>
> +  <syscall name="vfork" groups="process"/>
> +  <syscall name="execve" groups="file,process"/>
> +  <syscall name="execv" groups="file,process"/>
> +  <syscall name="exit" groups="process"/>
> +  <syscall name="wait4" groups="process"/>
> +  <syscall name="kill" groups="signal"/>
> +  <syscall name="semget" groups="ipc"/>
> +  <syscall name="semop" groups="ipc"/>
> +  <syscall name="semctl" groups="ipc"/>
> +  <syscall name="shmdt" groups="ipc,memory"/>
> +  <syscall name="msgget" groups="ipc"/>
> +  <syscall name="msgsnd" groups="ipc"/>
> +  <syscall name="msgrcv" groups="ipc"/>
> +  <syscall name="msgctl" groups="ipc"/>
> +  <syscall name="fcntl" groups="descriptor"/>
> +  <syscall name="flock" groups="descriptor"/>
> +  <syscall name="fsync" groups="descriptor"/>
> +  <syscall name="fdatasync" groups="descriptor"/>
> +  <syscall name="truncate" groups="file"/>
> +  <syscall name="ftruncate" groups="descriptor"/>
> +  <syscall name="getdents" groups="descriptor"/>
> +  <syscall name="getcwd" groups="file"/>
> +  <syscall name="chdir" groups="file"/>
> +  <syscall name="fchdir" groups="descriptor"/>
> +  <syscall name="rename" groups="file"/>
> +  <syscall name="mkdir" groups="file"/>
> +  <syscall name="rmdir" groups="file"/>
> +  <syscall name="creat" groups="descriptor,file"/>
> +  <syscall name="link" groups="file"/>
> +  <syscall name="unlink" groups="file"/>
> +  <syscall name="symlink" groups="file"/>
> +  <syscall name="readlink" groups="file"/>
> +  <syscall name="chmod" groups="file"/>
> +  <syscall name="fchmod" groups="descriptor"/>
> +  <syscall name="chown" groups="file"/>
> +  <syscall name="fchown" groups="descriptor"/>
> +  <syscall name="lchown" groups="file"/>
> +  <syscall name="rt_sigpending" groups="signal"/>
> +  <syscall name="rt_sigtimedwait" groups="signal"/>
> +  <syscall name="rt_sigqueueinfo" groups="signal"/>
> +  <syscall name="rt_sigsuspend" groups="signal"/>
> +  <syscall name="sigaltstack" groups="signal"/>
> +  <syscall name="utime" groups="file"/>
> +  <syscall name="mknod" groups="file"/>
> +  <syscall name="uselib" groups="file"/>
> +  <syscall name="statfs" groups="file"/>
> +  <syscall name="fstatfs" groups="descriptor"/>
> +  <syscall name="mlock" groups="memory"/>
> +  <syscall name="munlock" groups="memory"/>
> +  <syscall name="mlockall" groups="memory"/>
> +  <syscall name="munlockall" groups="memory"/>
> +  <syscall name="pivot_root" groups="file"/>
> +  <syscall name="arch_prctl" groups="process"/>
> +  <syscall name="chroot" groups="file"/>
> +  <syscall name="acct" groups="file"/>
> +  <syscall name="mount" groups="file"/>
> +  <syscall name="umount" groups="file"/>
> +  <syscall name="umount2" groups="file"/>
> +  <syscall name="swapon" groups="file"/>
> +  <syscall name="swapoff" groups="file"/>
> +  <syscall name="quotactl" groups="file"/>
> +  <syscall name="readahead" groups="descriptor"/>
> +  <syscall name="setxattr" groups="file"/>
> +  <syscall name="lsetxattr" groups="file"/>
> +  <syscall name="fsetxattr" groups="descriptor"/>
> +  <syscall name="getxattr" groups="file"/>
> +  <syscall name="lgetxattr" groups="file"/>
> +  <syscall name="fgetxattr" groups="descriptor"/>
> +  <syscall name="listxattr" groups="file"/>
> +  <syscall name="llistxattr" groups="file"/>
> +  <syscall name="flistxattr" groups="descriptor"/>
> +  <syscall name="removexattr" groups="file"/>
> +  <syscall name="lremovexattr" groups="file"/>
> +  <syscall name="fremovexattr" groups="descriptor"/>
> +  <syscall name="tkill" groups="signal"/>
> +  <syscall name="epoll_create" groups="descriptor"/>
> +  <syscall name="remap_file_pages" groups="memory"/>
> +  <syscall name="getdents64" groups="descriptor"/>
> +  <syscall name="semtimedop" groups="ipc"/>
> +  <syscall name="fadvise64" groups="descriptor"/>
> +  <syscall name="exit_group" groups="process"/>
> +  <syscall name="epoll_wait" groups="descriptor"/>
> +  <syscall name="epoll_ctl" groups="descriptor"/>
> +  <syscall name="tgkill" groups="signal"/>
> +  <syscall name="utimes" groups="file"/>
> +  <syscall name="mbind" groups="memory"/>
> +  <syscall name="set_mempolicy" groups="memory"/>
> +  <syscall name="get_mempolicy" groups="memory"/>
> +  <syscall name="waitid" groups="process"/>
> +  <syscall name="inotify_init" groups="descriptor"/>
> +  <syscall name="inotify_add_watch" groups="descriptor"/>
> +  <syscall name="inotify_rm_watch" groups="descriptor"/>
> +  <syscall name="migrate_pages" groups="memory"/>
> +  <syscall name="openat" groups="descriptor,file"/>
> +  <syscall name="mkdirat" groups="descriptor,file"/>
> +  <syscall name="mknodat" groups="descriptor,file"/>
> +  <syscall name="fchownat" groups="descriptor,file"/>
> +  <syscall name="futimesat" groups="descriptor,file"/>
> +  <syscall name="newfstatat" groups="descriptor,file"/>
> +  <syscall name="unlinkat" groups="descriptor,file"/>
> +  <syscall name="renameat" groups="descriptor,file"/>
> +  <syscall name="linkat" groups="descriptor,file"/>
> +  <syscall name="symlinkat" groups="descriptor,file"/>
> +  <syscall name="readlinkat" groups="descriptor,file"/>
> +  <syscall name="fchmodat" groups="descriptor,file"/>
> +  <syscall name="faccessat" groups="descriptor,file"/>
> +  <syscall name="pselect6" groups="descriptor"/>
> +  <syscall name="ppoll" groups="descriptor"/>
> +  <syscall name="unshare" groups="process"/>
> +  <syscall name="splice" groups="descriptor"/>
> +  <syscall name="tee" groups="descriptor"/>
> +  <syscall name="sync_file_range" groups="descriptor"/>
> +  <syscall name="vmsplice" groups="descriptor"/>
> +  <syscall name="move_pages" groups="memory"/>
> +  <syscall name="utimensat" groups="descriptor,file"/>
> +  <syscall name="epoll_pwait" groups="descriptor"/>
> +  <syscall name="signalfd" groups="descriptor,signal"/>
> +  <syscall name="timerfd_create" groups="descriptor"/>
> +  <syscall name="eventfd" groups="descriptor"/>
> +  <syscall name="fallocate" groups="descriptor"/>
> +  <syscall name="timerfd_settime" groups="descriptor"/>
> +  <syscall name="timerfd_gettime" groups="descriptor"/>
> +  <syscall name="accept4" groups="network"/>
> +  <syscall name="signalfd4" groups="descriptor,signal"/>
> +  <syscall name="eventfd2" groups="descriptor"/>
> +  <syscall name="epoll_create1" groups="descriptor"/>
> +  <syscall name="dup3" groups="descriptor"/>
> +  <syscall name="pipe2" groups="descriptor"/>
> +  <syscall name="inotify_init1" groups="descriptor"/>
> +  <syscall name="preadv" groups="descriptor"/>
> +  <syscall name="pwritev" groups="descriptor"/>
> +  <syscall name="send" groups="network"/>
> +  <syscall name="recv" groups="network"/>
> +  <syscall name="statfs64" groups="file"/>
> +  <syscall name="fstatfs64" groups="descriptor"/>
> +  <syscall name="sendfile64" groups="descriptor,network"/>
> +  <syscall name="rt_tgsigqueueinfo" groups="process,signal"/>
> +  <syscall name="perf_event_open" groups="descriptor"/>
> +  <syscall name="recvmmsg" groups="network"/>
> +  <syscall name="fanotify_init" groups="descriptor"/>
> +  <syscall name="fanotify_mark" groups="descriptor,file"/>
> +  <syscall name="fchown32" groups="descriptor"/>
> +  <syscall name="chown32" groups="file"/>
> +  <syscall name="fcntl64" groups="descriptor"/>
> +  <syscall name="mmap2" groups="descriptor,memory"/>
> +  <syscall name="truncate64" groups="file"/>
> +  <syscall name="ftruncate64" groups="descriptor"/>
> +  <syscall name="stat64" groups="file"/>
> +  <syscall name="lstat64" groups="file"/>
> +  <syscall name="fstat64" groups="descriptor"/>
> +  <syscall name="lchown32" groups="file"/>
> +  <syscall name="name_to_handle_at" groups="descriptor,file"/>
> +  <syscall name="open_by_handle_at" groups="descriptor"/>
> +  <syscall name="_llseek" groups="descriptor"/>
> +  <syscall name="syncfs" groups="descriptor"/>
> +  <syscall name="sendmmsg" groups="network"/>
> +  <syscall name="setns" groups="descriptor"/>
> +  <syscall name="finit_module" groups="descriptor"/>
> +  <syscall name="oldstat" groups="file"/>
> +  <syscall name="sigaction" groups="signal"/>
> +  <syscall name="sigreturn" groups="signal"/>
> +  <syscall name="sigsuspend" groups="signal"/>
> +  <syscall name="sigpending" groups="signal"/>
> +  <syscall name="sigprocmask" groups="signal"/>
> +  <syscall name="ipc" groups="ipc"/>
> +  <syscall name="readdir" groups="descriptor"/>
> +  <syscall name="socketcall" groups="descriptor"/>
> +  <syscall name="break" groups="memory"/>
> +  <syscall name="oldfstat" groups="descriptor"/>
> +  <syscall name="signal" groups="signal"/>
> +  <syscall name="sgetmask" groups="signal"/>
> +  <syscall name="ssetmask" groups="signal"/>
> +  <syscall name="oldlstat" groups="file"/>
> +  <syscall name="waitpid" groups="process"/>
> +  <syscall name="pread" groups="descriptor"/>
> +  <syscall name="pwrite" groups="descriptor"/>
> +  <syscall name="fadvise64_64" groups="descriptor"/>
> +  <syscall name="fstatat64" groups="descriptor,file"/>
> +  <syscall name="_newselect" groups="descriptor"/>
> +  <syscall name="timerfd" groups="descriptor"/>
> +</syscalls_defaults>
> diff --git a/gdb/syscalls/mips-n32-linux.xml b/gdb/syscalls/mips-n32-linux.xml.in
> similarity index 100%
> rename from gdb/syscalls/mips-n32-linux.xml
> rename to gdb/syscalls/mips-n32-linux.xml.in
> diff --git a/gdb/syscalls/mips-n64-linux.xml b/gdb/syscalls/mips-n64-linux.xml.in
> similarity index 100%
> rename from gdb/syscalls/mips-n64-linux.xml
> rename to gdb/syscalls/mips-n64-linux.xml.in
> diff --git a/gdb/syscalls/mips-o32-linux.xml b/gdb/syscalls/mips-o32-linux.xml.in
> similarity index 100%
> rename from gdb/syscalls/mips-o32-linux.xml
> rename to gdb/syscalls/mips-o32-linux.xml.in
> diff --git a/gdb/syscalls/ppc-linux.xml b/gdb/syscalls/ppc-linux.xml.in
> similarity index 100%
> rename from gdb/syscalls/ppc-linux.xml
> rename to gdb/syscalls/ppc-linux.xml.in
> diff --git a/gdb/syscalls/ppc64-linux.xml b/gdb/syscalls/ppc64-linux.xml.in
> similarity index 100%
> rename from gdb/syscalls/ppc64-linux.xml
> rename to gdb/syscalls/ppc64-linux.xml.in
> diff --git a/gdb/syscalls/s390-linux.xml b/gdb/syscalls/s390-linux.xml.in
> similarity index 100%
> rename from gdb/syscalls/s390-linux.xml
> rename to gdb/syscalls/s390-linux.xml.in
> diff --git a/gdb/syscalls/s390x-linux.xml b/gdb/syscalls/s390x-linux.xml.in
> similarity index 100%
> rename from gdb/syscalls/s390x-linux.xml
> rename to gdb/syscalls/s390x-linux.xml.in
> diff --git a/gdb/syscalls/sparc-linux.xml b/gdb/syscalls/sparc-linux.xml.in
> similarity index 100%
> rename from gdb/syscalls/sparc-linux.xml
> rename to gdb/syscalls/sparc-linux.xml.in
> diff --git a/gdb/syscalls/sparc64-linux.xml b/gdb/syscalls/sparc64-linux.xml.in
> similarity index 100%
> rename from gdb/syscalls/sparc64-linux.xml
> rename to gdb/syscalls/sparc64-linux.xml.in
> -- 
> 2.4.11

Thanks,

-- 
Sergio
GPG key ID: 237A 54B1 0287 28BF 00EF  31F4 D0EB 7628 65FC 5E36
Please send encrypted e-mail if possible
http://sergiodj.net/

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v6 2/5] Add support to catch groups of syscalls.
  2016-05-20  2:56     ` [PATCH v6 2/5] Add support to catch groups of syscalls Gabriel Krisman Bertazi
@ 2016-05-26 18:17       ` Sergio Durigan Junior
  0 siblings, 0 replies; 14+ messages in thread
From: Sergio Durigan Junior @ 2016-05-26 18:17 UTC (permalink / raw)
  To: Gabriel Krisman Bertazi; +Cc: gdb-patches, palves, dje

On Thursday, May 19 2016, Gabriel Krisman Bertazi wrote:

> This implements the catchpoint side.  While parsing 'catch syscall'
> arguments, we verify if the argument is a syscall group and expand it to
> a list of syscalls that are part of that group.

Thanks for the patch.

> gdb/
>
> 	* 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.
> ---
>  gdb/break-catch-syscall.c | 93 ++++++++++++++++++++++++++++++++++++++++++-----
>  1 file changed, 84 insertions(+), 9 deletions(-)
>
> diff --git a/gdb/break-catch-syscall.c b/gdb/break-catch-syscall.c
> index dbebdda..c564b8f 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;
>  }
>  
> -- 
> 2.4.11

LGTM.

-- 
Sergio
GPG key ID: 237A 54B1 0287 28BF 00EF  31F4 D0EB 7628 65FC 5E36
Please send encrypted e-mail if possible
http://sergiodj.net/

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v6 3/5] Add tests for catching groups of syscalls on supported architectures.
  2016-05-20  2:56     ` [PATCH v6 3/5] Add tests for catching groups of syscalls on supported architectures Gabriel Krisman Bertazi
@ 2016-05-26 18:18       ` Sergio Durigan Junior
  0 siblings, 0 replies; 14+ messages in thread
From: Sergio Durigan Junior @ 2016-05-26 18:18 UTC (permalink / raw)
  To: Gabriel Krisman Bertazi; +Cc: gdb-patches, palves, dje

On Thursday, May 19 2016, Gabriel Krisman Bertazi wrote:

> gdb/testsuite/
>
> 	* gdb.base/catch-syscall.exp (do_syscall_tests): Add call
> 	to test_catch_syscall_group.
> 	(test_catch_syscall_group): New.

Thanks for the patch.

> ---
>  gdb/testsuite/gdb.base/catch-syscall.exp | 39 ++++++++++++++++++++++++++++++++
>  1 file changed, 39 insertions(+)
>
> diff --git a/gdb/testsuite/gdb.base/catch-syscall.exp b/gdb/testsuite/gdb.base/catch-syscall.exp
> index 5679000..e55bd70 100644
> --- a/gdb/testsuite/gdb.base/catch-syscall.exp
> +++ b/gdb/testsuite/gdb.base/catch-syscall.exp
> @@ -370,6 +370,42 @@ proc test_catch_syscall_fail_nodatadir {} {
>      }
>  }
>  
> +proc test_catch_syscall_group {} {
> +    global decimal
> +
> +    set sysnum "\\\[${decimal}\\\]"
> +
> +    gdb_test "catch syscall g:process" \
> +	"Catchpoint $decimal \\(syscalls (\'(clone|fork|execve|exit)\' $sysnum)+.*" \
> +	"set catchpoint on a group of syscalls"
> +
> +    gdb_test "catch syscall group:process read" \
> +	"Catchpoint $decimal \\(syscalls (\'(clone|fork|execve|exit)\' $sysnum)+.*read.*\\)" \
> +	"set catchpoints on a group of syscalls and on a single syscall"
> +
> +    gdb_test "catch syscall group:" \
> +	"Unknown syscall group ''\." \
> +	"set catchpoints on an invalid group"
> +
> +    gdb_test "catch syscall g:junk" \
> +	"Unknown syscall group 'junk'\." \
> +	"set catchpoints on an unknown group."
> +
> +    gdb_test "complete catch syscall g:proc" \
> +	"catch syscall g:process" \
> +	"complete catch syscall group with 'g:' prefix"
> +
> +    gdb_test "complete catch syscall group:proc" \
> +	"catch syscall group:process" \
> +	"complete catch syscall group with 'group:' prefix"
> +
> +    gdb_test_sequence "complete catch syscall g" \
> +	"complete catch syscall group suggests 'group:' prefix" {
> +	    "group:descriptor" "group:file" "group:ipc" "group:memory"
> +	    "group:network" "group:process" "group:signal"
> +	}
> +}
> +
>  proc do_syscall_tests {} {
>      # NOTE: We don't have to point gdb at the correct data-directory.
>      # For the build tree that is handled by INTERNAL_GDBFLAGS.
> @@ -420,6 +456,9 @@ proc do_syscall_tests {} {
>      # Testing if the 'catch syscall' command works when switching to
>      # different architectures on-the-fly (PR gdb/10737).
>      if [runto_main] then { test_catch_syscall_multi_arch }
> +
> +    # Testing the 'catch' syscall command for a group of syscalls.
> +    if [runto_main] then { test_catch_syscall_group }
>  }
>  
>  proc test_catch_syscall_without_args_noxml {} {
> -- 
> 2.4.11

LGTM.

-- 
Sergio
GPG key ID: 237A 54B1 0287 28BF 00EF  31F4 D0EB 7628 65FC 5E36
Please send encrypted e-mail if possible
http://sergiodj.net/

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v6 1/5] Implemement support for groups of syscalls in the xml-syscall interface.
  2016-05-20  2:56   ` [PATCH v6 1/5] Implemement support for groups of syscalls in the xml-syscall interface Gabriel Krisman Bertazi
                       ` (2 preceding siblings ...)
  2016-05-20  2:56     ` [PATCH v6 3/5] Add tests for catching groups of syscalls on supported architectures Gabriel Krisman Bertazi
@ 2016-05-26 18:22     ` Sergio Durigan Junior
  3 siblings, 0 replies; 14+ messages in thread
From: Sergio Durigan Junior @ 2016-05-26 18:22 UTC (permalink / raw)
  To: Gabriel Krisman Bertazi; +Cc: gdb-patches, palves, dje

On Thursday, May 19 2016, Gabriel Krisman Bertazi wrote:

> This is done by maintaining a list of syscall_group_desc for each
> syscall group inside the syscalls_info structure.  Inside each
> syscall_group_desc we have a vector of pointers to the syscalls that are
> part of that group.
>
> gdb/
>
> 	* syscalls/gdb-syscalls.dtd: Include group attribute to the
> 	syscall element.
> 	* 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.
> ---
>  gdb/syscalls/gdb-syscalls.dtd |   3 +-
>  gdb/xml-syscall.c             | 234 +++++++++++++++++++++++++++++++++++++++++-
>  gdb/xml-syscall.h             |  16 +++
>  3 files changed, 250 insertions(+), 3 deletions(-)
>
> diff --git a/gdb/syscalls/gdb-syscalls.dtd b/gdb/syscalls/gdb-syscalls.dtd
> index 3deda12..de47d4d 100644
> --- a/gdb/syscalls/gdb-syscalls.dtd
> +++ b/gdb/syscalls/gdb-syscalls.dtd
> @@ -11,4 +11,5 @@
>  <!ELEMENT syscall		EMPTY>
>  <!ATTLIST syscall
>  	name			CDATA	#REQUIRED
> -	number			CDATA	#REQUIRED>
> +	number			CDATA	#REQUIRED
> +	groups			CDATA	#IMPLIED>
> diff --git a/gdb/xml-syscall.c b/gdb/xml-syscall.c
> index ceaf750..c7c307e 100644
> --- a/gdb/xml-syscall.c
> +++ b/gdb/xml-syscall.c
> @@ -77,6 +77,20 @@ get_syscall_names (struct gdbarch *gdbarch)
>    return NULL;
>  }
>  
> +struct syscall *
> +get_syscalls_by_group (struct gdbarch *gdbarch, const char *group)
> +{
> +  syscall_warn_user ();
> +  return NULL;
> +}
> +
> +const char **
> +get_syscall_group_names (struct gdbarch *gdbarch)
> +{
> +  syscall_warn_user ();
> +  return NULL;
> +}
> +
>  #else /* ! HAVE_LIBEXPAT */
>  
>  /* Structure which describes a syscall.  */
> @@ -92,6 +106,19 @@ typedef struct syscall_desc
>  } *syscall_desc_p;
>  DEF_VEC_P(syscall_desc_p);
>  
> +/* Structure of a syscall group.  */
> +typedef struct syscall_group_desc
> +{
> +  /* The group name.  */
> +
> +  char *name;
> +
> +  /* The syscalls that are part of the group.  */
> +
> +  VEC(syscall_desc_p) *syscalls;
> +} *syscall_group_desc_p;
> +DEF_VEC_P(syscall_group_desc_p);
> +
>  /* Structure that represents syscalls information.  */
>  struct syscalls_info
>  {
> @@ -99,6 +126,10 @@ struct syscalls_info
>  
>    VEC(syscall_desc_p) *syscalls;
>  
> +  /* The syscall groups.  */
> +
> +  VEC(syscall_group_desc_p) *groups;
> +
>    /* Variable that will hold the last known data-directory.  This is
>       useful to know whether we should re-read the XML info for the
>       target.  */
> @@ -126,11 +157,21 @@ syscalls_info_free_syscalls_desc (struct syscall_desc *sd)
>    xfree (sd->name);
>  }
>  
> +/* Free syscall_group_desc members but not the structure itself.  */
> +
> +static void
> +syscalls_info_free_syscall_group_desc (struct syscall_group_desc *sd)
> +{
> +  VEC_free (syscall_desc_p, sd->syscalls);
> +  xfree (sd->name);
> +}
> +
>  static void
>  free_syscalls_info (void *arg)
>  {
>    struct syscalls_info *syscalls_info = (struct syscalls_info *) arg;
>    struct syscall_desc *sysdesc;
> +  struct syscall_group_desc *groupdesc;
>    int i;
>  
>    xfree (syscalls_info->my_gdb_datadir);
> @@ -144,6 +185,17 @@ free_syscalls_info (void *arg)
>        VEC_free (syscall_desc_p, syscalls_info->syscalls);
>      }
>  
> +  if (syscalls_info->groups != NULL)
> +    {
> +      for (i = 0;
> +	   VEC_iterate (syscall_group_desc_p,
> +			syscalls_info->groups, i, groupdesc);
> +	   i++)
> +	syscalls_info_free_syscall_group_desc (groupdesc);
> +
> +      VEC_free (syscall_group_desc_p, syscalls_info->groups);
> +    }
> +
>    xfree (syscalls_info);
>  }
>  
> @@ -153,16 +205,73 @@ make_cleanup_free_syscalls_info (struct syscalls_info *syscalls_info)
>    return make_cleanup (free_syscalls_info, syscalls_info);
>  }
>  
> +/* Create a new syscall group.  Return pointer to the
> +   syscall_group_desc structure that represents the new group.  */
> +
> +static struct syscall_group_desc *
> +syscall_group_create_syscall_group_desc (struct syscalls_info *syscalls_info,
> +					 const char *group)
> +{
> +  struct syscall_group_desc *groupdesc = XCNEW (struct syscall_group_desc);
> +
> +  groupdesc->name = xstrdup (group);
> +
> +  VEC_safe_push (syscall_group_desc_p, syscalls_info->groups, groupdesc);
> +
> +  return groupdesc;
> +}
> +
> +/* Add a syscall to the group.  If group doesn't exist, create it.  */
> +
> +static void
> +syscall_group_add_syscall (struct syscalls_info *syscalls_info,
> +			   struct syscall_desc *syscall,
> +			   const char *group)
> +{
> +  struct syscall_group_desc *groupdesc;

Minor nit: assign NULL to this variable here.

> +  int i;
> +
> +  /* Search for an existing group.  */
> +  for (i = 0;
> +       VEC_iterate (syscall_group_desc_p, syscalls_info->groups, i, groupdesc);
> +       i++)
> +    {
> +      if (strcmp (groupdesc->name, group) == 0)
> +	break;
> +    }
> +
> +  if (groupdesc == NULL)
> +    {
> +      /* No group was found with this name.  We must create a new
> +	 one.  */
> +      groupdesc = syscall_group_create_syscall_group_desc (syscalls_info,
> +							   group);
> +    }
> +
> +  VEC_safe_push (syscall_desc_p, groupdesc->syscalls, syscall);
> +}
> +
>  static void
>  syscall_create_syscall_desc (struct syscalls_info *syscalls_info,
> -                             const char *name, int number)
> +			     const char *name, int number,
> +			     char *groups)
>  {
>    struct syscall_desc *sysdesc = XCNEW (struct syscall_desc);
> +  char *group;
>  
>    sysdesc->name = xstrdup (name);
>    sysdesc->number = number;
>  
>    VEC_safe_push (syscall_desc_p, syscalls_info->syscalls, sysdesc);
> +
> +  /*  Add syscall to its groups.  */
> +  if (groups != NULL)
> +    {
> +      for (group = strtok (groups, ",");
> +	   group != NULL;
> +	   group = strtok (NULL, ","))
> +	syscall_group_add_syscall (syscalls_info, sysdesc, group);
> +    }
>  }
>  
>  /* Handle the start of a <syscall> element.  */
> @@ -177,6 +286,7 @@ syscall_start_syscall (struct gdb_xml_parser *parser,
>    /* syscall info.  */
>    char *name = NULL;
>    int number = 0;
> +  char *groups = NULL;
>  
>    len = VEC_length (gdb_xml_value_s, attributes);
>  
> @@ -186,13 +296,15 @@ syscall_start_syscall (struct gdb_xml_parser *parser,
>          name = (char *) attrs[i].value;
>        else if (strcmp (attrs[i].name, "number") == 0)
>          number = * (ULONGEST *) attrs[i].value;
> +      else if (strcmp (attrs[i].name, "groups") == 0)
> +        groups = (char *) attrs[i].value;
>        else
>          internal_error (__FILE__, __LINE__,
>                          _("Unknown attribute name '%s'."), attrs[i].name);
>      }
>  
>    gdb_assert (name);
> -  syscall_create_syscall_desc (data->syscalls_info, name, number);
> +  syscall_create_syscall_desc (data->syscalls_info, name, number, groups);
>  }
>  
>  
> @@ -200,6 +312,7 @@ syscall_start_syscall (struct gdb_xml_parser *parser,
>  static const struct gdb_xml_attribute syscall_attr[] = {
>    { "number", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL },
>    { "name", GDB_XML_AF_NONE, NULL, NULL },
> +  { "groups", GDB_XML_AF_OPTIONAL, NULL, NULL },
>    { NULL, GDB_XML_AF_NONE, NULL, NULL }
>  };
>  
> @@ -321,6 +434,34 @@ init_syscalls_info (struct gdbarch *gdbarch)
>    set_gdbarch_syscalls_info (gdbarch, syscalls_info);
>  }
>  
> +/* Search for a syscall group by its name.  Return syscall_group_desc
> +   structure for the group if found or NULL otherwise.  */
> +
> +static struct syscall_group_desc *
> +syscall_group_get_group_by_name (const struct syscalls_info *syscalls_info,
> +				 const char *group)
> +{
> +  struct syscall_group_desc *groupdesc;
> +  int i;
> +
> +  if (syscalls_info == NULL)
> +    return NULL;
> +
> +  if (group == NULL)
> +    return NULL;
> +
> +   /* Search for existing group.  */
> +  for (i = 0;
> +       VEC_iterate (syscall_group_desc_p, syscalls_info->groups, i, groupdesc);
> +       i++)
> +    {
> +      if (strcmp (groupdesc->name, group) == 0)
> +	return groupdesc;
> +    }
> +
> +  return NULL;
> +}
> +
>  static int
>  xml_get_syscall_number (struct gdbarch *gdbarch,
>                          const char *syscall_name)
> @@ -388,6 +529,75 @@ xml_list_of_syscalls (struct gdbarch *gdbarch)
>    return names;
>  }
>  
> +/* Iterate over the syscall_group_desc element to return a list of
> +   syscalls that are part of the given group, terminated by an empty
> +   element.  If the syscall group doesn't exist, return NULL.  */
> +
> +static struct syscall *
> +xml_list_syscalls_by_group (struct gdbarch *gdbarch, const char *group)
> +{
> +  struct syscalls_info *syscalls_info = gdbarch_syscalls_info (gdbarch);
> +  struct syscall_group_desc *groupdesc;
> +  struct syscall_desc *sysdesc;
> +  struct syscall *syscalls = NULL;
> +  int nsyscalls;
> +  int i;
> +
> +  if (syscalls_info == NULL)
> +    return NULL;
> +
> +  groupdesc = syscall_group_get_group_by_name (syscalls_info, group);
> +  if (groupdesc == NULL)
> +    return NULL;
> +
> +  nsyscalls = VEC_length (syscall_desc_p, groupdesc->syscalls);
> +  syscalls = (struct syscall*) xmalloc ((nsyscalls + 1)
> +					* sizeof (struct syscall));
> +
> +  for (i = 0;
> +       VEC_iterate (syscall_desc_p, groupdesc->syscalls, i, sysdesc);
> +       i++)
> +    {
> +      syscalls[i].name = sysdesc->name;
> +      syscalls[i].number = sysdesc->number;
> +    }
> +
> +  /* Add final element marker.  */
> +  syscalls[i].name = NULL;
> +  syscalls[i].number = 0;
> +
> +  return syscalls;
> +}
> +
> +/* Return a NULL terminated list of syscall groups or an empty list, if
> +   no syscall group is available.  Return NULL, if there is no syscall
> +   information available.  */
> +
> +static const char **
> +xml_list_of_groups (struct gdbarch *gdbarch)
> +{
> +  struct syscalls_info *syscalls_info = gdbarch_syscalls_info (gdbarch);
> +  struct syscall_group_desc *groupdesc;
> +  const char **names = NULL;
> +  int i;
> +  int ngroups;
> +
> +  if (syscalls_info == NULL)
> +    return NULL;
> +
> +  ngroups = VEC_length (syscall_group_desc_p, syscalls_info->groups);
> +  names = (const char**) xmalloc ((ngroups + 1) * sizeof (char *));
> +
> +  for (i = 0;
> +       VEC_iterate (syscall_group_desc_p, syscalls_info->groups, i, groupdesc);
> +       i++)
> +    names[i] = groupdesc->name;
> +
> +  names[i] = NULL;
> +
> +  return names;
> +}
> +
>  void
>  set_xml_syscall_file_name (struct gdbarch *gdbarch, const char *name)
>  {
> @@ -422,4 +632,24 @@ get_syscall_names (struct gdbarch *gdbarch)
>    return xml_list_of_syscalls (gdbarch);
>  }
>  
> +/* See comment in xml-syscall.h.  */
> +
> +struct syscall *
> +get_syscalls_by_group (struct gdbarch *gdbarch, const char *group)
> +{
> +  init_syscalls_info (gdbarch);
> +
> +  return xml_list_syscalls_by_group (gdbarch, group);
> +}
> +
> +/* See comment in xml-syscall.h.  */
> +
> +const char **
> +get_syscall_group_names (struct gdbarch *gdbarch)
> +{
> +  init_syscalls_info (gdbarch);
> +
> +  return xml_list_of_groups (gdbarch);
> +}
> +
>  #endif /* ! HAVE_LIBEXPAT */
> diff --git a/gdb/xml-syscall.h b/gdb/xml-syscall.h
> index b0dd401..407613e 100644
> --- a/gdb/xml-syscall.h
> +++ b/gdb/xml-syscall.h
> @@ -50,4 +50,20 @@ void get_syscall_by_name (struct gdbarch *gdbarch,
>  
>  const char **get_syscall_names (struct gdbarch *gdbarch);
>  
> +/* Function used to retrieve the list of syscalls of a given group in
> +   the system.  Return a list of syscalls that are element of the
> +   group, terminated by an empty element. The list is malloc'ed
> +   and must be freed by the caller.  If group doesn't exist, return
> +   NULL.  */
> +
> +struct syscall *get_syscalls_by_group (struct gdbarch *gdbarch,
> +				       const char *group);
> +
> +/* Function used to retrieve the list of syscall groups in the system.
> +   Return an array of strings terminated by a NULL element.  The list
> +   must be freed by the caller.  Return NULL if there is no syscall
> +   information available.  */
> +
> +const char **get_syscall_group_names (struct gdbarch *gdbarch);
> +
>  #endif /* XML_SYSCALL_H */
> -- 
> 2.4.11

Just one minor nit (above).  Otherwise, LGTM.

-- 
Sergio
GPG key ID: 237A 54B1 0287 28BF 00EF  31F4 D0EB 7628 65FC 5E36
Please send encrypted e-mail if possible
http://sergiodj.net/

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [RESEND PATCH v6 4/5] Include group information to xml syscall files.
  2016-05-20  3:10   ` [RESEND PATCH v6 4/5] Include group information to xml syscall files Gabriel Krisman Bertazi
  2016-05-26 18:14     ` Sergio Durigan Junior
@ 2016-05-27 10:18     ` Pedro Alves
  2016-06-19 20:37       ` Gabriel Krisman Bertazi
  1 sibling, 1 reply; 14+ messages in thread
From: Pedro Alves @ 2016-05-27 10:18 UTC (permalink / raw)
  To: Gabriel Krisman Bertazi, gdb-patches; +Cc: sergiodj, dje

On 05/20/2016 04:10 AM, Gabriel Krisman Bertazi wrote:
> Patch 4/5 bounced due to size. Resending with -M to detect renames...

Thanks, that's the right thing to do, even without bounces.  Best is
to adjust the git config to make that the default.

On 05/20/2016 04:10 AM, Gabriel Krisman Bertazi wrote:
> --- /dev/null
> +++ b/gdb/syscalls/apply-defaults.xsl
> @@ -0,0 +1,31 @@
> +<!-- Copyright (C) 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.  -->
> +

Shouldn't this file be GPLv3+ like all other build or source files?

> We maintain linux-defaults.xml.in, a template file to hold generic group
> information.  It is used by the XSL script that parses the architecture
> specific files to generate the final xml files, which are actually
> installed and loaded by GDB.  The script is not run during the normal
> build process, only when building in maintainer mode.

> +@MAINTAINER_MODE_TRUE@%.xml: %.xml.in apply-defaults.xsl linux-defaults.xml.in
> +@MAINTAINER_MODE_TRUE@	$(XSLTPROC) -o $(SYSCALLS_SRCDIR)/$@ $(SYSCALLS_SRCDIR)/apply-defaults.xsl $<;\
> +

Please always define the rules in the Makefile.in even without
maintainer mode.  What you want is force the _dependencies_ when maintainer
mode is active, but leave them out otherwise.
That would make it possible to force-regenerate the files even when
not using maintainer mode.

See e.g.,: gdb/Makefile.in:

$(srcdir)/aclocal.m4: @MAINTAINER_MODE_TRUE@ $(aclocal_m4_deps)
...

So that'd be something like:

%.xml: @MAINTAINER_MODE_TRUE@ %.xml.in apply-defaults.xsl linux-defaults.xml.in
	$(XSLTPROC) -o $(SYSCALLS_SRCDIR)/$@ $(SYSCALLS_SRCDIR)/apply-defaults.xsl $<;\

It'd be convenient to add a rule to regenerate all xml files, something like:

.PHONY syscall-xml
syscall-xml: $(SYSCALLS_FILES)

.PHONY clean-syscall-xml
clean-syscall-xml: $(SYSCALLS_FILES)
	rm -f $(SYSCALLS_FILES)

Thanks,
Pedro Alves

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [RESEND PATCH v6 4/5] Include group information to xml syscall files.
  2016-05-27 10:18     ` Pedro Alves
@ 2016-06-19 20:37       ` Gabriel Krisman Bertazi
  0 siblings, 0 replies; 14+ messages in thread
From: Gabriel Krisman Bertazi @ 2016-06-19 20:37 UTC (permalink / raw)
  To: Pedro Alves; +Cc: gdb-patches, sergiodj, dje

[-- Attachment #1: Type: text/plain, Size: 2577 bytes --]

Pedro Alves <palves@redhat.com> writes:

> On 05/20/2016 04:10 AM, Gabriel Krisman Bertazi wrote:
>> Patch 4/5 bounced due to size. Resending with -M to detect renames...
>
> Thanks, that's the right thing to do, even without bounces.  Best is
> to adjust the git config to make that the default.

>

Hi Pedro,

Thanks for your comments,

> On 05/20/2016 04:10 AM, Gabriel Krisman Bertazi wrote:
>> --- /dev/null
>> +++ b/gdb/syscalls/apply-defaults.xsl
>> @@ -0,0 +1,31 @@
>> +<!-- Copyright (C) 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.  -->
>> +
>
> Shouldn't this file be GPLv3+ like all other build or source files?

Yes, it should. I went with the no-brainer option and copied the
copyright header from the syscall files.  I fixed it in v7.

v7 also includes the changes you suggested below.  Please, let me know
your thoughts on that one.

Thanks,

>> We maintain linux-defaults.xml.in, a template file to hold generic group
>> information.  It is used by the XSL script that parses the architecture
>> specific files to generate the final xml files, which are actually
>> installed and loaded by GDB.  The script is not run during the normal
>> build process, only when building in maintainer mode.
>
>> +@MAINTAINER_MODE_TRUE@%.xml: %.xml.in apply-defaults.xsl linux-defaults.xml.in
>> +@MAINTAINER_MODE_TRUE@	$(XSLTPROC) -o $(SYSCALLS_SRCDIR)/$@ $(SYSCALLS_SRCDIR)/apply-defaults.xsl $<;\
>> +
>
> Please always define the rules in the Makefile.in even without
> maintainer mode.  What you want is force the _dependencies_ when maintainer
> mode is active, but leave them out otherwise.
> That would make it possible to force-regenerate the files even when
> not using maintainer mode.
>

> See e.g.,: gdb/Makefile.in:
>
> $(srcdir)/aclocal.m4: @MAINTAINER_MODE_TRUE@ $(aclocal_m4_deps)
> ...


>
> So that'd be something like:
>
> %.xml: @MAINTAINER_MODE_TRUE@ %.xml.in apply-defaults.xsl linux-defaults.xml.in
> 	$(XSLTPROC) -o $(SYSCALLS_SRCDIR)/$@ $(SYSCALLS_SRCDIR)/apply-defaults.xsl $<;\
>
> It'd be convenient to add a rule to regenerate all xml files, something like:
>
> .PHONY syscall-xml
> syscall-xml: $(SYSCALLS_FILES)
>
> .PHONY clean-syscall-xml
> clean-syscall-xml: $(SYSCALLS_FILES)
> 	rm -f $(SYSCALLS_FILES)
>
> Thanks,
> Pedro Alves
>
>

-- 
Gabriel Krisman Bertazi

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 818 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2016-06-19 20:37 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-17 17:28 [PATCH v5 4/5] Include group information to xml syscall files Doug Evans
2016-05-20  2:30 ` Gabriel Krisman Bertazi
2016-05-20  2:56   ` [PATCH v6 1/5] Implemement support for groups of syscalls in the xml-syscall interface Gabriel Krisman Bertazi
2016-05-20  2:56     ` [PATCH v6 5/5] Update documentation on catching a group of related syscalls Gabriel Krisman Bertazi
2016-05-20  5:48       ` Eli Zaretskii
2016-05-20  2:56     ` [PATCH v6 2/5] Add support to catch groups of syscalls Gabriel Krisman Bertazi
2016-05-26 18:17       ` Sergio Durigan Junior
2016-05-20  2:56     ` [PATCH v6 3/5] Add tests for catching groups of syscalls on supported architectures Gabriel Krisman Bertazi
2016-05-26 18:18       ` Sergio Durigan Junior
2016-05-26 18:22     ` [PATCH v6 1/5] Implemement support for groups of syscalls in the xml-syscall interface Sergio Durigan Junior
2016-05-20  3:10   ` [RESEND PATCH v6 4/5] Include group information to xml syscall files Gabriel Krisman Bertazi
2016-05-26 18:14     ` Sergio Durigan Junior
2016-05-27 10:18     ` Pedro Alves
2016-06-19 20:37       ` Gabriel Krisman Bertazi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).