On Thu, 2021-07-08 at 17:03 +0800, [email protected] wrote: > > 在 2021/7/8 下午4:05, Jan Kiszka 写道: > > 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. > > sc_cobalt_mutex_timedlock64 > sc_cobalt_mq_timedsend64 > sc_cobalt_mq_timedreceive64 > sc_cobalt_sigtimedwait64 > sc_cobalt_thread_setschedparam_ex64 > sc_cobalt_thread_getschedparam_ex64 > cond_wait_prologue64 > monitor_wait64 > event_wait64 > select64 > recvmmsg64 > > those implementations are ongoing, please reserve, thanks.
According to our list in [1] clock_adjtime64 is missing. We should follow the order defined in [1] as well. [1] https://gitlab.com/Xenomai/xenomai-hacker-space/-/wikis/y2038/Y2038_Affected_Syscalls > > @Florian, if you are available, please review > mutex_timedlock64,mq_timedsend64 and mq_timedreceive64. thanks. The next thing to review is mutex_timedlock64. I'm waiting for a series containing the cleanup patch (POSIX "violation", time value being optional) to come up. My understanding was that Jans questions have been answered, so we would be able to continue. > > /Song > > > > > Jan > >
