From: Thomas Preudhomme <thomas.preudhomme@foss.arm.com>
To: newlib@sourceware.org
Subject: Re: [PATCH] Feature test macros overhaul: signal.h (part 3)
Date: Thu, 15 Jun 2017 14:20:00 -0000 [thread overview]
Message-ID: <7047def8-194f-ca3a-0b46-dbf51a8d4b02@foss.arm.com> (raw)
In-Reply-To: <6636d7b3-cac2-d385-ef12-e7bed8f70eae@foss.arm.com>
[-- Attachment #1: Type: text/plain, Size: 4862 bytes --]
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
>>>
[-- Attachment #2: 0001-Fix-guard-for-siginfo_t-and-pthread_t-definition.patch --]
[-- Type: text/x-patch, Size: 3075 bytes --]
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
next prev parent reply other threads:[~2017-06-15 14:20 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-13 20:00 [PATCH] stdio.h: guard function macros with !__cplusplus Yaakov Selkowitz
2017-06-13 20:01 ` [PATCH] Feature test macros overhaul: signal.h (part 3) Yaakov Selkowitz
2017-06-15 9:48 ` Thomas Preudhomme
2017-06-15 12:52 ` Thomas Preudhomme
2017-06-15 14:20 ` Thomas Preudhomme [this message]
2017-06-19 8:29 ` Thomas Preudhomme
2017-06-19 11:02 ` Corinna Vinschen
2017-06-14 8:48 ` [PATCH] stdio.h: guard function macros with !__cplusplus Corinna Vinschen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7047def8-194f-ca3a-0b46-dbf51a8d4b02@foss.arm.com \
--to=thomas.preudhomme@foss.arm.com \
--cc=newlib@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).