This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] Implement 'catch syscall' for gdbserver
- From: Eli Zaretskii <eliz at gnu dot org>
- To: Josh Stone <jistone at redhat dot com>
- Cc: gdb-patches at sourceware dot org, sergiodj at redhat dot com, palves at redhat dot com, philippe dot waroquiers at skynet dot be, jistone at redhat dot com
- Date: Fri, 30 Oct 2015 10:12:20 +0200
- Subject: Re: [PATCH] Implement 'catch syscall' for gdbserver
- Authentication-results: sourceware.org; auth=none
- References: <1446169946-28117-1-git-send-email-jistone at redhat dot com>
- Reply-to: Eli Zaretskii <eliz at gnu dot org>
> From: Josh Stone <jistone@redhat.com>
> Cc: sergiodj@redhat.com, palves@redhat.com, philippe.waroquiers@skynet.be, Josh Stone <jistone@redhat.com>
> Date: Thu, 29 Oct 2015 18:52:26 -0700
>
> gdb/ChangeLog:
>
> 2015-10-29 Josh Stone <jistone@redhat.com>
>
> * NEWS (Changes since GDB 7.10): Mention QCatchSyscalls and new
> GDBserver support for catch syscall.
> * remote.c (PACKET_QCatchSyscalls): New enum.
> (remote_set_syscall_catchpoint): New function.
> (remote_protocol_features): New element for QCatchSyscalls.
> (remote_parse_stop_reply): Parse syscall_entry/return stops.
> (init_remote_ops): Install remote_set_syscall_catchpoint.
> (_initialize_remote): Config QCatchSyscalls.
>
> gdb/doc/ChangeLog:
>
> 2015-10-29 Josh Stone <jistone@redhat.com>
>
> * gdb.texinfo (Remote Configuration): List the QCatchSyscalls packet.
> (Stop Reply Packets): List the syscall entry and return stop reasons.
> (General Query Packets): Describe QCatchSyscalls, and add it to the
> table and detailed list of stub features.
>
> gdb/gdbserver/ChangeLog:
>
> 2015-10-29 Josh Stone <jistone@redhat.com>
>
> * inferiors.h: Include "gdb_vecs.h".
> (struct process_info): Add syscalls_to_catch.
> * inferiors.c (remove_process): Free syscalls_to_catch.
> * remote-utils.c (prepare_resume_reply): Report syscall_entry and
> syscall_resume stops.
> * server.h (UNKNOWN_SYSCALL, ANY_SYSCALL): Define.
> * server.c (handle_general_set): Handle QCatchSyscalls.
> (handle_query): Report support for QCatchSyscalls.
> * target.h (struct target_ops): Add supports_catch_syscall.
> (target_supports_catch_syscall): New macro.
> * linux-low.h (struct linux_target_ops): Add get_syscall_trapinfo.
> (struct lwp_info): Add syscall_state.
> * linux-low.c (SYSCALL_SIGTRAP): Define.
> (handle_extended_wait): Mark syscall_state like an entry.
> (get_syscall_trapinfo): New function, proxy to the_low_target.
> (linux_low_ptrace_options): Enable PTRACE_O_TRACESYSGOOD.
> (linux_low_filter_event): Set ptrace options even before arch-specific
> setup. Either toggle syscall_state entry/return or set ignored.
> (gdb_catching_syscalls_p): New function.
> (gdb_catch_this_syscall_p): New function.
> (linux_wait_1): Handle SYSCALL_SIGTRAP.
> (linux_resume_one_lwp_throw): Add PTRACE_SYSCALL possibility.
> (linux_supports_catch_syscall): New function.
> (linux_target_ops): Install it.
> * linux-x86-low.c (x86_get_syscall_trapinfo): New function.
> (the_low_target): Install it.
> * nto-low.c (nto_target_ops): Install NULL supports_catch_syscall.
> * spu-low.c (spu_target_ops): Likewise.
> * win32-low.c (win32_target_ops): Likewise.
>
> gdb/testsuite/ChangeLog:
>
> 2015-10-29 Josh Stone <jistone@redhat.com>
>
> * gdb.base/catch-syscall.exp: Enable testing for x86 and x86_64 linux
> remote targets.
> (do_syscall_tests): Only test mid-vfork on local or extended-remote.
The documentation parts are OK, with this minor comment and one
question. Here's the comment:
> +Note that if a syscall not member of the list is reported, @value{GDBN}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
"a syscall not in the list" sounds simpler and more clear, and doesn't
change the meaning.
> +will filter it if this syscall is not caught. It is however more efficient
> +to only report the needed syscalls.
The question is about the same sentence: maybe because I don't really
use this stuff, I'm not sure I understand the distinction between
"reported" and "caught" here: what does it mean for a syscall to be
reported, but not caught? Perhaps this text should be clarified to
not cause such confusion.
Thanks.