mirror of
https://git.wownero.com/wownero/RandomWOW.git
synced 2024-12-31 20:28:53 +00:00
Fixed a potential crash in JitCompilerX86
This commit is contained in:
parent
5bc26348f1
commit
39c569ae44
@ -81,6 +81,11 @@ namespace RandomX {
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
constexpr uint8_t ic3 = (InstructionCount >> 24);
|
||||||
|
constexpr uint8_t ic2 = (InstructionCount >> 16);
|
||||||
|
constexpr uint8_t ic1 = (InstructionCount >> 8);
|
||||||
|
constexpr uint8_t ic0 = (InstructionCount >> 0);
|
||||||
|
|
||||||
const uint8_t prologue[] = {
|
const uint8_t prologue[] = {
|
||||||
0x53, //push rbx
|
0x53, //push rbx
|
||||||
0x55, //push rbp
|
0x55, //push rbp
|
||||||
@ -108,7 +113,7 @@ namespace RandomX {
|
|||||||
0x48, 0x8b, 0xcf, //mov rcx, rdi
|
0x48, 0x8b, 0xcf, //mov rcx, rdi
|
||||||
#endif
|
#endif
|
||||||
0x48, 0x8b, 0xec, //mov rbp,rsp
|
0x48, 0x8b, 0xec, //mov rbp,rsp
|
||||||
0x48, 0xc7, 0xc7, 0x00, 0x00, 0x10, 0x00, //mov rdi,0x100000
|
0x48, 0xc7, 0xc7, ic0, ic1, ic2, ic3, //mov rdi, "InstructionCount"
|
||||||
0x4c, 0x8b, 0x01, //mov r8,QWORD PTR[rcx]
|
0x4c, 0x8b, 0x01, //mov r8,QWORD PTR[rcx]
|
||||||
0x4c, 0x8b, 0x49, 0x08, //mov r9,QWORD PTR[rcx+0x8]
|
0x4c, 0x8b, 0x49, 0x08, //mov r9,QWORD PTR[rcx+0x8]
|
||||||
0x4c, 0x8b, 0x51, 0x10, //mov r10,QWORD PTR[rcx+0x10]
|
0x4c, 0x8b, 0x51, 0x10, //mov r10,QWORD PTR[rcx+0x10]
|
||||||
@ -209,11 +214,15 @@ namespace RandomX {
|
|||||||
throw std::runtime_error("mmap failed");
|
throw std::runtime_error("mmap failed");
|
||||||
#endif
|
#endif
|
||||||
memcpy(code, prologue, sizeof(prologue));
|
memcpy(code, prologue, sizeof(prologue));
|
||||||
if (startOffsetAligned - sizeof(prologue) > 4) {
|
|
||||||
codePos = sizeof(prologue);
|
codePos = sizeof(prologue);
|
||||||
|
if (startOffsetAligned - codePos > 4) {
|
||||||
emitByte(0xeb);
|
emitByte(0xeb);
|
||||||
emitByte(startOffsetAligned - (codePos + 1));
|
emitByte(startOffsetAligned - (codePos + 1));
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
while (codePos < startOffsetAligned)
|
||||||
|
emitByte(0x90); //nop
|
||||||
|
}
|
||||||
memcpy(code + readDatasetSubOffset, readDatasetSub, sizeof(readDatasetSub));
|
memcpy(code + readDatasetSubOffset, readDatasetSub, sizeof(readDatasetSub));
|
||||||
memcpy(code + epilogueOffset, epilogue, sizeof(epilogue));
|
memcpy(code + epilogueOffset, epilogue, sizeof(epilogue));
|
||||||
}
|
}
|
||||||
|
@ -62,7 +62,7 @@ namespace RandomX {
|
|||||||
};
|
};
|
||||||
|
|
||||||
constexpr int ProgramLength = 512;
|
constexpr int ProgramLength = 512;
|
||||||
constexpr int InstructionCount = 1024 * 1024;
|
constexpr uint32_t InstructionCount = 1024 * 1024;
|
||||||
constexpr uint32_t ScratchpadSize = 256 * 1024;
|
constexpr uint32_t ScratchpadSize = 256 * 1024;
|
||||||
constexpr uint32_t ScratchpadLength = ScratchpadSize / sizeof(convertible_t);
|
constexpr uint32_t ScratchpadLength = ScratchpadSize / sizeof(convertible_t);
|
||||||
constexpr uint32_t ScratchpadL1 = ScratchpadSize / 16 / sizeof(convertible_t);
|
constexpr uint32_t ScratchpadL1 = ScratchpadSize / 16 / sizeof(convertible_t);
|
||||||
|
Loading…
Reference in New Issue
Block a user