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

Reply via email to