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