Message ID | 20170613200022.5056-2-yselkowi@redhat.com |
---|---|
State | New |
Headers | show |
Hi, This patch makes lots of function using pthread_t type visible when __POSIX_THREADS is not defined as long as __POSIX_VISIBLE is. However, the guard in sys/_pthreadtypes.h is still checking against __POSIX_THREADS. This leads to build failure on arm-none-eabi targets. Best regards, Thomas On 13/06/17 21:00, Yaakov Selkowitz wrote: > Notably, sigaction and friends are POSIX, but the form of sigpause > currently provided is BSD. > > Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com> > --- > newlib/libc/include/sys/signal.h | 24 ++++++++++++++++-------- > 1 file changed, 16 insertions(+), 8 deletions(-) > > diff --git a/newlib/libc/include/sys/signal.h b/newlib/libc/include/sys/signal.h > index 8d1b53fce..a56f18a1b 100644 > --- a/newlib/libc/include/sys/signal.h > +++ b/newlib/libc/include/sys/signal.h > @@ -152,13 +152,15 @@ typedef struct sigaltstack { > size_t ss_size; /* Stack size. */ > } stack_t; > > +#if __POSIX_VISIBLE > #define SIG_SETMASK 0 /* set mask with sigprocmask() */ > #define SIG_BLOCK 1 /* set of signals to block */ > #define SIG_UNBLOCK 2 /* set of signals to, well, unblock */ > > int _EXFUN(sigprocmask, (int how, const sigset_t *set, sigset_t *oset)); > +#endif > > -#if defined(_POSIX_THREADS) > +#if __POSIX_VISIBLE >= 199506 > int _EXFUN(pthread_sigmask, (int how, const sigset_t *set, sigset_t *oset)); > #endif > > @@ -168,10 +170,14 @@ int _EXFUN(_kill, (pid_t, int)); > #endif /* _COMPILING_NEWLIB */ > #endif /* __CYGWIN__ || __rtems__ */ > > +#if __POSIX_VISIBLE > int _EXFUN(kill, (pid_t, int)); > +#endif > > #if __BSD_VISIBLE || __XSI_VISIBLE >= 4 > int _EXFUN(killpg, (pid_t, int)); > +#endif > +#if __POSIX_VISIBLE > int _EXFUN(sigaction, (int, const struct sigaction *, struct sigaction *)); > int _EXFUN(sigaddset, (sigset_t *, const int)); > int _EXFUN(sigdelset, (sigset_t *, const int)); > @@ -180,7 +186,7 @@ int _EXFUN(sigfillset, (sigset_t *)); > int _EXFUN(sigemptyset, (sigset_t *)); > int _EXFUN(sigpending, (sigset_t *)); > int _EXFUN(sigsuspend, (const sigset_t *)); > -int _EXFUN(sigpause, (int)); > +int _EXFUN(sigwait, (const sigset_t *set, int *sig)); > > #if !defined(__CYGWIN__) && !defined(__rtems__) > /* These depend upon the type of sigset_t, which right now > @@ -192,17 +198,21 @@ int _EXFUN(sigpause, (int)); > #define sigfillset(what) (*(what) = ~(0), 0) > #define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0) > #endif /* !__CYGWIN__ && !__rtems__ */ > -#endif /* __BSD_VISIBLE || __XSI_VISIBLE >= 4 */ > +#endif /* __POSIX_VISIBLE */ > + > +#if __BSD_VISIBLE > +int _EXFUN(sigpause, (int)); > +#endif > > #if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809 > int _EXFUN(sigaltstack, (const stack_t *__restrict, stack_t *__restrict)); > #endif > > -#if defined(_POSIX_THREADS) > +#if __POSIX_VISIBLE >= 199506 > int _EXFUN(pthread_kill, (pthread_t thread, int sig)); > #endif > > -#if defined(_POSIX_REALTIME_SIGNALS) > +#if __POSIX_VISIBLE >= 199309 > > /* 3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76 > NOTE: P1003.1c/D10, p. 39 adds sigwait(). */ > @@ -211,12 +221,10 @@ int _EXFUN(sigwaitinfo, (const sigset_t *set, siginfo_t *info)); > int _EXFUN(sigtimedwait, > (const sigset_t *set, siginfo_t *info, const struct timespec *timeout) > ); > -int _EXFUN(sigwait, (const sigset_t *set, int *sig)); > - > /* 3.3.9 Queue a Signal to a Process, P1003.1b-1993, p. 78 */ > int _EXFUN(sigqueue, (pid_t pid, int signo, const union sigval value)); > > -#endif /* defined(_POSIX_REALTIME_SIGNALS) */ > +#endif /* __POSIX_VISIBLE >= 199309 */ > > #if defined(___AM29K__) > /* These all need to be defined for ANSI C, but I don't think they are >
Actually siginfo_t is also a problem due to sigwaitinfo and sigtimedwait using it, yet it's not defined. Best regards, Thomas On 15/06/17 10:48, Thomas Preudhomme wrote: > Hi, > > This patch makes lots of function using pthread_t type visible when > __POSIX_THREADS is not defined as long as __POSIX_VISIBLE is. However, the guard > in sys/_pthreadtypes.h is still checking against __POSIX_THREADS. This leads to > build failure on arm-none-eabi targets. > > Best regards, > > Thomas > > On 13/06/17 21:00, Yaakov Selkowitz wrote: >> Notably, sigaction and friends are POSIX, but the form of sigpause >> currently provided is BSD. >> >> Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com> >> --- >> newlib/libc/include/sys/signal.h | 24 ++++++++++++++++-------- >> 1 file changed, 16 insertions(+), 8 deletions(-) >> >> diff --git a/newlib/libc/include/sys/signal.h b/newlib/libc/include/sys/signal.h >> index 8d1b53fce..a56f18a1b 100644 >> --- a/newlib/libc/include/sys/signal.h >> +++ b/newlib/libc/include/sys/signal.h >> @@ -152,13 +152,15 @@ typedef struct sigaltstack { >> size_t ss_size; /* Stack size. */ >> } stack_t; >> >> +#if __POSIX_VISIBLE >> #define SIG_SETMASK 0 /* set mask with sigprocmask() */ >> #define SIG_BLOCK 1 /* set of signals to block */ >> #define SIG_UNBLOCK 2 /* set of signals to, well, unblock */ >> >> int _EXFUN(sigprocmask, (int how, const sigset_t *set, sigset_t *oset)); >> +#endif >> >> -#if defined(_POSIX_THREADS) >> +#if __POSIX_VISIBLE >= 199506 >> int _EXFUN(pthread_sigmask, (int how, const sigset_t *set, sigset_t *oset)); >> #endif >> >> @@ -168,10 +170,14 @@ int _EXFUN(_kill, (pid_t, int)); >> #endif /* _COMPILING_NEWLIB */ >> #endif /* __CYGWIN__ || __rtems__ */ >> >> +#if __POSIX_VISIBLE >> int _EXFUN(kill, (pid_t, int)); >> +#endif >> >> #if __BSD_VISIBLE || __XSI_VISIBLE >= 4 >> int _EXFUN(killpg, (pid_t, int)); >> +#endif >> +#if __POSIX_VISIBLE >> int _EXFUN(sigaction, (int, const struct sigaction *, struct sigaction *)); >> int _EXFUN(sigaddset, (sigset_t *, const int)); >> int _EXFUN(sigdelset, (sigset_t *, const int)); >> @@ -180,7 +186,7 @@ int _EXFUN(sigfillset, (sigset_t *)); >> int _EXFUN(sigemptyset, (sigset_t *)); >> int _EXFUN(sigpending, (sigset_t *)); >> int _EXFUN(sigsuspend, (const sigset_t *)); >> -int _EXFUN(sigpause, (int)); >> +int _EXFUN(sigwait, (const sigset_t *set, int *sig)); >> >> #if !defined(__CYGWIN__) && !defined(__rtems__) >> /* These depend upon the type of sigset_t, which right now >> @@ -192,17 +198,21 @@ int _EXFUN(sigpause, (int)); >> #define sigfillset(what) (*(what) = ~(0), 0) >> #define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0) >> #endif /* !__CYGWIN__ && !__rtems__ */ >> -#endif /* __BSD_VISIBLE || __XSI_VISIBLE >= 4 */ >> +#endif /* __POSIX_VISIBLE */ >> + >> +#if __BSD_VISIBLE >> +int _EXFUN(sigpause, (int)); >> +#endif >> >> #if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809 >> int _EXFUN(sigaltstack, (const stack_t *__restrict, stack_t *__restrict)); >> #endif >> >> -#if defined(_POSIX_THREADS) >> +#if __POSIX_VISIBLE >= 199506 >> int _EXFUN(pthread_kill, (pthread_t thread, int sig)); >> #endif >> >> -#if defined(_POSIX_REALTIME_SIGNALS) >> +#if __POSIX_VISIBLE >= 199309 >> >> /* 3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76 >> NOTE: P1003.1c/D10, p. 39 adds sigwait(). */ >> @@ -211,12 +221,10 @@ int _EXFUN(sigwaitinfo, (const sigset_t *set, siginfo_t >> *info)); >> int _EXFUN(sigtimedwait, >> (const sigset_t *set, siginfo_t *info, const struct timespec *timeout) >> ); >> -int _EXFUN(sigwait, (const sigset_t *set, int *sig)); >> - >> /* 3.3.9 Queue a Signal to a Process, P1003.1b-1993, p. 78 */ >> int _EXFUN(sigqueue, (pid_t pid, int signo, const union sigval value)); >> >> -#endif /* defined(_POSIX_REALTIME_SIGNALS) */ >> +#endif /* __POSIX_VISIBLE >= 199309 */ >> >> #if defined(___AM29K__) >> /* These all need to be defined for ANSI C, but I don't think they are >>
Please find attached a proposed git-format patch fixing both these issues: Commit 8a3b3bb4d7224d419cc1a4af60ccf7e70edc876b changed the guard on some functions from _POSIX_THREADS to __POSIX_VISIBLE. As a consequence, some use of siginfo_t and pthread_t became visible under configurations where _POSIX_THREADS is unset but __POSIX_VISIBLE is. Build then fails because the definition of those types are still unavailable. This commit make those type definition visible for __POSIX_VISIBLE configurations. This requires moving the siginfo_t definition out of the RTEMS specific definitions in sys/signal.h while still guarding it against cygwin case. Best regards, Thomas On 15/06/17 13:52, Thomas Preudhomme wrote: > Actually siginfo_t is also a problem due to sigwaitinfo and sigtimedwait using > it, yet it's not defined. > > Best regards, > > Thomas > > On 15/06/17 10:48, Thomas Preudhomme wrote: >> Hi, >> >> This patch makes lots of function using pthread_t type visible when >> __POSIX_THREADS is not defined as long as __POSIX_VISIBLE is. However, the guard >> in sys/_pthreadtypes.h is still checking against __POSIX_THREADS. This leads to >> build failure on arm-none-eabi targets. >> >> Best regards, >> >> Thomas >> >> On 13/06/17 21:00, Yaakov Selkowitz wrote: >>> Notably, sigaction and friends are POSIX, but the form of sigpause >>> currently provided is BSD. >>> >>> Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com> >>> --- >>> newlib/libc/include/sys/signal.h | 24 ++++++++++++++++-------- >>> 1 file changed, 16 insertions(+), 8 deletions(-) >>> >>> diff --git a/newlib/libc/include/sys/signal.h b/newlib/libc/include/sys/signal.h >>> index 8d1b53fce..a56f18a1b 100644 >>> --- a/newlib/libc/include/sys/signal.h >>> +++ b/newlib/libc/include/sys/signal.h >>> @@ -152,13 +152,15 @@ typedef struct sigaltstack { >>> size_t ss_size; /* Stack size. */ >>> } stack_t; >>> >>> +#if __POSIX_VISIBLE >>> #define SIG_SETMASK 0 /* set mask with sigprocmask() */ >>> #define SIG_BLOCK 1 /* set of signals to block */ >>> #define SIG_UNBLOCK 2 /* set of signals to, well, unblock */ >>> >>> int _EXFUN(sigprocmask, (int how, const sigset_t *set, sigset_t *oset)); >>> +#endif >>> >>> -#if defined(_POSIX_THREADS) >>> +#if __POSIX_VISIBLE >= 199506 >>> int _EXFUN(pthread_sigmask, (int how, const sigset_t *set, sigset_t *oset)); >>> #endif >>> >>> @@ -168,10 +170,14 @@ int _EXFUN(_kill, (pid_t, int)); >>> #endif /* _COMPILING_NEWLIB */ >>> #endif /* __CYGWIN__ || __rtems__ */ >>> >>> +#if __POSIX_VISIBLE >>> int _EXFUN(kill, (pid_t, int)); >>> +#endif >>> >>> #if __BSD_VISIBLE || __XSI_VISIBLE >= 4 >>> int _EXFUN(killpg, (pid_t, int)); >>> +#endif >>> +#if __POSIX_VISIBLE >>> int _EXFUN(sigaction, (int, const struct sigaction *, struct sigaction *)); >>> int _EXFUN(sigaddset, (sigset_t *, const int)); >>> int _EXFUN(sigdelset, (sigset_t *, const int)); >>> @@ -180,7 +186,7 @@ int _EXFUN(sigfillset, (sigset_t *)); >>> int _EXFUN(sigemptyset, (sigset_t *)); >>> int _EXFUN(sigpending, (sigset_t *)); >>> int _EXFUN(sigsuspend, (const sigset_t *)); >>> -int _EXFUN(sigpause, (int)); >>> +int _EXFUN(sigwait, (const sigset_t *set, int *sig)); >>> >>> #if !defined(__CYGWIN__) && !defined(__rtems__) >>> /* These depend upon the type of sigset_t, which right now >>> @@ -192,17 +198,21 @@ int _EXFUN(sigpause, (int)); >>> #define sigfillset(what) (*(what) = ~(0), 0) >>> #define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0) >>> #endif /* !__CYGWIN__ && !__rtems__ */ >>> -#endif /* __BSD_VISIBLE || __XSI_VISIBLE >= 4 */ >>> +#endif /* __POSIX_VISIBLE */ >>> + >>> +#if __BSD_VISIBLE >>> +int _EXFUN(sigpause, (int)); >>> +#endif >>> >>> #if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809 >>> int _EXFUN(sigaltstack, (const stack_t *__restrict, stack_t *__restrict)); >>> #endif >>> >>> -#if defined(_POSIX_THREADS) >>> +#if __POSIX_VISIBLE >= 199506 >>> int _EXFUN(pthread_kill, (pthread_t thread, int sig)); >>> #endif >>> >>> -#if defined(_POSIX_REALTIME_SIGNALS) >>> +#if __POSIX_VISIBLE >= 199309 >>> >>> /* 3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76 >>> NOTE: P1003.1c/D10, p. 39 adds sigwait(). */ >>> @@ -211,12 +221,10 @@ int _EXFUN(sigwaitinfo, (const sigset_t *set, siginfo_t >>> *info)); >>> int _EXFUN(sigtimedwait, >>> (const sigset_t *set, siginfo_t *info, const struct timespec *timeout) >>> ); >>> -int _EXFUN(sigwait, (const sigset_t *set, int *sig)); >>> - >>> /* 3.3.9 Queue a Signal to a Process, P1003.1b-1993, p. 78 */ >>> int _EXFUN(sigqueue, (pid_t pid, int signo, const union sigval value)); >>> >>> -#endif /* defined(_POSIX_REALTIME_SIGNALS) */ >>> +#endif /* __POSIX_VISIBLE >= 199309 */ >>> >>> #if defined(___AM29K__) >>> /* These all need to be defined for ANSI C, but I don't think they are >>>From 4e52fd754c2ed00f7cae12f9cdb5787145e95a1d Mon Sep 17 00:00:00 2001 From: Thomas Preud'homme <thomas.preudhomme@arm.com> Date: Thu, 15 Jun 2017 14:09:39 +0100 Subject: [PATCH] Fix guard for siginfo_t and pthread_t definition Commit 8a3b3bb4d7224d419cc1a4af60ccf7e70edc876b changed the guard on some functions from _POSIX_THREADS to __POSIX_VISIBLE. As a consequence, some use of siginfo_t and pthread_t became visible under configurations where _POSIX_THREADS is unset but __POSIX_VISIBLE is. Build then fails because the definition of those types are still unavailable. This commit make those type definition visible for __POSIX_VISIBLE configurations. This requires moving the siginfo_t definition out of the RTEMS specific definitions in sys/signal.h while still guarding it against cygwin case. --- newlib/libc/include/sys/_pthreadtypes.h | 4 ++-- newlib/libc/include/sys/signal.h | 16 ++++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/newlib/libc/include/sys/_pthreadtypes.h b/newlib/libc/include/sys/_pthreadtypes.h index b29f50c..75e9e1c 100644 --- a/newlib/libc/include/sys/_pthreadtypes.h +++ b/newlib/libc/include/sys/_pthreadtypes.h @@ -18,7 +18,7 @@ #ifndef _SYS__PTHREADTYPES_H_ #define _SYS__PTHREADTYPES_H_ -#if defined(_POSIX_THREADS) +#if defined(_POSIX_THREADS) || __POSIX_VISIBLE >= 199506 #include <sys/sched.h> @@ -195,7 +195,7 @@ typedef struct { } pthread_once_t; /* dynamic package initialization */ #define _PTHREAD_ONCE_INIT { 1, 0 } /* is initialized and not run */ -#endif /* defined(_POSIX_THREADS) */ +#endif /* defined(_POSIX_THREADS) || __POSIX_VISIBLE >= 199506 */ /* POSIX Barrier Types */ diff --git a/newlib/libc/include/sys/signal.h b/newlib/libc/include/sys/signal.h index da064cd..ab35718 100644 --- a/newlib/libc/include/sys/signal.h +++ b/newlib/libc/include/sys/signal.h @@ -18,9 +18,11 @@ extern "C" { typedef __sigset_t sigset_t; #endif -#if defined(__rtems__) +#if defined(__CYGWIN__) +#include <cygwin/signal.h> +#else -#if defined(_POSIX_REALTIME_SIGNALS) +#if defined(_POSIX_REALTIME_SIGNALS) || __POSIX_VISIBLE >= 199309 /* sigev_notify values NOTE: P1003.1c/D10, p. 34 adds SIGEV_THREAD. */ @@ -68,7 +70,9 @@ typedef struct { int si_code; /* Cause of the signal */ union sigval si_value; /* Signal value */ } siginfo_t; -#endif +#endif /* defined(_POSIX_REALTIME_SIGNALS) || __POSIX_VISIBLE >= 199309 */ + +#if defined(__rtems__) /* 3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76 */ @@ -108,9 +112,8 @@ struct sigaction { #define sa_sigaction _signal_handlers._sigaction #endif -#elif defined(__CYGWIN__) -#include <cygwin/signal.h> -#else +#else /* defined(__rtems__) */ + #define SA_NOCLDSTOP 1 /* only value supported now for sa_flags */ typedef void (*_sig_func_ptr)(int); @@ -122,6 +125,7 @@ struct sigaction int sa_flags; }; #endif /* defined(__rtems__) */ +#endif /* defined(__CYGWIN__) */ #if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809 /* -- 1.9.1
Ping? Best regards, Thomas On 15/06/17 15:20, Thomas Preudhomme wrote: > Please find attached a proposed git-format patch fixing both these issues: > > Commit 8a3b3bb4d7224d419cc1a4af60ccf7e70edc876b changed the guard on > some functions from _POSIX_THREADS to __POSIX_VISIBLE. As a consequence, > some use of siginfo_t and pthread_t became visible under configurations > where _POSIX_THREADS is unset but __POSIX_VISIBLE is. Build then fails > because the definition of those types are still unavailable. > > This commit make those type definition visible for __POSIX_VISIBLE > configurations. This requires moving the siginfo_t definition out of the > RTEMS specific definitions in sys/signal.h while still guarding it > against cygwin case. > > Best regards, > > Thomas > > On 15/06/17 13:52, Thomas Preudhomme wrote: >> Actually siginfo_t is also a problem due to sigwaitinfo and sigtimedwait using >> it, yet it's not defined. >> >> Best regards, >> >> Thomas >> >> On 15/06/17 10:48, Thomas Preudhomme wrote: >>> Hi, >>> >>> This patch makes lots of function using pthread_t type visible when >>> __POSIX_THREADS is not defined as long as __POSIX_VISIBLE is. However, the guard >>> in sys/_pthreadtypes.h is still checking against __POSIX_THREADS. This leads to >>> build failure on arm-none-eabi targets. >>> >>> Best regards, >>> >>> Thomas >>> >>> On 13/06/17 21:00, Yaakov Selkowitz wrote: >>>> Notably, sigaction and friends are POSIX, but the form of sigpause >>>> currently provided is BSD. >>>> >>>> Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com> >>>> --- >>>> newlib/libc/include/sys/signal.h | 24 ++++++++++++++++-------- >>>> 1 file changed, 16 insertions(+), 8 deletions(-) >>>> >>>> diff --git a/newlib/libc/include/sys/signal.h >>>> b/newlib/libc/include/sys/signal.h >>>> index 8d1b53fce..a56f18a1b 100644 >>>> --- a/newlib/libc/include/sys/signal.h >>>> +++ b/newlib/libc/include/sys/signal.h >>>> @@ -152,13 +152,15 @@ typedef struct sigaltstack { >>>> size_t ss_size; /* Stack size. */ >>>> } stack_t; >>>> >>>> +#if __POSIX_VISIBLE >>>> #define SIG_SETMASK 0 /* set mask with sigprocmask() */ >>>> #define SIG_BLOCK 1 /* set of signals to block */ >>>> #define SIG_UNBLOCK 2 /* set of signals to, well, unblock */ >>>> >>>> int _EXFUN(sigprocmask, (int how, const sigset_t *set, sigset_t *oset)); >>>> +#endif >>>> >>>> -#if defined(_POSIX_THREADS) >>>> +#if __POSIX_VISIBLE >= 199506 >>>> int _EXFUN(pthread_sigmask, (int how, const sigset_t *set, sigset_t *oset)); >>>> #endif >>>> >>>> @@ -168,10 +170,14 @@ int _EXFUN(_kill, (pid_t, int)); >>>> #endif /* _COMPILING_NEWLIB */ >>>> #endif /* __CYGWIN__ || __rtems__ */ >>>> >>>> +#if __POSIX_VISIBLE >>>> int _EXFUN(kill, (pid_t, int)); >>>> +#endif >>>> >>>> #if __BSD_VISIBLE || __XSI_VISIBLE >= 4 >>>> int _EXFUN(killpg, (pid_t, int)); >>>> +#endif >>>> +#if __POSIX_VISIBLE >>>> int _EXFUN(sigaction, (int, const struct sigaction *, struct sigaction *)); >>>> int _EXFUN(sigaddset, (sigset_t *, const int)); >>>> int _EXFUN(sigdelset, (sigset_t *, const int)); >>>> @@ -180,7 +186,7 @@ int _EXFUN(sigfillset, (sigset_t *)); >>>> int _EXFUN(sigemptyset, (sigset_t *)); >>>> int _EXFUN(sigpending, (sigset_t *)); >>>> int _EXFUN(sigsuspend, (const sigset_t *)); >>>> -int _EXFUN(sigpause, (int)); >>>> +int _EXFUN(sigwait, (const sigset_t *set, int *sig)); >>>> >>>> #if !defined(__CYGWIN__) && !defined(__rtems__) >>>> /* These depend upon the type of sigset_t, which right now >>>> @@ -192,17 +198,21 @@ int _EXFUN(sigpause, (int)); >>>> #define sigfillset(what) (*(what) = ~(0), 0) >>>> #define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0) >>>> #endif /* !__CYGWIN__ && !__rtems__ */ >>>> -#endif /* __BSD_VISIBLE || __XSI_VISIBLE >= 4 */ >>>> +#endif /* __POSIX_VISIBLE */ >>>> + >>>> +#if __BSD_VISIBLE >>>> +int _EXFUN(sigpause, (int)); >>>> +#endif >>>> >>>> #if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809 >>>> int _EXFUN(sigaltstack, (const stack_t *__restrict, stack_t *__restrict)); >>>> #endif >>>> >>>> -#if defined(_POSIX_THREADS) >>>> +#if __POSIX_VISIBLE >= 199506 >>>> int _EXFUN(pthread_kill, (pthread_t thread, int sig)); >>>> #endif >>>> >>>> -#if defined(_POSIX_REALTIME_SIGNALS) >>>> +#if __POSIX_VISIBLE >= 199309 >>>> >>>> /* 3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76 >>>> NOTE: P1003.1c/D10, p. 39 adds sigwait(). */ >>>> @@ -211,12 +221,10 @@ int _EXFUN(sigwaitinfo, (const sigset_t *set, siginfo_t >>>> *info)); >>>> int _EXFUN(sigtimedwait, >>>> (const sigset_t *set, siginfo_t *info, const struct timespec *timeout) >>>> ); >>>> -int _EXFUN(sigwait, (const sigset_t *set, int *sig)); >>>> - >>>> /* 3.3.9 Queue a Signal to a Process, P1003.1b-1993, p. 78 */ >>>> int _EXFUN(sigqueue, (pid_t pid, int signo, const union sigval value)); >>>> >>>> -#endif /* defined(_POSIX_REALTIME_SIGNALS) */ >>>> +#endif /* __POSIX_VISIBLE >= 199309 */ >>>> >>>> #if defined(___AM29K__) >>>> /* These all need to be defined for ANSI C, but I don't think they are >>>>From 4e52fd754c2ed00f7cae12f9cdb5787145e95a1d Mon Sep 17 00:00:00 2001 From: Thomas Preud'homme <thomas.preudhomme@arm.com> Date: Thu, 15 Jun 2017 14:09:39 +0100 Subject: [PATCH] Fix guard for siginfo_t and pthread_t definition Commit 8a3b3bb4d7224d419cc1a4af60ccf7e70edc876b changed the guard on some functions from _POSIX_THREADS to __POSIX_VISIBLE. As a consequence, some use of siginfo_t and pthread_t became visible under configurations where _POSIX_THREADS is unset but __POSIX_VISIBLE is. Build then fails because the definition of those types are still unavailable. This commit make those type definition visible for __POSIX_VISIBLE configurations. This requires moving the siginfo_t definition out of the RTEMS specific definitions in sys/signal.h while still guarding it against cygwin case. --- newlib/libc/include/sys/_pthreadtypes.h | 4 ++-- newlib/libc/include/sys/signal.h | 16 ++++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/newlib/libc/include/sys/_pthreadtypes.h b/newlib/libc/include/sys/_pthreadtypes.h index b29f50c..75e9e1c 100644 --- a/newlib/libc/include/sys/_pthreadtypes.h +++ b/newlib/libc/include/sys/_pthreadtypes.h @@ -18,7 +18,7 @@ #ifndef _SYS__PTHREADTYPES_H_ #define _SYS__PTHREADTYPES_H_ -#if defined(_POSIX_THREADS) +#if defined(_POSIX_THREADS) || __POSIX_VISIBLE >= 199506 #include <sys/sched.h> @@ -195,7 +195,7 @@ typedef struct { } pthread_once_t; /* dynamic package initialization */ #define _PTHREAD_ONCE_INIT { 1, 0 } /* is initialized and not run */ -#endif /* defined(_POSIX_THREADS) */ +#endif /* defined(_POSIX_THREADS) || __POSIX_VISIBLE >= 199506 */ /* POSIX Barrier Types */ diff --git a/newlib/libc/include/sys/signal.h b/newlib/libc/include/sys/signal.h index da064cd..ab35718 100644 --- a/newlib/libc/include/sys/signal.h +++ b/newlib/libc/include/sys/signal.h @@ -18,9 +18,11 @@ extern "C" { typedef __sigset_t sigset_t; #endif -#if defined(__rtems__) +#if defined(__CYGWIN__) +#include <cygwin/signal.h> +#else -#if defined(_POSIX_REALTIME_SIGNALS) +#if defined(_POSIX_REALTIME_SIGNALS) || __POSIX_VISIBLE >= 199309 /* sigev_notify values NOTE: P1003.1c/D10, p. 34 adds SIGEV_THREAD. */ @@ -68,7 +70,9 @@ typedef struct { int si_code; /* Cause of the signal */ union sigval si_value; /* Signal value */ } siginfo_t; -#endif +#endif /* defined(_POSIX_REALTIME_SIGNALS) || __POSIX_VISIBLE >= 199309 */ + +#if defined(__rtems__) /* 3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76 */ @@ -108,9 +112,8 @@ struct sigaction { #define sa_sigaction _signal_handlers._sigaction #endif -#elif defined(__CYGWIN__) -#include <cygwin/signal.h> -#else +#else /* defined(__rtems__) */ + #define SA_NOCLDSTOP 1 /* only value supported now for sa_flags */ typedef void (*_sig_func_ptr)(int); @@ -122,6 +125,7 @@ struct sigaction int sa_flags; }; #endif /* defined(__rtems__) */ +#endif /* defined(__CYGWIN__) */ #if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809 /* -- 1.9.1
On Jun 15 15:20, Thomas Preudhomme wrote: > Please find attached a proposed git-format patch fixing both these issues: > > Commit 8a3b3bb4d7224d419cc1a4af60ccf7e70edc876b changed the guard on > some functions from _POSIX_THREADS to __POSIX_VISIBLE. As a consequence, > some use of siginfo_t and pthread_t became visible under configurations > where _POSIX_THREADS is unset but __POSIX_VISIBLE is. Build then fails > because the definition of those types are still unavailable. > > This commit make those type definition visible for __POSIX_VISIBLE > configurations. This requires moving the siginfo_t definition out of the > RTEMS specific definitions in sys/signal.h while still guarding it > against cygwin case. Pushed. Thanks, Corinna -- Corinna Vinschen Cygwin Maintainer Red Hat
diff --git a/newlib/libc/include/sys/signal.h b/newlib/libc/include/sys/signal.h index 8d1b53fce..a56f18a1b 100644 --- a/newlib/libc/include/sys/signal.h +++ b/newlib/libc/include/sys/signal.h @@ -152,13 +152,15 @@ typedef struct sigaltstack { size_t ss_size; /* Stack size. */ } stack_t; +#if __POSIX_VISIBLE #define SIG_SETMASK 0 /* set mask with sigprocmask() */ #define SIG_BLOCK 1 /* set of signals to block */ #define SIG_UNBLOCK 2 /* set of signals to, well, unblock */ int _EXFUN(sigprocmask, (int how, const sigset_t *set, sigset_t *oset)); +#endif -#if defined(_POSIX_THREADS) +#if __POSIX_VISIBLE >= 199506 int _EXFUN(pthread_sigmask, (int how, const sigset_t *set, sigset_t *oset)); #endif @@ -168,10 +170,14 @@ int _EXFUN(_kill, (pid_t, int)); #endif /* _COMPILING_NEWLIB */ #endif /* __CYGWIN__ || __rtems__ */ +#if __POSIX_VISIBLE int _EXFUN(kill, (pid_t, int)); +#endif #if __BSD_VISIBLE || __XSI_VISIBLE >= 4 int _EXFUN(killpg, (pid_t, int)); +#endif +#if __POSIX_VISIBLE int _EXFUN(sigaction, (int, const struct sigaction *, struct sigaction *)); int _EXFUN(sigaddset, (sigset_t *, const int)); int _EXFUN(sigdelset, (sigset_t *, const int)); @@ -180,7 +186,7 @@ int _EXFUN(sigfillset, (sigset_t *)); int _EXFUN(sigemptyset, (sigset_t *)); int _EXFUN(sigpending, (sigset_t *)); int _EXFUN(sigsuspend, (const sigset_t *)); -int _EXFUN(sigpause, (int)); +int _EXFUN(sigwait, (const sigset_t *set, int *sig)); #if !defined(__CYGWIN__) && !defined(__rtems__) /* These depend upon the type of sigset_t, which right now @@ -192,17 +198,21 @@ int _EXFUN(sigpause, (int)); #define sigfillset(what) (*(what) = ~(0), 0) #define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0) #endif /* !__CYGWIN__ && !__rtems__ */ -#endif /* __BSD_VISIBLE || __XSI_VISIBLE >= 4 */ +#endif /* __POSIX_VISIBLE */ + +#if __BSD_VISIBLE +int _EXFUN(sigpause, (int)); +#endif #if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809 int _EXFUN(sigaltstack, (const stack_t *__restrict, stack_t *__restrict)); #endif -#if defined(_POSIX_THREADS) +#if __POSIX_VISIBLE >= 199506 int _EXFUN(pthread_kill, (pthread_t thread, int sig)); #endif -#if defined(_POSIX_REALTIME_SIGNALS) +#if __POSIX_VISIBLE >= 199309 /* 3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76 NOTE: P1003.1c/D10, p. 39 adds sigwait(). */ @@ -211,12 +221,10 @@ int _EXFUN(sigwaitinfo, (const sigset_t *set, siginfo_t *info)); int _EXFUN(sigtimedwait, (const sigset_t *set, siginfo_t *info, const struct timespec *timeout) ); -int _EXFUN(sigwait, (const sigset_t *set, int *sig)); - /* 3.3.9 Queue a Signal to a Process, P1003.1b-1993, p. 78 */ int _EXFUN(sigqueue, (pid_t pid, int signo, const union sigval value)); -#endif /* defined(_POSIX_REALTIME_SIGNALS) */ +#endif /* __POSIX_VISIBLE >= 199309 */ #if defined(___AM29K__) /* These all need to be defined for ANSI C, but I don't think they are
Notably, sigaction and friends are POSIX, but the form of sigpause currently provided is BSD. Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com> --- newlib/libc/include/sys/signal.h | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) -- 2.12.3