On 03.06.19 19:26, Philippe Gerum via Xenomai wrote:
On 11/30/18 9:03 PM, Jan Kiszka wrote:
These patches are sticking in my queue for more than 3 years now which
is bad. The good thing is that they were able to mature, at least on
x86, over that time because we are actually using them.
Two issues are addressed with these changes:
1. Ensure that threads that were stopped for debugging in primary mode
will also be resumed in that mode. This prevents deviating behavior
compared to non-debugged execution.
2. If one thread in a process hits a debugging condition and is about to
bring the whole process into stopped state, ensure that all other RT
threads are stopped immediately. This prevents that, because the
interrupted thread first needs to go to Linux in order to start the
process stop, other threads can continue running too far, changing
the process state so that debugging becomes harder if not impossible.
To provide these properties, the core needs two small new hooks from
I-pipe. Separate patches will be sent against 4.14 that provide these,
so far for x86 and ARM only.
Furthermore, this series likely depends on the mayday cleanup I sent
earlier, at least it was never used without that (you don't want to
debug without it). That also raises the question how to manage the
I-pipe feature dependencies best in order work around or simply exclude
old I-pipe releases.
Please review carefully if the design and implementation make sense. As
I said, we are using it, so it is not completely broken. But I may have
overseen some ugly corner cases nevertheless.
Unless too many issues surface, I would like to get this feature into
master before 3.1, along with the needed hooks in I-pipe (including
active stable trees).
Jan
Jan Kiszka (7):
cobalt/kernel: Rework register/unregister_debugged_thread
cobalt/kernel: Switch back ptraced primary mode threads on resume
cobalt/kernel: Reintroduce process-local thread list
cobalt/kernel: Introduce XNDBGSTOP
cobalt/kernel: Implement synchronous stop and resume for process
debugging
cobalt/kernel: Clear mayday request of relaxed task
testsuite/smokey: gdb-based debugging test
configure.ac | 1 +
include/cobalt/kernel/thread.h | 2 +-
include/cobalt/uapi/kernel/thread.h | 5 +-
kernel/cobalt/posix/process.c | 218 ++++++++++++++++++++++++-
kernel/cobalt/posix/process.h | 4 +-
kernel/cobalt/posix/thread.c | 4 +-
kernel/cobalt/posix/thread.h | 2 +-
kernel/cobalt/thread.c | 18 ++-
testsuite/smokey/Makefile.am | 1 +
testsuite/smokey/gdb/Makefile.am | 13 ++
testsuite/smokey/gdb/gdb.c | 310 ++++++++++++++++++++++++++++++++++++
11 files changed, 564 insertions(+), 14 deletions(-)
create mode 100644 testsuite/smokey/gdb/Makefile.am
create mode 100644 testsuite/smokey/gdb/gdb.c
Ack. The pipeline related bits are in -noarch already.
Thanks for the review. Rebased (was clean) and applied to next now.
Jan
--
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux