[PATCH] Add gdb remote protocol handling to strace

Stan Cox scox at redhat.com
Wed Sep 25 13:29:26 UTC 2019

This is the latest version of the gdbserver backend patch.
It also adds a ptrace instantiation of the backend dispatch
mechanism added for the gdbserver backend.  It is a large patch
but much of it is boilerplate changes due to adding and use of the 
tracing_backend struct.  The code is located on the branch 'gdbserver0' 
in the repository:
There is a copr build here:

Thanks to Eugene Syromiatnikov for suggestions and coding effort on the 
ptrace instantiation of the backend dispatch mechanism.

(The backend piece could be split out as a separate piece to simplify 
the patch)

configure*: configure support

  struct tracing_backend:  backend dispatch table.   All of the 
  versions of these routines are independent and self contained except
  for get_regs which needs access to the register structures
  Any change not mentioned is only a change to allow for calling via a
  backend routine

  ptrace instantiation of tracing_backend.  It dispatches to existing 

  dispatch to the ptrace_* routines defined in ptrace_backend.h
  Add 'G' option to indicate how to connect to gdbs backend
  start_init invokes gdbserver, startup_child, startup_attach (via
  attach_tcb) start or connect to the child,
  invoke backend.get_regs, which needs to access the iovec.  gdbserver
  does not require a separate routine to get the syscall number.
  New test

  the gdbserver of the backend methods are defined here.  Communicates
  with gdbserver via the gdb remote protocol and converts to the
  packets that strace expects.  gdbserver has a syscall mode that
  returns information on syscalls via stop packets.  gdbserver has two
  protocol modes, all stop and non stop; both are supported.
  support routines: gdb remote packets are deciphered here
  gdb to native signal translation
  Gets the register set from gdbserver and converts to strace structures.

  Adds a gdbserver specific syscall test.  The test is a gdb/gdbserver

-tests/gen_tests.in / tests/gen_tests.sh
  The gen_tests are also run in gdbserver mode.  Some of the tests do not
  work in the gdbserver environment so they are "blacklisted" with
  # !gdb

  Adds run_strace_gdbserver and run_strace_gdbserver_match_diff
-------------- next part --------------
A non-text attachment was scrubbed...
Name: gdbserver-backend.patch
Type: text/x-patch
Size: 138665 bytes
Desc: not available
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20190925/db28e818/attachment.bin>

More information about the Strace-devel mailing list