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
> > 

Reply via email to