diff --git a/cmake/os.cmake b/cmake/os.cmake index 02a787dff..19b208b3e 100644 --- a/cmake/os.cmake +++ b/cmake/os.cmake @@ -15,7 +15,7 @@ else() set(XMRIG_OS_ANDROID ON) elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") set(XMRIG_OS_LINUX ON) - elseif(CMAKE_SYSTEM_NAME STREQUAL FreeBSD) + elseif(CMAKE_SYSTEM_NAME STREQUAL FreeBSD OR CMAKE_SYSTEM_NAME STREQUAL DragonFly) set(XMRIG_OS_FREEBSD ON) endif() endif() diff --git a/src/backend/cpu/platform/BasicCpuInfo_arm.cpp b/src/backend/cpu/platform/BasicCpuInfo_arm.cpp index f6edd503c..b684c510f 100644 --- a/src/backend/cpu/platform/BasicCpuInfo_arm.cpp +++ b/src/backend/cpu/platform/BasicCpuInfo_arm.cpp @@ -27,7 +27,7 @@ #if __ARM_FEATURE_CRYPTO && !defined(__APPLE__) # include -# if !defined(__FreeBSD__) && !defined(__DragonFly__) +# if !defined(XMRIG_OS_FREEBSD) # include # else # include @@ -71,7 +71,7 @@ xmrig::BasicCpuInfo::BasicCpuInfo() : # if __ARM_FEATURE_CRYPTO # if defined(__APPLE__) m_flags.set(FLAG_AES, true); -# elif defined(__FreeBSD__) || defined(__DragonFly__) +# elif defined(XMRIG_OS_FREEBSD) uint64_t isar0 = READ_SPECIALREG(id_aa64isar0_el1); m_flags.set(FLAG_AES, ID_AA64ISAR0_AES_VAL(isar0) >= ID_AA64ISAR0_AES_BASE); # else diff --git a/src/base/kernel/Platform_unix.cpp b/src/base/kernel/Platform_unix.cpp index 4c4fe92e9..4ffee2140 100644 --- a/src/base/kernel/Platform_unix.cpp +++ b/src/base/kernel/Platform_unix.cpp @@ -16,10 +16,12 @@ * along with this program. If not, see . */ -#if defined(__FreeBSD__) || defined(__DragonFly__) +#ifdef XMRIG_OS_FREEBSD # include # include -# include +# ifndef __DragonFly__ +# include +# endif # include #endif @@ -41,11 +43,6 @@ #include "version.h" -#if defined(__FreeBSD__) || defined(__DragonFly__) -typedef cpuset_t cpu_set_t; -#endif - - char *xmrig::Platform::createUserAgent() { constexpr const size_t max = 256; @@ -74,6 +71,19 @@ char *xmrig::Platform::createUserAgent() #ifndef XMRIG_FEATURE_HWLOC +#ifdef __DragonFly__ + +bool xmrig::Platform::setThreadAffinity(uint64_t cpu_id) +{ + return true; +} + +#else + +#ifdef XMRIG_OS_FREEBSD +typedef cpuset_t cpu_set_t; +#endif + bool xmrig::Platform::setThreadAffinity(uint64_t cpu_id) { cpu_set_t mn; @@ -89,7 +99,9 @@ bool xmrig::Platform::setThreadAffinity(uint64_t cpu_id) std::this_thread::sleep_for(std::chrono::milliseconds(1)); return result; } -#endif + +#endif // __DragonFly__ +#endif // XMRIG_FEATURE_HWLOC void xmrig::Platform::setProcessPriority(int) diff --git a/src/crypto/common/VirtualMemory_unix.cpp b/src/crypto/common/VirtualMemory_unix.cpp index 1f3be36ba..99b961317 100644 --- a/src/crypto/common/VirtualMemory_unix.cpp +++ b/src/crypto/common/VirtualMemory_unix.cpp @@ -57,6 +57,15 @@ # define MAP_HUGE_MASK 0x3f #endif +#ifdef XMRIG_OS_FREEBSD +# ifndef MAP_ALIGNED_SUPER +# define MAP_ALIGNED_SUPER 0 +# endif +# ifndef MAP_PREFAULT_READ +# define MAP_PREFAULT_READ 0 +# endif +#endif + #ifdef XMRIG_SECURE_JIT # define SECURE_PROT_EXEC 0 @@ -65,7 +74,7 @@ #endif -#if defined(XMRIG_OS_LINUX) || (!defined(XMRIG_OS_APPLE) && !defined(__FreeBSD__) && !defined(__DragonFly__)) +#if defined(XMRIG_OS_LINUX) || (!defined(XMRIG_OS_APPLE) && !defined(XMRIG_OS_FREEBSD)) static inline int hugePagesFlag(size_t size) { return (static_cast(log2(size)) & MAP_HUGE_MASK) << MAP_HUGE_SHIFT; @@ -135,7 +144,7 @@ void *xmrig::VirtualMemory::allocateExecutableMemory(size_t size, bool hugePages # ifdef XMRIG_ARM pthread_jit_write_protect_np(false); # endif -# elif defined(__FreeBSD__) || defined(__DragonFly__) +# elif defined(XMRIG_OS_FREEBSD) void *mem = nullptr; if (hugePages) { @@ -168,7 +177,7 @@ void *xmrig::VirtualMemory::allocateLargePagesMemory(size_t size) { # if defined(XMRIG_OS_APPLE) void *mem = mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, VM_FLAGS_SUPERPAGE_SIZE_2MB, 0); -# elif defined(__FreeBSD__) || defined(__DragonFly__) +# elif defined(XMRIG_OS_FREEBSD) void *mem = mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_ALIGNED_SUPER | MAP_PREFAULT_READ, -1, 0); # else void *mem = mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB | MAP_POPULATE | hugePagesFlag(hugePageSize()), 0, 0); diff --git a/src/hw/dmi/DmiReader_unix.cpp b/src/hw/dmi/DmiReader_unix.cpp index 2f7030fa2..cfc1ee2f8 100644 --- a/src/hw/dmi/DmiReader_unix.cpp +++ b/src/hw/dmi/DmiReader_unix.cpp @@ -31,7 +31,7 @@ #include #include -#if defined(__FreeBSD__) || defined(__DragonFly__) +#ifdef XMRIG_OS_FREEBSD # include #endif @@ -288,7 +288,7 @@ static off_t address_from_efi() const char *filename; char linebuf[64]; off_t address = 0; -# elif defined(__FreeBSD__) || defined(__DragonFly__) +# elif defined(XMRIG_OS_FREEBSD) char addrstr[KENV_MVALLEN + 1]; # endif @@ -310,7 +310,7 @@ static off_t address_from_efi() fclose(efi_systab); return address; -# elif defined(__FreeBSD__) || defined(__DragonFly__) +# elif defined(XMRIG_OS_FREEBSD) if (kenv(KENV_GET, "hint.smbios.0.mem", addrstr, sizeof(addrstr)) == -1) { return EFI_NOT_FOUND; }