Merge remote-tracking branch 'upstream/master'

master
SChernykh 3 years ago
commit a44c5a47ec

@ -69,9 +69,13 @@ namespace randomx {
cpuid(info, 0x00000007); cpuid(info, 0x00000007);
avx2_ = (info[1] & (1 << 5)) != 0; avx2_ = (info[1] & (1 << 5)) != 0;
} }
#elif defined(__aarch64__) && defined(HWCAP_AES) #elif defined(__aarch64__)
#if defined(HWCAP_AES)
long hwcaps = getauxval(AT_HWCAP); long hwcaps = getauxval(AT_HWCAP);
aes_ = (hwcaps & HWCAP_AES) != 0; aes_ = (hwcaps & HWCAP_AES) != 0;
#elif defined(__APPLE__)
aes_ = true;
#endif
#endif #endif
//TODO POWER8 AES //TODO POWER8 AES
} }

@ -36,6 +36,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "jit_compiler_fallback.hpp" #include "jit_compiler_fallback.hpp"
#endif #endif
#if defined(__OpenBSD__) || defined(__NetBSD__) #if defined(__OpenBSD__) || defined(__NetBSD__) || (defined(__APPLE__) && defined(__aarch64__))
#define RANDOMX_FORCE_SECURE #define RANDOMX_FORCE_SECURE
#endif #endif

@ -35,6 +35,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#else #else
#ifdef __APPLE__ #ifdef __APPLE__
#include <mach/vm_statistics.h> #include <mach/vm_statistics.h>
#include <TargetConditionals.h>
# if defined(__aarch64__) && TARGET_OS_OSX
# define USE_PTHREAD_JIT_WP 1
# include <pthread.h>
# endif
#endif #endif
#include <sys/types.h> #include <sys/types.h>
#include <sys/mman.h> #include <sys/mman.h>
@ -109,9 +114,17 @@ void* allocMemoryPages(std::size_t bytes) {
#else #else
#define MEXTRA 0 #define MEXTRA 0
#endif #endif
mem = mmap(nullptr, bytes, PAGE_READWRITE | RESERVED_FLAGS, MAP_ANONYMOUS | MAP_PRIVATE | MEXTRA, -1, 0); #ifdef USE_PTHREAD_JIT_WP
#define PEXTRA PROT_EXEC
#else
#define PEXTRA 0
#endif
mem = mmap(nullptr, bytes, PAGE_READWRITE | RESERVED_FLAGS | PEXTRA, MAP_ANONYMOUS | MAP_PRIVATE | MEXTRA, -1, 0);
if (mem == MAP_FAILED) if (mem == MAP_FAILED)
throw std::runtime_error("allocMemoryPages - mmap failed"); throw std::runtime_error("allocMemoryPages - mmap failed");
#ifdef USE_PTHREAD_JIT_WP
pthread_jit_write_protect_np(false);
#endif
#endif #endif
return mem; return mem;
} }
@ -129,11 +142,19 @@ static inline void pageProtect(void* ptr, std::size_t bytes, int rules) {
} }
void setPagesRW(void* ptr, std::size_t bytes) { void setPagesRW(void* ptr, std::size_t bytes) {
#ifdef USE_PTHREAD_JIT_WP
pthread_jit_write_protect_np(false);
#else
pageProtect(ptr, bytes, PAGE_READWRITE); pageProtect(ptr, bytes, PAGE_READWRITE);
#endif
} }
void setPagesRX(void* ptr, std::size_t bytes) { void setPagesRX(void* ptr, std::size_t bytes) {
#ifdef USE_PTHREAD_JIT_WP
pthread_jit_write_protect_np(true);
#else
pageProtect(ptr, bytes, PAGE_EXECUTE_READ); pageProtect(ptr, bytes, PAGE_EXECUTE_READ);
#endif
} }
void setPagesRWX(void* ptr, std::size_t bytes) { void setPagesRWX(void* ptr, std::size_t bytes) {

Loading…
Cancel
Save