diff --git a/functional/futex_wait_private_mapped_file.c b/functional/futex_wait_private_mapped_file.c index d8be741..a2339bf 100644 --- a/functional/futex_wait_private_mapped_file.c +++ b/functional/futex_wait_private_mapped_file.c @@ -35,13 +35,18 @@ #include <stdio.h> #include <stdlib.h> -#include <syscall.h> #include <unistd.h> #include <errno.h> -#include <linux/futex.h> #include <pthread.h> #include <libgen.h> #include <signal.h> +#ifdef __linux__ +#include <syscall.h> +#include <linux/futex.h> +#else +#include <sys/syscall.h> +#include <sys/futex.h> +#endif #include "logging.h" #include "futextest.h" diff --git a/functional/futex_wait_uninitialized_heap.c b/functional/futex_wait_uninitialized_heap.c index 24bda66..5c2b6bc 100644 --- a/functional/futex_wait_uninitialized_heap.c +++ b/functional/futex_wait_uninitialized_heap.c @@ -36,12 +36,17 @@ #include <stdio.h> #include <stdlib.h> #include <sys/mman.h> -#include <syscall.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <errno.h> +#ifdef __linux__ +#include <syscall.h> #include <linux/futex.h> +#else +#include <sys/syscall.h> +#include <sys/futex.h> +#endif #include <libgen.h> #include "logging.h" @@ -102,7 +107,7 @@ int main(int argc, char **argv) page_size = sysconf(_SC_PAGESIZE); buf = mmap(NULL, page_size, PROT_READ|PROT_WRITE, - MAP_PRIVATE|MAP_ANONYMOUS, 0, 0); + MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); if (buf == (void *)-1) { error("mmap\n", errno); exit(1); diff --git a/include/futextest.h b/include/futextest.h index 048500a..ee51158 100644 --- a/include/futextest.h +++ b/include/futextest.h @@ -36,11 +36,12 @@ #include <unistd.h> #include <sys/syscall.h> #include <sys/types.h> -#include <linux/futex.h> typedef volatile u_int32_t futex_t; #define FUTEX_INITIALIZER 0 +#ifdef __linux__ +#include <linux/futex.h> /* Define the newer op codes if the system header file is not up to date. */ #ifndef FUTEX_WAIT_BITSET #define FUTEX_WAIT_BITSET 9 @@ -85,6 +86,13 @@ typedef volatile u_int32_t futex_t; */ #define futex(uaddr, op, val, timeout, uaddr2, val3, opflags) \ syscall(SYS_futex, uaddr, op | opflags, val, timeout, uaddr2, val3) +#else +#include <sys/futex.h> +#define futex(uaddr, op, val, timeout, uaddr2, val3, opflags) \ + syscall(SYS___futex, uaddr, op | opflags, \ + val, timeout, uaddr2, (int)(uintptr_t)timeout, val3) +#endif + /** * futex_wait() - block on uaddr with optional timeout diff --git a/include/logging.h b/include/logging.h index eef7dff..ae5273d 100644 --- a/include/logging.h +++ b/include/logging.h @@ -35,7 +35,12 @@ #include <string.h> #include <unistd.h> +#ifdef __linux__ #include <linux/futex.h> +#else +#include <libgen.h> +#include <sys/futex.h> +#endif /* * Define PASS, ERROR, and FAIL strings with and without color escape