#include <mach/mach.h>
#elif defined(OS_NETBSD)
#include <lwp.h>
-#elif defined(OS_LINUX)
+#elif defined(OS_LINUX) && !defined(__FreeBSD_kernel__) && !defined(__GNU__)
#include <sys/syscall.h>
#include <sys/prctl.h>
+//#elif defined(OS_FREEBSD) && !defined(__FreeBSD_kernel__)
+//#include <sys/param.h>
+//#include <sys/thr.h>
#endif
#if !defined(OS_MACOSX)
#include <unistd.h>
#endif
-#if defined(OS_BSD) && !defined(OS_NETBSD) && !defined(__GLIBC__)
+#if !defined(OS_BSD) && !defined(NetBSD) && !defined(__FreeBSD_kernel__) && !defined(__GLIBC__)
#include <pthread_np.h>
#endif
// Note that glibc also has a 'pthread_setname_np' api, but it may not be
// available everywhere and it's only benefit over using prctl directly is
// that it can set the name of threads other than the current thread.
-#if defined(OS_LINUX)
+#if defined(OS_LINUX) && !defined(__FreeBSD_kernel__) && !defined(__GNU__)
prctl(PR_SET_NAME, reinterpret_cast<uintptr_t>(name), 0, 0, 0);
#elif defined(OS_NETBSD)
pthread_setname_np(pthread_self(), "%s", (void*)name);