On 08.07.21 09:58, Florian Bezdeka wrote: > On 07.07.21 22:16, Jan Kiszka via Xenomai wrote: >> From: Jan Kiszka <[email protected]> >> >> This introduces the concept of a debugging helper thread. It can >> register itself with the cobalt core and then wait for ptrace stop and >> resumption events. This can be used to bring the connected devices or >> other parts of the system into a state that can tolerate the potentially >> long interruption and also synchronize again with it to continue. >> >> On stop events (breakpoints, debugger interceptions), the core will >> ensure that the helper is run after all primary-mode threads were put on >> hold and before the debugger will gain control over the whole process. >> For that purpose, the helper will receive a notification when it was >> pending on the corresponding event-wait syscall and will release the >> process into debugging by invoking that syscall to wait for the >> resumption event. >> >> When the debugger resumes the whole process, the helper is resumed >> first, right before all threads that will continue in primary mode are >> released (threads in secondary mode may run earlier but will have to >> wait when trying to enter primary mode). Again, the helper thread >> decides when to continue by calling the event-wait system again, in >> that case in order to wait for the next stop event. >> >> Signed-off-by: Jan Kiszka <[email protected]> >> --- >> include/cobalt/Makefile.am | 1 + >> include/cobalt/ptrace.h | 37 ++++++++++++++ >> include/cobalt/uapi/Makefile.am | 1 + >> include/cobalt/uapi/ptrace.h | 24 +++++++++ >> include/cobalt/uapi/syscall.h | 2 + >> kernel/cobalt/posix/process.c | 34 +++++++++++- >> kernel/cobalt/posix/process.h | 5 ++ >> kernel/cobalt/posix/syscall.c | 86 +++++++++++++++++++++++++++++++ >> lib/cobalt/Makefile.am | 1 + >> lib/cobalt/ptrace.c | 91 +++++++++++++++++++++++++++++++++ >> 10 files changed, 280 insertions(+), 2 deletions(-) >> create mode 100644 include/cobalt/ptrace.h >> create mode 100644 include/cobalt/uapi/ptrace.h >> create mode 100644 lib/cobalt/ptrace.c >> >> diff --git a/include/cobalt/Makefile.am b/include/cobalt/Makefile.am >> index 19e96112e8..e0b203193d 100644 >> --- a/include/cobalt/Makefile.am >> +++ b/include/cobalt/Makefile.am >> @@ -4,6 +4,7 @@ includesub_HEADERS = \ >> fcntl.h \ >> mqueue.h \ >> pthread.h \ >> + ptrace.h \ >> sched.h \ >> semaphore.h \ >> signal.h \ >> diff --git a/include/cobalt/ptrace.h b/include/cobalt/ptrace.h >> new file mode 100644 >> index 0000000000..f5bec56c9d >> --- /dev/null >> +++ b/include/cobalt/ptrace.h >> @@ -0,0 +1,37 @@ >> +/* >> + * Copyright (C) Siemens AG, 2015-2021 >> + * >> + * Authors: >> + * Jan Kiszka <[email protected]> >> + * >> + * This library is free software; you can redistribute it and/or >> + * modify it under the terms of the GNU Lesser General Public >> + * License as published by the Free Software Foundation; either >> + * version 2 of the License, or (at your option) any later version. >> + * >> + * This library is distributed in the hope that it will be useful, >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >> + * Lesser General Public License for more details. >> + * >> + * You should have received a copy of the GNU Lesser General Public >> + * License along with this library; if not, write to the Free Software >> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. >> + */ >> +#ifndef _COBALT_PTRACE_H >> +#define _COBALT_PTRACE_H >> + >> +#include <cobalt/uapi/ptrace.h> >> + >> +#ifdef __cplusplus >> +extern "C" { >> +#endif >> + >> +int cobalt_ptrace_helper_init(void); >> +int cobalt_ptrace_event_wait(int event); >> + >> +#ifdef __cplusplus >> +} >> +#endif >> + >> +#endif /* !_COBALT_PTRACE_H */ >> diff --git a/include/cobalt/uapi/Makefile.am >> b/include/cobalt/uapi/Makefile.am >> index d887213f8e..41076e23d9 100644 >> --- a/include/cobalt/uapi/Makefile.am >> +++ b/include/cobalt/uapi/Makefile.am >> @@ -6,6 +6,7 @@ includesub_HEADERS = \ >> event.h \ >> monitor.h \ >> mutex.h \ >> + ptrace.h \ >> sched.h \ >> sem.h \ >> signal.h \ >> diff --git a/include/cobalt/uapi/ptrace.h b/include/cobalt/uapi/ptrace.h >> new file mode 100644 >> index 0000000000..4e61d458c1 >> --- /dev/null >> +++ b/include/cobalt/uapi/ptrace.h >> @@ -0,0 +1,24 @@ >> +/* >> + * Copyright (C) Siemens AG, 2015-2021 >> + * >> + * This library is free software; you can redistribute it and/or >> + * modify it under the terms of the GNU Lesser General Public >> + * License as published by the Free Software Foundation; either >> + * version 2 of the License, or (at your option) any later version. >> + * >> + * This library is distributed in the hope that it will be useful, >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >> + * Lesser General Public License for more details. >> + * >> + * You should have received a copy of the GNU Lesser General Public >> + * License along with this library; if not, write to the Free Software >> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 >> USA. >> + */ >> +#ifndef _COBALT_UAPI_PTRACE_H >> +#define _COBALT_UAPI_PTRACE_H >> + >> +#define COBALT_PTRACE_EVENT_STOP 0x1 >> +#define COBALT_PTRACE_EVENT_RESUME 0x2 >> + >> +#endif /* !_COBALT_UAPI_PTRACE_H */ >> diff --git a/include/cobalt/uapi/syscall.h b/include/cobalt/uapi/syscall.h >> index a2795a3644..1fb4009d64 100644 >> --- a/include/cobalt/uapi/syscall.h >> +++ b/include/cobalt/uapi/syscall.h >> @@ -128,6 +128,8 @@ >> #define sc_cobalt_clock_nanosleep64 105 >> #define sc_cobalt_clock_getres64 106 >> #define sc_cobalt_clock_adjtime64 107 >> +#define sc_cobalt_ptrace_helper_init 108 >> +#define sc_cobalt_ptrace_event_wait 109 > > Just a note that this affects the onoing Y2038 work. Song, we might have > to adjust the syscall numbers again (assuming that Jan is coming in earlier) >
If you already know how many additional calls you need, I can move my reservation up and keep you block together. Jan -- Siemens AG, T RDA IOT Corporate Competence Center Embedded Linux
