This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Linux kernel thread runtime support


Hi Peter,

while looking into your patch in more detail, I found some problems
with your code.  In particular I dislike your general approach using
private_thread_info, since the remote-target already uses this field
inside thread_info.  Thus "forcibly" adding your own version of
private_thread_info, like you do, can lead to undefined behavior.  For
example remote_stopped_by_sw_breakpoint requires information from
private_tread_info and won't work reliably.  Even worse, remote_resume
you call by passing target_resume to the target beneath writes (via
resume_clear_thread_private_info) to the private_thread_info thus
causing a memory corruption.

With your and the remote-target being that interlaced, I don't think
it's possible to separate them cleanly.  That's why I see no other way
than allowing each target to manage its own thread list.

Philipp

On Thu, 22 Dec 2016 17:31:03 +0000
Peter Griffin <peter.griffin@linaro.org> wrote:

> Hi GDB maintainers,
> 
> The following patch implements a Linux kernel thread runtime stratum
> which can be used when using GDB to debug a Linux kernel. For example
> when connecting to a QEMU GDB stub, or OpenOCD which then communicates
> with the target via JTAG or SWD.
> 
> This patch is a refactored version based on the 'Linux kernel
> debugger' GDB plugin written at STMicroelectronics which used to
> be packaged with their JTAG debuggers. There has been some discussion
> previously on the list by myself [1], Kieran [2] and one of the
> original authors at ST Marc Titinger [3].
> 
> This patchset I'm hoping is a lot closer to something which can
> be upstreamed to GDB project after some discussion about structure
> with Yao Qi at Linaro Connect, the code has been refactored to be
> structured much more like the existing upstream thread runtimes (such
> as ravenscar-thread.c and sparc-ravenscar-thread etc).
> 
> Since the original email [1] various helper commands have also been
> migrated into python and merged into the Linux kernel source tree.
> The GDB python extensions, combined with the linux-kthread GDB
> thread runtime implemented in this patchset provide a powerful
> Linux kernel debug solution, and is a working implementation
> of what Andreas talked about on slide 17 and 18 of his talk at GNU
> Cauldron [4].
> 
> I have currently been testing this patchset using mainline GDB
> debugging arm-linux kernels in Qemu and via OpenoCD to real hardware.
> It is straight forward with the current strructure to add new
> architecture support, and I'm looking at adding PowerPC so I can
> easily validate big endian targets.
> 
> What I'm really hoping for now is some patch review on the GDB
> mailing list from the GDB maintainers and community with a view to
> getting this functionality which has been talked about for quite a
> few years finally merged to the upstream GDB project.
> 
> All patch review feedback greatfully received :)
> 
> kind regards,
> 
> Peter.
> 
> [1] https://cygwin.com/ml/gdb/2015-09/msg00032.html
> [2] https://www.sourceware.org/ml/gdb/2016-01/msg00028.html
> [3]
> https://lists.linaro.org/pipermail/linaro-toolchain/2011-November/001754.html
> [4]
> https://gcc.gnu.org/wiki/cauldron2015?action=AttachFile&do=view&target=Andreas+Arnez_+Debugging+Linux+kernel+dumps+with+GDB.pdf
> 
> 
> 
> Peter Griffin (1):
>   Add Linux kernel thread runtime support.
> 
>  gdb/ChangeLog           |   12 +
>  gdb/Makefile.in         |    8 +-
>  gdb/arm-linux-kthread.c |  178 +++++
>  gdb/arm-linux-kthread.h |   27 +
>  gdb/arm-tdep.c          |    4 +
>  gdb/configure.tgt       |    6 +-
>  gdb/gdbarch.c           |   23 +
>  gdb/gdbarch.h           |    5 +
>  gdb/gdbarch.sh          |    3 +
>  gdb/linux-kthread.c     | 1828
> +++++++++++++++++++++++++++++++++++++++++++++++
> gdb/linux-kthread.h     |  223 ++++++ 11 files changed, 2311
> insertions(+), 6 deletions(-) create mode 100644
> gdb/arm-linux-kthread.c create mode 100644 gdb/arm-linux-kthread.h
>  create mode 100644 gdb/linux-kthread.c
>  create mode 100644 gdb/linux-kthread.h
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]