Hi Benjamin,

On 2025-07-31 22:12:25+0200, Benjamin Berg wrote:
> From: Benjamin Berg <[email protected]>
> 
> Add support for sigaction() using the rt_sigaction syscall and implement
> the normal sa_mask helpers.
> 
> For the uapi definitions, everything is copied into nolibc. This avoids
> issues with kernel architecture headers that are not usable with the
> rt_sigaction syscall.
> 
> Signed-off-by: Benjamin Berg <[email protected]>
> 
> ---
> 
> v3:
> - put everything into signal.h and the new asm-signal.h

Hm, did we decide on that? We don't want the per-architecture include
dance, but static overrides should still be fine I think.
Keeping the architecture ifdeffery inside the respective arch header.
And all the generic stuff in a shared header.

> - split out sigset_t tests
> - actually mark signal_check static
> - remove unused string.h include
> - fix SIGUSR2 reset
> - Use integer for signal_check as the signals are emitted from the
>   syscall context.

I don't understand this point, isn't it a signal handler?

> v2:
> - Use newly added macros to check signal emission order
> - Add tests for sigset handling
> - Restore the default handler after signal test
> - make signal_check variable static
> 
> v1:
> - Update architecture support (adding sh)
> - Move sparc sys_rt_sigaction logic into its header
> - Add sig_atomic_t
> - Use new BITSET_* macros
> - Move test into syscall suite
> - Various other small changes
> ---
>  tools/include/nolibc/Makefile                |   1 +
>  tools/include/nolibc/arch-s390.h             |   4 +-
>  tools/include/nolibc/asm-signal.h            | 237 +++++++++++++++++++
>  tools/include/nolibc/signal.h                | 179 ++++++++++++++
>  tools/include/nolibc/sys.h                   |   2 +-
>  tools/include/nolibc/sys/wait.h              |   1 +
>  tools/include/nolibc/time.h                  |   2 +-
>  tools/include/nolibc/types.h                 |   9 +
>  tools/testing/selftests/nolibc/nolibc-test.c | 134 +++++++++++
>  9 files changed, 566 insertions(+), 3 deletions(-)
>  create mode 100644 tools/include/nolibc/asm-signal.h

(...)

> diff --git a/tools/include/nolibc/sys.h b/tools/include/nolibc/sys.h
> index 295e71d34aba..a790e816565b 100644
> --- a/tools/include/nolibc/sys.h
> +++ b/tools/include/nolibc/sys.h
> @@ -14,7 +14,6 @@
>  
>  /* system includes */
>  #include <linux/unistd.h>
> -#include <linux/signal.h>  /* for SIGCHLD */
>  #include <linux/termios.h>
>  #include <linux/mman.h>
>  #include <linux/fs.h>
> @@ -28,6 +27,7 @@
>  #include "errno.h"
>  #include "stdarg.h"
>  #include "types.h"
> +#include "asm-signal.h" /* for SIGCHLD */

#include "signal.h"

>  /* Syscall return helper: takes the syscall value in argument and checks for 
> an
> diff --git a/tools/include/nolibc/sys/wait.h b/tools/include/nolibc/sys/wait.h
> index 56ddb806da7f..e2aa90cc3cf3 100644
> --- a/tools/include/nolibc/sys/wait.h
> +++ b/tools/include/nolibc/sys/wait.h
> @@ -10,6 +10,7 @@
>  #ifndef _NOLIBC_SYS_WAIT_H
>  #define _NOLIBC_SYS_WAIT_H
>  
> +#include <asm/siginfo.h>

#include "signal.h"

The asm/ usage should be hidden.

>  #include "../arch.h"
>  #include "../std.h"
>  #include "../types.h"

(...)

> diff --git a/tools/testing/selftests/nolibc/nolibc-test.c 
> b/tools/testing/selftests/nolibc/nolibc-test.c
> index 180f0436127a..75b96eaa4c65 100644
> --- a/tools/testing/selftests/nolibc/nolibc-test.c
> +++ b/tools/testing/selftests/nolibc/nolibc-test.c
> @@ -1269,6 +1269,138 @@ int test_namespace(void)
>       return ret;
>  }
>  
> +int test_sigset_t(int test_idx)
> +{
> +     int llen;
> +     int ret = 0;
> +
> +#ifdef NOLIBC
> +     if (is_nolibc) {

This looks unnecessary. The #ifdef should be sufficient.

> +             sigset_t sigset;
> +

(...)


Looks nice, thanks!

Reply via email to