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.

Jan

-- 
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux

Reply via email to