summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLev Serebryakov <lev@FreeBSD.org>2017-06-03 15:42:12 +0300
committerLev Serebryakov <lev@FreeBSD.org>2017-06-03 15:42:12 +0300
commita92fbca37f6951fa0bd07bc3d9af24e57fca1708 (patch)
tree0ae12361e8677f86f00691fc874c9f4ff1abbb57
parentd0f991c81a76897918e375a1f423750cb5f14d32 (diff)
downloadxmr-stak-a92fbca37f6951fa0bd07bc3d9af24e57fca1708.zip
xmr-stak-a92fbca37f6951fa0bd07bc3d9af24e57fca1708.tar.gz
Add FreeBSD support
-rw-r--r--crypto/cryptonight_common.cpp3
-rw-r--r--minethd.cpp8
-rw-r--r--socks.h5
3 files changed, 15 insertions, 1 deletions
diff --git a/crypto/cryptonight_common.cpp b/crypto/cryptonight_common.cpp
index 63ce3a4..9d03ed7 100644
--- a/crypto/cryptonight_common.cpp
+++ b/crypto/cryptonight_common.cpp
@@ -146,6 +146,9 @@ cryptonight_ctx* cryptonight_alloc_ctx(size_t use_fast_mem, size_t use_mlock, al
#if defined(__APPLE__)
ptr->long_state = (uint8_t*)mmap(0, MEMORY, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON, VM_FLAGS_SUPERPAGE_SIZE_2MB, 0);
+#elif defined(__FreeBSD__)
+ ptr->long_state = (uint8_t*)mmap(0, MEMORY, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS | MAP_ALIGNED_SUPER | MAP_PREFAULT_READ, -1, 0);
#else
ptr->long_state = (uint8_t*)mmap(0, MEMORY, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB | MAP_POPULATE, 0, 0);
diff --git a/minethd.cpp b/minethd.cpp
index 199779e..ae97133 100644
--- a/minethd.cpp
+++ b/minethd.cpp
@@ -42,8 +42,11 @@ void thd_setaffinity(std::thread::native_handle_type h, uint64_t cpu_id)
#include <mach/thread_policy.h>
#include <mach/thread_act.h>
#define SYSCTL_CORE_COUNT "machdep.cpu.core_count"
+#elif defined(__FreeBSD__)
+#include <pthread_np.h>
#endif
+
void thd_setaffinity(std::thread::native_handle_type h, uint64_t cpu_id)
{
#if defined(__APPLE__)
@@ -51,6 +54,11 @@ void thd_setaffinity(std::thread::native_handle_type h, uint64_t cpu_id)
thread_affinity_policy_data_t policy = { cpu_id };
mach_thread = pthread_mach_thread_np(h);
thread_policy_set(mach_thread, THREAD_AFFINITY_POLICY, (thread_policy_t)&policy, 1);
+#elif defined(__FreeBSD__)
+ cpuset_t mn;
+ CPU_ZERO(&mn);
+ CPU_SET(cpu_id, &mn);
+ pthread_setaffinity_np(h, sizeof(cpuset_t), &mn);
#else
cpu_set_t mn;
CPU_ZERO(&mn);
diff --git a/socks.h b/socks.h
index 7768706..a481a98 100644
--- a/socks.h
+++ b/socks.h
@@ -60,6 +60,9 @@ inline const char* sock_gai_strerror(int err, char* buf, size_t len)
#include <unistd.h> /* Needed for close() */
#include <errno.h>
#include <string.h>
+#if defined(__FreeBSD__)
+#include <netinet/in.h> /* Needed for IPPROTO_TCP */
+#endif
inline void sock_init() {}
typedef int SOCKET;
@@ -76,7 +79,7 @@ inline void sock_close(SOCKET s)
inline const char* sock_strerror(char* buf, size_t len)
{
buf[0] = '\0';
-#if defined(__APPLE__)
+#if defined(__APPLE__) || defined(__FreeBSD__)
strerror_r(errno, buf, len);
return buf;
#else
OpenPOWER on IntegriCloud