From patchwork Sun Jun 19 20:34:09 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gabriel Krisman Bertazi X-Patchwork-Id: 13228 Received: (qmail 15257 invoked by alias); 19 Jun 2016 20:35:07 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 15243 invoked by uid 89); 19 Jun 2016 20:35:06 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.3 required=5.0 tests=AWL, BAYES_00, KAM_LAZY_DOMAIN_SECURITY, UNPARSEABLE_RELAY autolearn=no version=3.3.2 spammy=H*r:Unknown, 4611, news X-HELO: layla.krisman.be Received: from Unknown (HELO layla.krisman.be) (176.31.208.35) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Sun, 19 Jun 2016 20:34:56 +0000 Received: from [127.0.0.1] (localhost [127.0.0.1]) with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (envelope-from ) id 1bEiyd-0005Bd-Cq; Sun, 19 Jun 2016 22:05:52 +0200 From: Gabriel Krisman Bertazi To: gdb-patches@sourceware.org Cc: palves@redhat.com, sergiodj@redhat.com, dje@google.com, Gabriel Krisman Bertazi Subject: [PATCH v7 5/5] Update documentation on catching a group of related syscalls. Date: Sun, 19 Jun 2016 17:34:09 -0300 Message-Id: <1466368449-26477-6-git-send-email-gabriel@krisman.be> In-Reply-To: <1466368449-26477-1-git-send-email-gabriel@krisman.be> References: <1466368449-26477-1-git-send-email-gabriel@krisman.be> X-IsSubscribed: yes Eli already approved this one. 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 340a751..a8d2700 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -46,6 +46,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 795a70b..7be08d2 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,