Skip to content
Snippets Groups Projects
Select Git revision
0 results

linux-low.c

Blame
  • Forked from Petteri Mäki / binutils-gdb
    Source project has a limited visibility.
    • Josh Stone's avatar
      82075af2
      Implement 'catch syscall' for gdbserver · 82075af2
      Josh Stone authored
      This adds a new QCatchSyscalls packet to enable 'catch syscall', and new
      stop reasons "syscall_entry" and "syscall_return" for those events.  It
      is currently only supported on Linux x86 and x86_64.
      
      gdb/ChangeLog:
      
      2016-01-12  Josh Stone  <jistone@redhat.com>
      	    Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* NEWS (Changes since GDB 7.10): Mention QCatchSyscalls and the
      	syscall_entry and syscall_return stop reasons.  Mention GDB
      	support for remote 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.
      	* linux-nat.h (struct lwp_info) <syscall_state>: Comment typo.
      
      gdb/doc/ChangeLog:
      
      2016-01-12  Josh Stone  <jistone@redhat.com>
      	    Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* 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 the detailed list of stub features.
      
      gdb/gdbserver/ChangeLog:
      
      2016-01-12  Josh Stone  <jistone@redhat.com>
      	    Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* 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_return 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 (handle_extended_wait): Mark syscall_state as an entry.
      	Maintain syscall_state and syscalls_to_catch across exec.
      	(get_syscall_trapinfo): New function, proxy to the_low_target.
      	(linux_low_ptrace_options): Enable PTRACE_O_TRACESYSGOOD.
      	(linux_low_filter_event): Toggle syscall_state entry/return for
      	syscall traps, and set it ignored for all others.
      	(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.
      
      gdb/testsuite/ChangeLog:
      
      2016-01-12  Josh Stone  <jistone@redhat.com>
      	    Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* gdb.base/catch-syscall.c (do_execve): New variable.
      	(main): Conditionally trigger an execve.
      	* gdb.base/catch-syscall.exp: Enable testing for remote targets.
      	(test_catch_syscall_execve): New, check entry/return across execve.
      	(do_syscall_tests): Call test_catch_syscall_execve.
      82075af2
      History
      Implement 'catch syscall' for gdbserver
      Josh Stone authored
      This adds a new QCatchSyscalls packet to enable 'catch syscall', and new
      stop reasons "syscall_entry" and "syscall_return" for those events.  It
      is currently only supported on Linux x86 and x86_64.
      
      gdb/ChangeLog:
      
      2016-01-12  Josh Stone  <jistone@redhat.com>
      	    Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* NEWS (Changes since GDB 7.10): Mention QCatchSyscalls and the
      	syscall_entry and syscall_return stop reasons.  Mention GDB
      	support for remote 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.
      	* linux-nat.h (struct lwp_info) <syscall_state>: Comment typo.
      
      gdb/doc/ChangeLog:
      
      2016-01-12  Josh Stone  <jistone@redhat.com>
      	    Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* 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 the detailed list of stub features.
      
      gdb/gdbserver/ChangeLog:
      
      2016-01-12  Josh Stone  <jistone@redhat.com>
      	    Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* 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_return 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 (handle_extended_wait): Mark syscall_state as an entry.
      	Maintain syscall_state and syscalls_to_catch across exec.
      	(get_syscall_trapinfo): New function, proxy to the_low_target.
      	(linux_low_ptrace_options): Enable PTRACE_O_TRACESYSGOOD.
      	(linux_low_filter_event): Toggle syscall_state entry/return for
      	syscall traps, and set it ignored for all others.
      	(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.
      
      gdb/testsuite/ChangeLog:
      
      2016-01-12  Josh Stone  <jistone@redhat.com>
      	    Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* gdb.base/catch-syscall.c (do_execve): New variable.
      	(main): Conditionally trigger an execve.
      	* gdb.base/catch-syscall.exp: Enable testing for remote targets.
      	(test_catch_syscall_execve): New, check entry/return across execve.
      	(do_syscall_tests): Call test_catch_syscall_execve.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.