about summary refs log tree commit diff
path: root/src/afl-gotcpu.c
diff options
context:
space:
mode:
authorDavid Carlier <devnexen@gmail.com>2019-10-19 11:44:09 +0100
committerDavid Carlier <devnexen@gmail.com>2019-10-19 11:44:09 +0100
commit1fdb75068d6b815baf9736e63e3545b66de688c5 (patch)
treee2e61d8e4648c379f90c08b460d15dfdd9a37d22 /src/afl-gotcpu.c
parent230c135d4e05d810397138f2b6eb1927955f8900 (diff)
downloadafl++-1fdb75068d6b815baf9736e63e3545b66de688c5.tar.gz
afl-gotcpu: porting to Darwin using mach API.
Diffstat (limited to 'src/afl-gotcpu.c')
-rw-r--r--src/afl-gotcpu.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/afl-gotcpu.c b/src/afl-gotcpu.c
index bdb727de..dc938b65 100644
--- a/src/afl-gotcpu.c
+++ b/src/afl-gotcpu.c
@@ -52,7 +52,7 @@
 #include "types.h"
 #include "debug.h"
 
-#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__)
+#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__APPLE__)
 #define HAVE_AFFINITY 1
 #if defined(__FreeBSD__)
 #include <pthread.h>
@@ -62,8 +62,12 @@
 #elif defined(__NetBSD__)
 #include <pthread.h>
 #include <sched.h>
+#elif defined(__APPLE__)
+#include <pthread.h>
+#include <mach/thread_act.h>
+#include <mach/thread_policy.h>
 #endif
-#endif                            /* __linux__ || __FreeBSD__ || __NetBSD__ */
+#endif                            /* __linux__ || __FreeBSD__ || __NetBSD__ || __APPLE__ */
 
 /* Get unix time in microseconds. */
 
@@ -176,6 +180,12 @@ int main(int argc, char** argv) {
       if (c == NULL) PFATAL("cpuset_create failed");
 
       cpuset_set(i, c);
+#elif defined(__APPLE__)
+      thread_affinity_policy_data_t c = { i };
+      thread_port_t native_thread = pthread_mach_thread_np(pthread_self());
+      if (thread_policy_set(native_thread, THREAD_AFFINITY_POLICY,
+	 (thread_policy_t)&c, 1) != KERN_SUCCESS)
+	PFATAL("thread_policy_set failed");
 #endif
 
 #if defined(__FreeBSD__)