diff --git a/.gitignore b/.gitignore index ec94c2c6..0fb9d64a 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,8 @@ x64/ Release/ Debug/ build/ +*.wasm +*.wat +.idea/* +cmake-build-debug/* +wasi-sdk/* diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b6ba9e6..dbf57cef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,6 +49,7 @@ src/superscalar.cpp src/vm_compiled.cpp src/vm_interpreted_light.cpp src/argon2_core.c + src/launcher.cpp src/blake2_generator.cpp src/instructions_portable.cpp src/reciprocal.c @@ -219,6 +220,13 @@ target_link_libraries(randomx-benchmark PRIVATE randomx PRIVATE ${CMAKE_THREAD_LIBS_INIT}) +add_executable(runner + src/tests/api-example1.c + ) +target_link_libraries(runner + PRIVATE randomx + PRIVATE ${CMAKE_THREAD_LIBS_INIT}) + include(CheckCXXSourceCompiles) check_cxx_source_compiles(" #include diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..a63a8f82 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM ubuntu:20.04 + +RUN apt update \ + && DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install tzdata \ + && apt install -y ca-certificates \ + curl \ + git \ + make \ + pkg-config \ + libtinfo6 + +VOLUME /code +WORKDIR /code +ENTRYPOINT /code/entrypoint.sh diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..ce49ba6f --- /dev/null +++ b/Makefile @@ -0,0 +1,43 @@ +TARGET = randomx +CXX = ./wasi-sdk/bin/clang++ +SYSROOT = ./wasi-sdk/share/wasi-sysroot +TARGET_TRIPLE = wasm32-wasi +CFLAGS = -fvisibility=hidden +LDFLAGS = -Wl,--demangle,--allow-undefined +EXPORT_FUNCS = \ + --export=test_randomx + +RANDOMX_SRC = \ + src/launcher.cpp\ + src/randomx.cpp\ + src/vm_interpreted_light.cpp\ + src/vm_interpreted.cpp\ + src/virtual_machine.cpp\ + src/dataset.cpp\ + src/argon2_core.c\ + src/aes_hash.cpp\ + src/soft_aes.cpp\ + src/reciprocal.c\ + src/allocator.cpp\ + src/superscalar.cpp\ + src/instructions_portable.cpp\ + src/bytecode_machine.cpp\ + src/argon2_ref.c\ + src/blake2/blake2b.c\ + src/blake2_generator.cpp + +RANDOMX_FLAGS = \ + -fno-exceptions + +.PHONY: default all clean + +default: $(TARGET) +all: default + +$(TARGET): $(RANDOMX_SRC) + $(CXX) -O3 --sysroot=$(SYSROOT) --target=$(TARGET_TRIPLE) $(RANDOMX_FLAGS) $(CFLAGS) $(LDFLAGS) -Wl,$(EXPORT_FUNCS) $^ -o $@.wasm + +.PRECIOUS: $(TARGET) + +clean: + -rm -f $(TARGET).wasm diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..383198b0 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,8 @@ +version: '3' +services: + randomx_wasm: + build: + context: . + container_name: randomx_wasm_builder1 + volumes: + - ./:/code diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 00000000..e1f57457 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,5 @@ +export PATH="${PATH}:/root/.cargo/bin:/root/.local/bin" +curl -L https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz | tar xz -C . +rm -rf wasi-sdk +mv -f wasi-sdk-* wasi-sdk +make diff --git a/randomx.wasm b/randomx.wasm new file mode 100755 index 00000000..e05b2c72 Binary files /dev/null and b/randomx.wasm differ diff --git a/src/allocator.cpp b/src/allocator.cpp index bcee0f6b..30933c48 100644 --- a/src/allocator.cpp +++ b/src/allocator.cpp @@ -36,23 +36,29 @@ namespace randomx { template void* AlignedAllocator::allocMemory(size_t count) { - void *mem = rx_aligned_alloc(count, alignment); - if (mem == nullptr) - throw std::bad_alloc(); + //void *mem = rx_aligned_alloc(count, alignment); + void *mem = malloc(count); + if (mem == nullptr) { + abort(); + //throw std::bad_alloc(); + } return mem; } template void AlignedAllocator::freeMemory(void* ptr, size_t count) { - rx_aligned_free(ptr); + //rx_aligned_free(ptr); + free(ptr); } template struct AlignedAllocator; void* LargePageAllocator::allocMemory(size_t count) { void *mem = allocLargePagesMemory(count); - if (mem == nullptr) - throw std::bad_alloc(); + if (mem == nullptr) { + abort(); + //throw std::bad_alloc(); + } return mem; } diff --git a/src/bytecode_machine.hpp b/src/bytecode_machine.hpp index 5e82e0d3..5eb6f85f 100644 --- a/src/bytecode_machine.hpp +++ b/src/bytecode_machine.hpp @@ -208,48 +208,48 @@ namespace randomx { *ibc.idst = temp; } - static void exe_FSWAP_R(RANDOMX_EXE_ARGS) { - *ibc.fdst = rx_swap_vec_f128(*ibc.fdst); - } - - static void exe_FADD_R(RANDOMX_EXE_ARGS) { - *ibc.fdst = rx_add_vec_f128(*ibc.fdst, *ibc.fsrc); - } - - static void exe_FADD_M(RANDOMX_EXE_ARGS) { - rx_vec_f128 fsrc = rx_cvt_packed_int_vec_f128(getScratchpadAddress(ibc, scratchpad)); - *ibc.fdst = rx_add_vec_f128(*ibc.fdst, fsrc); - } - - static void exe_FSUB_R(RANDOMX_EXE_ARGS) { - *ibc.fdst = rx_sub_vec_f128(*ibc.fdst, *ibc.fsrc); - } - - static void exe_FSUB_M(RANDOMX_EXE_ARGS) { - rx_vec_f128 fsrc = rx_cvt_packed_int_vec_f128(getScratchpadAddress(ibc, scratchpad)); - *ibc.fdst = rx_sub_vec_f128(*ibc.fdst, fsrc); - } - - static void exe_FSCAL_R(RANDOMX_EXE_ARGS) { - const rx_vec_f128 mask = rx_set1_vec_f128(0x80F0000000000000); - *ibc.fdst = rx_xor_vec_f128(*ibc.fdst, mask); - } - - static void exe_FMUL_R(RANDOMX_EXE_ARGS) { - *ibc.fdst = rx_mul_vec_f128(*ibc.fdst, *ibc.fsrc); - } - - static void exe_FDIV_M(RANDOMX_EXE_ARGS) { - rx_vec_f128 fsrc = maskRegisterExponentMantissa( - config, - rx_cvt_packed_int_vec_f128(getScratchpadAddress(ibc, scratchpad)) - ); - *ibc.fdst = rx_div_vec_f128(*ibc.fdst, fsrc); - } - - static void exe_FSQRT_R(RANDOMX_EXE_ARGS) { - *ibc.fdst = rx_sqrt_vec_f128(*ibc.fdst); - } + static void exe_FSWAP_R(RANDOMX_EXE_ARGS) { + *ibc.fdst = rx_swap_vec_f128(*ibc.fdst); + } + + static void exe_FADD_R(RANDOMX_EXE_ARGS) { + *ibc.fdst = rx_add_vec_f128(*ibc.fdst, *ibc.fsrc); + } + + static void exe_FADD_M(RANDOMX_EXE_ARGS) { + rx_vec_f128 fsrc = rx_cvt_packed_int_vec_f128(getScratchpadAddress(ibc, scratchpad)); + *ibc.fdst = rx_add_vec_f128(*ibc.fdst, fsrc); + } + + static void exe_FSUB_R(RANDOMX_EXE_ARGS) { + *ibc.fdst = rx_sub_vec_f128(*ibc.fdst, *ibc.fsrc); + } + + static void exe_FSUB_M(RANDOMX_EXE_ARGS) { + rx_vec_f128 fsrc = rx_cvt_packed_int_vec_f128(getScratchpadAddress(ibc, scratchpad)); + *ibc.fdst = rx_sub_vec_f128(*ibc.fdst, fsrc); + } + + static void exe_FSCAL_R(RANDOMX_EXE_ARGS) { + const rx_vec_f128 mask = rx_set1_vec_f128(0x80F0000000000000); + *ibc.fdst = rx_xor_vec_f128(*ibc.fdst, mask); + } + + static void exe_FMUL_R(RANDOMX_EXE_ARGS) { + *ibc.fdst = rx_mul_vec_f128(*ibc.fdst, *ibc.fsrc); + } + + static void exe_FDIV_M(RANDOMX_EXE_ARGS) { + rx_vec_f128 fsrc = maskRegisterExponentMantissa( + config, + rx_cvt_packed_int_vec_f128(getScratchpadAddress(ibc, scratchpad)) + ); + *ibc.fdst = rx_div_vec_f128(*ibc.fdst, fsrc); + } + + static void exe_FSQRT_R(RANDOMX_EXE_ARGS) { + *ibc.fdst = rx_sqrt_vec_f128(*ibc.fdst); + } static void exe_CBRANCH(RANDOMX_EXE_ARGS) { *ibc.idst += ibc.imm; @@ -259,7 +259,7 @@ namespace randomx { } static void exe_CFROUND(RANDOMX_EXE_ARGS) { - rx_set_rounding_mode(rotr(*ibc.isrc, ibc.imm) % 4); + //rx_set_rounding_mode(rotr(*ibc.isrc, ibc.imm) % 4); } static void exe_ISTORE(RANDOMX_EXE_ARGS) { diff --git a/src/dataset.cpp b/src/dataset.cpp index 7ebf1bca..9bdb093c 100644 --- a/src/dataset.cpp +++ b/src/dataset.cpp @@ -49,7 +49,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "blake2/endian.h" #include "argon2.h" #include "argon2_core.h" -#include "jit_compiler.hpp" +// #include "jit_compiler.hpp" #include "intrin_portable.h" static_assert(RANDOMX_ARGON_MEMORY % (RANDOMX_ARGON_LANES * ARGON2_SYNC_POINTS) == 0, "RANDOMX_ARGON_MEMORY - invalid value"); @@ -61,8 +61,10 @@ namespace randomx { void deallocCache(randomx_cache* cache) { if (cache->memory != nullptr) Allocator::freeMemory(cache->memory, CacheSize); + /* if (cache->jit != nullptr) delete cache->jit; + */ } template void deallocCache(randomx_cache* cache); @@ -128,7 +130,8 @@ namespace randomx { randomx::Blake2Generator gen(key, keySize); for (int i = 0; i < RANDOMX_CACHE_ACCESSES; ++i) { randomx::generateSuperscalar(cache->programs[i], gen); - for (unsigned j = 0; j < cache->programs[i].getSize(); ++j) { + + for (unsigned j = 0; j < cache->programs[i].getSize(); ++j) { auto& instr = cache->programs[i](j); if ((SuperscalarInstructionType)instr.opcode == SuperscalarInstructionType::IMUL_RCP) { auto rcp = randomx_reciprocal(instr.getImm32()); @@ -141,10 +144,12 @@ namespace randomx { void initCacheCompile(randomx_cache* cache, const void* key, size_t keySize) { initCache(cache, key, keySize); + /* cache->jit->enableWriting(); cache->jit->generateSuperscalarHash(cache->programs, cache->reciprocalCache); cache->jit->generateDatasetInitCode(); cache->jit->enableExecution(); + */ } constexpr uint64_t superscalarMul0 = 6364136223846793005ULL; diff --git a/src/dataset.hpp b/src/dataset.hpp index d01911f9..20d1704f 100644 --- a/src/dataset.hpp +++ b/src/dataset.hpp @@ -92,12 +92,14 @@ namespace randomx { void initDataset(randomx_cache* cache, uint8_t* dataset, uint32_t startBlock, uint32_t endBlock); inline randomx_argon2_impl* selectArgonImpl(randomx_flags flags) { + /* if (flags & RANDOMX_FLAG_ARGON2_AVX2) { return randomx_argon2_impl_avx2(); } if (flags & RANDOMX_FLAG_ARGON2_SSSE3) { return randomx_argon2_impl_ssse3(); } + */ return &randomx_argon2_fill_segment_ref; } } diff --git a/src/instructions_portable.cpp b/src/instructions_portable.cpp index d7467271..7fb317d1 100644 --- a/src/instructions_portable.cpp +++ b/src/instructions_portable.cpp @@ -139,6 +139,7 @@ void rx_reset_float_state() { } void rx_set_rounding_mode(uint32_t mode) { + /* switch (mode & 3) { case RoundDown: setRoundMode_(FE_DOWNWARD); @@ -155,9 +156,11 @@ void rx_set_rounding_mode(uint32_t mode) { default: UNREACHABLE; } + */ } uint32_t rx_get_rounding_mode() { + /* switch (fegetround()) { case FE_DOWNWARD: return RoundDown; @@ -170,6 +173,8 @@ uint32_t rx_get_rounding_mode() { default: UNREACHABLE; } + */ + return 0; } #endif diff --git a/src/intrin_portable.h b/src/intrin_portable.h index 8c09ae88..fcd8653f 100644 --- a/src/intrin_portable.h +++ b/src/intrin_portable.h @@ -723,11 +723,13 @@ static const char* platformError = "Platform doesn't support hardware AES"; #include FORCE_INLINE rx_vec_i128 rx_aesenc_vec_i128(rx_vec_i128 v, rx_vec_i128 rkey) { - throw std::runtime_error(platformError); + abort(); + // throw std::runtime_error(platformError); } FORCE_INLINE rx_vec_i128 rx_aesdec_vec_i128(rx_vec_i128 v, rx_vec_i128 rkey) { - throw std::runtime_error(platformError); + abort(); + // throw std::runtime_error(platformError); } #define HAVE_AES 0 diff --git a/src/launcher.cpp b/src/launcher.cpp new file mode 100644 index 00000000..7579a5a3 --- /dev/null +++ b/src/launcher.cpp @@ -0,0 +1,74 @@ +/* +Copyright (c) 2018-2019, tevador + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the copyright holder nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "launcher.h" +#include "randomx.h" +#include +#include +#include "dataset.hpp" +#include "common.hpp" + +int main() { + test_randomx(); + + return 0; +} + +void test_randomx() { + std::cout << "randomX: start" << std::endl; + + // RANDOMX_FLAG_DEFAULT must be set, because others flags could use features like large pages + randomx_flags flags = RANDOMX_FLAG_DEFAULT; + randomx_cache *cache = randomx_alloc_cache(flags); + if (cache == nullptr) { + std::cout << "randomX: can't allocate a cache" << std::endl; + } + + std::cout << "randomX: cache created " << cache << std::endl; + + const char seed[] = "RandomX example key"; + randomx_init_cache(cache, &seed, sizeof(seed)); + std::cout << "randomX: cache " << cache << " " << cache->isInitialized() << std::endl; + + randomx_vm *vm = randomx_create_vm(flags, cache, nullptr); + + std::cout << "randomX: vm created " << vm << std::endl; + + char hash[RANDOMX_HASH_SIZE]; + const char input[] = "RandomX example input"; + randomx_calculate_hash(vm, &input, sizeof input, hash); + + randomx_destroy_vm(vm); + randomx_release_cache(cache); + + for (unsigned i = 0; i < RANDOMX_HASH_SIZE; ++i) { + printf("%02x", hash[i] & 0xff); + } + + printf("\n"); +} diff --git a/src/launcher.h b/src/launcher.h new file mode 100644 index 00000000..4ee1ed9c --- /dev/null +++ b/src/launcher.h @@ -0,0 +1,3 @@ +#include "randomx.h" + +// RANDOMX_EXPORT int test_randomx(); diff --git a/src/randomx.cpp b/src/randomx.cpp index 7daaa46d..96cc4c88 100644 --- a/src/randomx.cpp +++ b/src/randomx.cpp @@ -30,10 +30,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "dataset.hpp" #include "vm_interpreted.hpp" #include "vm_interpreted_light.hpp" -#include "vm_compiled.hpp" -#include "vm_compiled_light.hpp" +//#include "vm_compiled.hpp" +//#include "vm_compiled_light.hpp" #include "blake2/blake2.h" -#include "cpu.hpp" +//#include "cpu.hpp" #include #include #include @@ -41,6 +41,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. extern "C" { randomx_flags randomx_get_flags() { + /* randomx_flags flags = RANDOMX_HAVE_COMPILER ? RANDOMX_FLAG_JIT : RANDOMX_FLAG_DEFAULT; randomx::Cpu cpu; #ifdef RANDOMX_FORCE_SECURE @@ -58,16 +59,19 @@ extern "C" { flags |= RANDOMX_FLAG_ARGON2_SSSE3; } return flags; + */ + return RANDOMX_FLAG_DEFAULT; } randomx_cache *randomx_alloc_cache(randomx_flags flags) { randomx_cache *cache = nullptr; auto impl = randomx::selectArgonImpl(flags); if (impl == nullptr) { + std::cout << "randomx_alloc_cache impl == nullptr" << std::endl; return cache; } - try { + // try { cache = new randomx_cache(); cache->argonImpl = impl; switch ((int)(flags & (RANDOMX_FLAG_JIT | RANDOMX_FLAG_LARGE_PAGES))) { @@ -79,6 +83,7 @@ extern "C" { cache->memory = (uint8_t*)randomx::DefaultAllocator::allocMemory(randomx::CacheSize); break; + /* case RANDOMX_FLAG_JIT: cache->dealloc = &randomx::deallocCache; cache->jit = new randomx::JitCompiler(); @@ -102,11 +107,13 @@ extern "C" { cache->datasetInit = cache->jit->getDatasetInitFunc(); cache->memory = (uint8_t*)randomx::LargePageAllocator::allocMemory(randomx::CacheSize); break; + */ default: UNREACHABLE; } - } + // } + /* catch (std::exception &ex) { if (cache != nullptr) { randomx_release_cache(cache); @@ -117,6 +124,7 @@ extern "C" { randomx_release_cache(cache); cache = nullptr; } + */ return cache; } @@ -147,17 +155,20 @@ extern "C" { randomx_dataset *dataset = nullptr; - try { + // try { dataset = new randomx_dataset(); + /* if (flags & RANDOMX_FLAG_LARGE_PAGES) { dataset->dealloc = &randomx::deallocDataset; dataset->memory = (uint8_t*)randomx::LargePageAllocator::allocMemory(randomx::DatasetSize); } else { + */ dataset->dealloc = &randomx::deallocDataset; dataset->memory = (uint8_t*)randomx::DefaultAllocator::allocMemory(randomx::DatasetSize); - } - } + //} + // } + /* catch (std::exception &ex) { if (dataset != nullptr) { randomx_release_dataset(dataset); @@ -168,6 +179,7 @@ extern "C" { randomx_release_dataset(dataset); dataset = nullptr; } + */ return dataset; } @@ -204,12 +216,13 @@ extern "C" { randomx_vm *vm = nullptr; - try { + // try { switch ((int)(flags & (RANDOMX_FLAG_FULL_MEM | RANDOMX_FLAG_JIT | RANDOMX_FLAG_HARD_AES | RANDOMX_FLAG_LARGE_PAGES))) { case RANDOMX_FLAG_DEFAULT: vm = new randomx::InterpretedLightVmDefault(); break; + /* case RANDOMX_FLAG_FULL_MEM: vm = new randomx::InterpretedVmDefault(); break; @@ -309,6 +322,7 @@ extern "C" { vm = new randomx::CompiledVmLargePageHardAes(); } break; + */ default: UNREACHABLE; @@ -323,11 +337,13 @@ extern "C" { vm->setDataset(dataset); vm->allocate(); - } + // } + /* catch (std::exception &ex) { delete vm; vm = nullptr; } + */ return vm; } diff --git a/src/randomx.h b/src/randomx.h index 64d18068..bae605c2 100644 --- a/src/randomx.h +++ b/src/randomx.h @@ -126,6 +126,8 @@ RANDOMX_EXPORT void randomx_init_cache(randomx_cache *cache, const void *key, si */ RANDOMX_EXPORT void randomx_release_cache(randomx_cache* cache); +RANDOMX_EXPORT void test_randomx(); + /** * Creates a randomx_dataset structure and allocates memory for RandomX Dataset. * diff --git a/src/superscalar.cpp b/src/superscalar.cpp index 4e9fd78d..369cb1df 100644 --- a/src/superscalar.cpp +++ b/src/superscalar.cpp @@ -277,8 +277,9 @@ namespace randomx { //To make sure that the multiplication port is saturated, a 4-4-4-4 configuration is generated if the number of multiplications //is lower than the number of cycles. - if (mulCount < cycle + 1) - return &decodeBuffer4444; + if (mulCount < cycle + 1) { + return &decodeBuffer4444; + } //If the current RandomX instruction is "IMUL_RCP", the next buffer must begin with a 4-byte slot for multiplication. if(instrType == SuperscalarInstructionType::IMUL_RCP) @@ -682,7 +683,9 @@ namespace randomx { if (trace) std::cout << "; ------------- fetch cycle " << cycle << " (" << decodeBuffer->getName() << ")" << std::endl; int bufferIndex = 0; - + + // printf("decodeCycle: %d %d < %d\n", decodeCycle, bufferIndex, decodeBuffer->getSize()); + //fill all instruction slots in the current decode buffer while (bufferIndex < decodeBuffer->getSize()) { int topCycle = cycle; diff --git a/src/virtual_machine.cpp b/src/virtual_machine.cpp index 2d5d2bea..0f046ab9 100644 --- a/src/virtual_machine.cpp +++ b/src/virtual_machine.cpp @@ -41,7 +41,7 @@ randomx_vm::~randomx_vm() { } void randomx_vm::resetRoundingMode() { - rx_reset_float_state(); + //rx_reset_float_state(); } namespace randomx { @@ -104,8 +104,10 @@ namespace randomx { template void VmBase::allocate() { - if (datasetPtr == nullptr) - throw std::invalid_argument("Cache/Dataset not set"); + if (datasetPtr == nullptr) { + abort(); + //throw std::invalid_argument("Cache/Dataset not set"); + } if (!softAes) { //if hardware AES is not supported, it's better to fail now than to return a ticking bomb rx_vec_i128 tmp = rx_load_vec_i128((const rx_vec_i128*)&aesDummy); tmp = rx_aesenc_vec_i128(tmp, tmp); diff --git a/src/vm_compiled.hpp b/src/vm_compiled.hpp index f7ceb0a6..ecafd94a 100644 --- a/src/vm_compiled.hpp +++ b/src/vm_compiled.hpp @@ -42,8 +42,10 @@ namespace randomx { public: void* operator new(size_t size) { void* ptr = AlignedAllocator::allocMemory(size); - if (ptr == nullptr) - throw std::bad_alloc(); + if (ptr == nullptr) { + abort(); + //throw std::bad_alloc(); + } return ptr; } void operator delete(void* ptr) { diff --git a/src/vm_compiled_light.hpp b/src/vm_compiled_light.hpp index bed4ce14..d4fc10df 100644 --- a/src/vm_compiled_light.hpp +++ b/src/vm_compiled_light.hpp @@ -38,8 +38,10 @@ namespace randomx { public: void* operator new(size_t size) { void* ptr = AlignedAllocator::allocMemory(size); - if (ptr == nullptr) - throw std::bad_alloc(); + if (ptr == nullptr) { + abort(); + // throw std::bad_alloc(); + } return ptr; } void operator delete(void* ptr) { diff --git a/src/vm_interpreted.hpp b/src/vm_interpreted.hpp index 2fac2edd..444d2ed6 100644 --- a/src/vm_interpreted.hpp +++ b/src/vm_interpreted.hpp @@ -50,8 +50,10 @@ namespace randomx { using VmBase::datasetOffset; void* operator new(size_t size) { void* ptr = AlignedAllocator::allocMemory(size); - if (ptr == nullptr) - throw std::bad_alloc(); + if (ptr == nullptr) { + abort(); + //throw std::bad_alloc(); + } return ptr; } void operator delete(void* ptr) { diff --git a/src/vm_interpreted_light.hpp b/src/vm_interpreted_light.hpp index 02d678f6..bff187c9 100644 --- a/src/vm_interpreted_light.hpp +++ b/src/vm_interpreted_light.hpp @@ -40,8 +40,10 @@ namespace randomx { using VmBase::cachePtr; void* operator new(size_t size) { void* ptr = AlignedAllocator::allocMemory(size); - if (ptr == nullptr) - throw std::bad_alloc(); + if (ptr == nullptr) { + abort(); + // throw std::bad_alloc(); + } return ptr; } void operator delete(void* ptr) {