On 08.07.21 11:16, Bezdeka, Florian (T RDA IOT SES-DE) wrote: > 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. >
That one is already upstream. So I'm reserving now /* 108-119 reserved for 64-bit time_t syscalls */ > We should follow the order defined in [1] as well. > > [1] > https://gitlab.com/Xenomai/xenomai-hacker-space/-/wikis/y2038/Y2038_Affected_Syscalls > Well, then make sure to send a patch soon that reassigns IDs accordingly. Jan -- Siemens AG, T RDA IOT Corporate Competence Center Embedded Linux
