diff mbox series

sighold02: Fix muslc builds by removing __SIGRTMIN

Message ID 20220425092118.21619-1-rpalethorpe@suse.com
State Accepted
Headers show
Series sighold02: Fix muslc builds by removing __SIGRTMIN | expand

Commit Message

Richard Palethorpe April 25, 2022, 9:21 a.m. UTC
The minimum real-time signal is always 32 according to
signal(7). Meanwhile __SIGRTMIN is not defined in all lib C
implementations.

Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com>
---
 testcases/kernel/syscalls/sighold/sighold02.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Cyril Hrubis April 25, 2022, 9:35 a.m. UTC | #1
Hi!
> The minimum real-time signal is always 32 according to
> signal(7). Meanwhile __SIGRTMIN is not defined in all lib C
> implementations.
> 
> Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com>
> ---
>  testcases/kernel/syscalls/sighold/sighold02.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/testcases/kernel/syscalls/sighold/sighold02.c b/testcases/kernel/syscalls/sighold/sighold02.c
> index daa86192e..1cfb7688b 100644
> --- a/testcases/kernel/syscalls/sighold/sighold02.c
> +++ b/testcases/kernel/syscalls/sighold/sighold02.c
> @@ -33,7 +33,7 @@ static int sigs_map[NUMSIGS];
>  
>  static int skip_sig(int sig)
>  {
> -	if (sig >= __SIGRTMIN && sig < SIGRTMIN)
> +	if (sig >= 32 && sig < SIGRTMIN)
>  		return 1;

Looks like __SIGRTMIN is defined to 32 for all architectures glibc
supports, so this should be pretty much safe.

Reviewed-by: Cyril Hrubis <chrubis@suse.cz>
Petr Vorel April 25, 2022, 11:08 a.m. UTC | #2
Hi all,

> Hi!
> > The minimum real-time signal is always 32 according to
> > signal(7). Meanwhile __SIGRTMIN is not defined in all lib C
> > implementations.

> > Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com>
> > ---
> >  testcases/kernel/syscalls/sighold/sighold02.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)

> > diff --git a/testcases/kernel/syscalls/sighold/sighold02.c b/testcases/kernel/syscalls/sighold/sighold02.c
> > index daa86192e..1cfb7688b 100644
> > --- a/testcases/kernel/syscalls/sighold/sighold02.c
> > +++ b/testcases/kernel/syscalls/sighold/sighold02.c
> > @@ -33,7 +33,7 @@ static int sigs_map[NUMSIGS];

> >  static int skip_sig(int sig)
> >  {
> > -	if (sig >= __SIGRTMIN && sig < SIGRTMIN)
> > +	if (sig >= 32 && sig < SIGRTMIN)
> >  		return 1;

> Looks like __SIGRTMIN is defined to 32 for all architectures glibc
> supports, so this should be pretty much safe.

> Reviewed-by: Cyril Hrubis <chrubis@suse.cz>

Well, we have __SIGRTMIN 32 fallback definition in include/lapi/signal.h,
we use it in few tests. It was used in old variant, but you removed it during
rewrite in 38e69985cb2707a056f9c86a90c8570c721e6a7d.

BTW I looked whether we could use SIGRTMIN instead of underscore variants,
I suppose we can't (looks like SIGRTMIN is 32 + something):

musl:
#define SIGRTMIN  (__libc_current_sigrtmin())
src/signal/sigrtmin.c
#include <signal.h>
int __libc_current_sigrtmin()
{
    return 35;
}

glibc:
static int current_rtmin = __SIGRTMIN + RESERVED_SIGRT;
(current_rtmin is used in __libc_current_sigrtmin(), RESERVED_SIGRT is defined 0 and 2)

Kind regards,
Petr
Petr Vorel April 25, 2022, 11:09 a.m. UTC | #3
> Hi all,

> > Hi!
> > > The minimum real-time signal is always 32 according to
> > > signal(7). Meanwhile __SIGRTMIN is not defined in all lib C
> > > implementations.

> > > Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com>
> > > ---
> > >  testcases/kernel/syscalls/sighold/sighold02.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)

