diff --git a/src/crypto/randomx/jit_compiler_a64.cpp b/src/crypto/randomx/jit_compiler_a64.cpp index da1d2471..fda829be 100644 --- a/src/crypto/randomx/jit_compiler_a64.cpp +++ b/src/crypto/randomx/jit_compiler_a64.cpp @@ -108,6 +108,7 @@ JitCompilerA64::JitCompilerA64(bool hugePagesEnable, bool) : hugePages(hugePagesJIT && hugePagesEnable), literalPos(ImulRcpLiteralsEnd) { + allocate(CodeSize); } JitCompilerA64::~JitCompilerA64() @@ -117,13 +118,8 @@ JitCompilerA64::~JitCompilerA64() void JitCompilerA64::generateProgram(Program& program, ProgramConfiguration& config, uint32_t) { - if (!allocatedSize) { - allocate(CodeSize); - } #ifdef XMRIG_SECURE_JIT - else { - enableWriting(); - } + enableWriting(); #endif uint32_t codePos = MainLoopBegin + 4; @@ -177,13 +173,8 @@ void JitCompilerA64::generateProgram(Program& program, ProgramConfiguration& con void JitCompilerA64::generateProgramLight(Program& program, ProgramConfiguration& config, uint32_t datasetOffset) { - if (!allocatedSize) { - allocate(CodeSize); - } #ifdef XMRIG_SECURE_JIT - else { - enableWriting(); - } + enableWriting(); #endif uint32_t codePos = MainLoopBegin + 4; @@ -244,8 +235,12 @@ void JitCompilerA64::generateProgramLight(Program& program, ProgramConfiguration template void JitCompilerA64::generateSuperscalarHash(SuperscalarProgram(&programs)[N]) { - if (!allocatedSize) { - allocate(CodeSize + CalcDatasetItemSize()); + const size_t requiredSize = CodeSize + CalcDatasetItemSize(); + if (allocatedSize < requiredSize) { + if (allocatedSize) { + freePagedMemory(code, allocatedSize); + } + allocate(requiredSize); } #ifdef XMRIG_SECURE_JIT else {