On 08.07.21 17:23, Jan Kiszka wrote:
> 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 */
> 

Classic off-by-one: 108-108, i.e. 11 IDs.

Jan

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