diff options
author | Viktor Dukhovni <ietf-dane@dukhovni.org> | 2021-04-26 16:20:37 -0400 |
---|---|---|
committer | Viktor Dukhovni <ietf-dane@dukhovni.org> | 2021-04-27 01:38:35 -0400 |
commit | 37a24fd0db6f4630d1cc3411a12f31eeafa67e90 (patch) | |
tree | 0ebdfe97b0c50f1c7cdc5165fac99f9978fa1f3a | |
parent | d04a758296afdfd12300b0466967a42276a2c5a8 (diff) | |
download | haskell-37a24fd0db6f4630d1cc3411a12f31eeafa67e90.tar.gz |
Fix pthread_setname_np in itimer for Darwin
_POSIX_SOURCE is too strict, we need _DARWIN_C_SOURCE, otherwise
<pthread.h> does not expose pthread_setname_np(3).
-rw-r--r-- | rts/posix/Itimer.c | 21 | ||||
-rw-r--r-- | rts/posix/OSThreads.c | 17 |
2 files changed, 34 insertions, 4 deletions
diff --git a/rts/posix/Itimer.c b/rts/posix/Itimer.c index 80925df703..98b23f623e 100644 --- a/rts/posix/Itimer.c +++ b/rts/posix/Itimer.c @@ -18,6 +18,27 @@ */ #include "PosixSource.h" + +/* We've defined _POSIX_SOURCE via "PosixSource.h", and yet still use + some non-POSIX features. With _POSIX_SOURCE defined, visibility of + non-POSIX extension prototypes requires _DARWIN_C_SOURCE on Mac OS X and + __BSD_VISIBLE on FreeBSD and DragonflyBSD. Otherwise, for example, code + using pthread_setname_np(3) and variants will not compile. We must + therefore define the additional macros that expose non-POSIX APIs early, + before any of the relevant system headers are included via "Rts.h". + + An alternative approach could be to write portable wrappers or stubs for all + the non-posix functions in a C-module that does not include "PosixSource.h", + and then use only POSIX features and the portable wrapper functions in all + other C-modules. */ +#include "ghcconfig.h" +#if defined(freebsd_HOST_OS) || defined(dragonfly_HOST_OS) +#define __BSD_VISIBLE 1 +#endif +#if defined(darwin_HOST_OS) +#define _DARWIN_C_SOURCE 1 +#endif + #include "Rts.h" /* diff --git a/rts/posix/OSThreads.c b/rts/posix/OSThreads.c index 6be267d453..3da21c010d 100644 --- a/rts/posix/OSThreads.c +++ b/rts/posix/OSThreads.c @@ -9,14 +9,23 @@ #include "PosixSource.h" +/* We've defined _POSIX_SOURCE via "PosixSource.h", and yet still use + some non-POSIX features. With _POSIX_SOURCE defined, visibility of + non-POSIX extension prototypes requires _DARWIN_C_SOURCE on Mac OS X and + __BSD_VISIBLE on FreeBSD and DragonflyBSD. Otherwise, for example, code + using pthread_setname_np(3) and variants will not compile. We must + therefore define the additional macros that expose non-POSIX APIs early, + before any of the relevant system headers are included via "Rts.h". + + An alternative approach could be to write portable wrappers or stubs for all + the non-posix functions in a C-module that does not include "PosixSource.h", + and then use only POSIX features and the portable wrapper functions in all + other C-modules. */ +#include "ghcconfig.h" #if defined(freebsd_HOST_OS) || defined(dragonfly_HOST_OS) -/* Inclusion of system headers usually requires __BSD_VISIBLE on FreeBSD and - * DragonflyBSD, because of some specific types, like u_char, u_int, etc. */ #define __BSD_VISIBLE 1 #endif #if defined(darwin_HOST_OS) -/* Inclusion of system headers usually requires _DARWIN_C_SOURCE on Mac OS X - * because of some specific types like u_char, u_int, etc. */ #define _DARWIN_C_SOURCE 1 #endif |