> > > diff --git a/testcases/kernel/syscalls/sighold/sighold02.c b/testcases/kernel/syscalls/sighold/sighold02.c
> > > index daa86192e..1cfb7688b 100644
> > > --- a/testcases/kernel/syscalls/sighold/sighold02.c
> > > +++ b/testcases/kernel/syscalls/sighold/sighold02.c
> > > @@ -33,7 +33,7 @@ static int sigs_map[NUMSIGS];

> > >  static int skip_sig(int sig)
> > >  {
> > > -	if (sig >= __SIGRTMIN && sig < SIGRTMIN)
> > > +	if (sig >= 32 && sig < SIGRTMIN)
> > >  		return 1;

> > Looks like __SIGRTMIN is defined to 32 for all architectures glibc
> > supports, so this should be pretty much safe.

> > Reviewed-by: Cyril Hrubis <chrubis@suse.cz>

> Well, we have __SIGRTMIN 32 fallback definition in include/lapi/signal.h,
> we use it in few tests. It was used in old variant, but you removed it during
> rewrite in 38e69985cb2707a056f9c86a90c8570c721e6a7d.

> BTW I looked whether we could use SIGRTMIN instead of underscore variants,
> I suppose we can't (looks like SIGRTMIN is 32 + something):

Ah, looking at the code "if (sig >= __SIGRTMIN && sig < SIGRTMIN)",
we need both underscore and non-underscore.

Let's go back to use lapi again.

Kind regards,
Petr

> musl:
> #define SIGRTMIN  (__libc_current_sigrtmin())
> src/signal/sigrtmin.c
> #include <signal.h>
> int __libc_current_sigrtmin()
> {
>     return 35;
> }

> glibc:
> static int current_rtmin = __SIGRTMIN + RESERVED_SIGRT;
> (current_rtmin is used in __libc_current_sigrtmin(), RESERVED_SIGRT is defined 0 and 2)

> Kind regards,
> Petr
Cyril Hrubis April 25, 2022, 11:23 a.m. UTC | #4
Hi!
> Ah, looking at the code "if (sig >= __SIGRTMIN && sig < SIGRTMIN)",
> we need both underscore and non-underscore.

This is code to actually skip signals used internally by libc, so
anything between 32 and SIGRTMIN. It's pretty safe to hardcode the first
value to 32 since that is the number of signals allocated by kernel
which is not going to change.

I guess that we can add something as SIGRTMIN_KERN or SIGRTMIN_BASE and
define it to 32 in some LTP header instead of hardcoding 32 into
testcases, which would be way better than misusing glibc internal
__SIGRTMIN.
Petr Vorel April 27, 2022, 7:57 a.m. UTC | #5
> Hi!
> > Ah, looking at the code "if (sig >= __SIGRTMIN && sig < SIGRTMIN)",
> > we need both underscore and non-underscore.

> This is code to actually skip signals used internally by libc, so
> anything between 32 and SIGRTMIN. It's pretty safe to hardcode the first
> value to 32 since that is the number of signals allocated by kernel
> which is not going to change.
Ah, right!

> I guess that we can add something as SIGRTMIN_KERN or SIGRTMIN_BASE and
> define it to 32 in some LTP header instead of hardcoding 32 into
> testcases, which would be way better than misusing glibc internal
> __SIGRTMIN.
+1

Kind regards,
Petr
diff mbox series

Patch

diff --git a/testcases/kernel/syscalls/sighold/sighold02.c b/testcases/kernel/syscalls/sighold/sighold02.c
index daa86192e..1cfb7688b 100644
--- a/testcases/kernel/syscalls/sighold/sighold02.c
+++ b/testcases/kernel/syscalls/sighold/sighold02.c
@@ -33,7 +33,7 @@  static int sigs_map[NUMSIGS];
 
 static int skip_sig(int sig)
 {
-	if (sig >= __SIGRTMIN && sig < SIGRTMIN)
+	if (sig >= 32 && sig < SIGRTMIN)
 		return 1;
 
 	switch (sig) {