mirror of
https://github.com/xmrig/xmrig.git
synced 2024-12-23 03:59:41 +00:00
Move Ryzen related fixes to RxFix class.
This commit is contained in:
parent
c48e2e6af8
commit
b9d813c403
9 changed files with 215 additions and 102 deletions
|
@ -100,12 +100,21 @@ if (WITH_RANDOMX)
|
||||||
message("-- WITH_MSR=ON")
|
message("-- WITH_MSR=ON")
|
||||||
|
|
||||||
if (XMRIG_OS_WIN)
|
if (XMRIG_OS_WIN)
|
||||||
list(APPEND SOURCES_CRYPTO src/crypto/rx/Rx_win.cpp src/hw/msr/Msr_win.cpp)
|
list(APPEND SOURCES_CRYPTO
|
||||||
|
src/crypto/rx/Rx_win.cpp
|
||||||
|
src/hw/msr/Msr_win.cpp
|
||||||
|
src/crypto/rx/RxFix_win.cpp
|
||||||
|
)
|
||||||
elseif (XMRIG_OS_LINUX)
|
elseif (XMRIG_OS_LINUX)
|
||||||
list(APPEND SOURCES_CRYPTO src/crypto/rx/Rx_linux.cpp src/hw/msr/Msr_linux.cpp)
|
list(APPEND SOURCES_CRYPTO
|
||||||
|
src/crypto/rx/Rx_linux.cpp
|
||||||
|
src/hw/msr/Msr_linux.cpp
|
||||||
|
src/crypto/rx/RxFix_linux.cpp
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
list(APPEND HEADERS_CRYPTO
|
list(APPEND HEADERS_CRYPTO
|
||||||
|
src/crypto/rx/RxFix.h
|
||||||
src/hw/msr/Msr.h
|
src/hw/msr/Msr.h
|
||||||
src/hw/msr/MsrItem.h
|
src/hw/msr/MsrItem.h
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2018-2020, tevador <tevador@gmail.com>
|
Copyright (c) 2018-2020, tevador <tevador@gmail.com>
|
||||||
Copyright (c) 2019-2020, SChernykh <https://github.com/SChernykh>
|
Copyright (c) 2019-2021, SChernykh <https://github.com/SChernykh>
|
||||||
Copyright (c) 2019-2020, XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
Copyright (c) 2019-2021, XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "crypto/rx/Profiler.h"
|
#include "crypto/rx/Profiler.h"
|
||||||
|
|
||||||
#ifdef XMRIG_FIX_RYZEN
|
#ifdef XMRIG_FIX_RYZEN
|
||||||
# include "crypto/rx/Rx.h"
|
# include "crypto/rx/RxFix.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
@ -427,7 +427,7 @@ namespace randomx {
|
||||||
}
|
}
|
||||||
|
|
||||||
# ifdef XMRIG_FIX_RYZEN
|
# ifdef XMRIG_FIX_RYZEN
|
||||||
xmrig::Rx::setMainLoopBounds(mainLoopBounds);
|
xmrig::RxFix::setMainLoopBounds(mainLoopBounds);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
memcpy(code + prologueSize - 48, &pcfg.eMask, sizeof(pcfg.eMask));
|
memcpy(code + prologueSize - 48, &pcfg.eMask, sizeof(pcfg.eMask));
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright (c) 2018-2019 tevador <tevador@gmail.com>
|
* Copyright (c) 2018-2019 tevador <tevador@gmail.com>
|
||||||
* Copyright (c) 2018-2020 SChernykh <https://github.com/SChernykh>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright (c) 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -27,6 +27,11 @@
|
||||||
#include "crypto/randomx/aes_hash.hpp"
|
#include "crypto/randomx/aes_hash.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef XMRIG_FIX_RYZEN
|
||||||
|
# include "crypto/rx/RxFix.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
namespace xmrig {
|
namespace xmrig {
|
||||||
|
|
||||||
|
|
||||||
|
@ -104,7 +109,10 @@ bool xmrig::Rx::init(const T &seed, const RxConfig &config, const CpuConfig &cpu
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!osInitialized) {
|
if (!osInitialized) {
|
||||||
setupMainLoopExceptionFrame();
|
# ifdef XMRIG_FIX_RYZEN
|
||||||
|
RxFix::setupMainLoopExceptionFrame();
|
||||||
|
# endif
|
||||||
|
|
||||||
if (!cpu.isHwAES()) {
|
if (!cpu.isHwAES()) {
|
||||||
SelectSoftAESImpl(cpu.threads().get(seed.algorithm()).count());
|
SelectSoftAESImpl(cpu.threads().get(seed.algorithm()).count());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright (c) 2018-2019 tevador <tevador@gmail.com>
|
* Copyright (c) 2018-2019 tevador <tevador@gmail.com>
|
||||||
* Copyright (c) 2018-2020 SChernykh <https://github.com/SChernykh>
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright (c) 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -52,10 +52,6 @@ public:
|
||||||
template<typename T> static bool init(const T &seed, const RxConfig &config, const CpuConfig &cpu);
|
template<typename T> static bool init(const T &seed, const RxConfig &config, const CpuConfig &cpu);
|
||||||
template<typename T> static bool isReady(const T &seed);
|
template<typename T> static bool isReady(const T &seed);
|
||||||
|
|
||||||
# ifdef XMRIG_FIX_RYZEN
|
|
||||||
static void setMainLoopBounds(const std::pair<const void*, const void*>& bounds);
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef XMRIG_FEATURE_MSR
|
# ifdef XMRIG_FEATURE_MSR
|
||||||
static bool isMSR();
|
static bool isMSR();
|
||||||
# else
|
# else
|
||||||
|
@ -65,7 +61,6 @@ public:
|
||||||
private:
|
private:
|
||||||
static bool msrInit(const RxConfig &config, const std::vector<CpuThread>& threads);
|
static bool msrInit(const RxConfig &config, const std::vector<CpuThread>& threads);
|
||||||
static void msrDestroy();
|
static void msrDestroy();
|
||||||
static void setupMainLoopExceptionFrame();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
42
src/crypto/rx/RxFix.h
Normal file
42
src/crypto/rx/RxFix.h
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/* XMRig
|
||||||
|
* Copyright (c) 2018-2019 tevador <tevador@gmail.com>
|
||||||
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef XMRIG_RXFIX_H
|
||||||
|
#define XMRIG_RXFIX_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
|
||||||
|
namespace xmrig
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
class RxFix
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static void setMainLoopBounds(const std::pair<const void *, const void *> &bounds);
|
||||||
|
static void setupMainLoopExceptionFrame();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} /* namespace xmrig */
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* XMRIG_RXFIX_H */
|
71
src/crypto/rx/RxFix_linux.cpp
Normal file
71
src/crypto/rx/RxFix_linux.cpp
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
/* XMRig
|
||||||
|
* Copyright (c) 2018-2019 tevador <tevador@gmail.com>
|
||||||
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "crypto/rx/RxFix.h"
|
||||||
|
#include "base/io/log/Log.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include <csignal>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <ucontext.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace xmrig {
|
||||||
|
|
||||||
|
|
||||||
|
static thread_local std::pair<const void*, const void*> mainLoopBounds = { nullptr, nullptr };
|
||||||
|
|
||||||
|
|
||||||
|
static void MainLoopHandler(int sig, siginfo_t *info, void *ucontext)
|
||||||
|
{
|
||||||
|
ucontext_t *ucp = (ucontext_t*) ucontext;
|
||||||
|
|
||||||
|
LOG_VERBOSE(YELLOW_BOLD("%s at %p"), (sig == SIGSEGV) ? "SIGSEGV" : "SIGILL", ucp->uc_mcontext.gregs[REG_RIP]);
|
||||||
|
|
||||||
|
void* p = reinterpret_cast<void*>(ucp->uc_mcontext.gregs[REG_RIP]);
|
||||||
|
const std::pair<const void*, const void*>& loopBounds = mainLoopBounds;
|
||||||
|
|
||||||
|
if ((loopBounds.first <= p) && (p < loopBounds.second)) {
|
||||||
|
ucp->uc_mcontext.gregs[REG_RIP] = reinterpret_cast<size_t>(loopBounds.second);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace xmrig
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void xmrig::RxFix::setMainLoopBounds(const std::pair<const void *, const void *> &bounds)
|
||||||
|
{
|
||||||
|
mainLoopBounds = bounds;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void xmrig::RxFix::setupMainLoopExceptionFrame()
|
||||||
|
{
|
||||||
|
struct sigaction act = {};
|
||||||
|
act.sa_sigaction = MainLoopHandler;
|
||||||
|
act.sa_flags = SA_RESTART | SA_SIGINFO;
|
||||||
|
sigaction(SIGSEGV, &act, nullptr);
|
||||||
|
sigaction(SIGILL, &act, nullptr);
|
||||||
|
}
|
74
src/crypto/rx/RxFix_win.cpp
Normal file
74
src/crypto/rx/RxFix_win.cpp
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
/* XMRig
|
||||||
|
* Copyright (c) 2018-2019 tevador <tevador@gmail.com>
|
||||||
|
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
|
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "crypto/rx/RxFix.h"
|
||||||
|
#include "base/io/log/Log.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace xmrig {
|
||||||
|
|
||||||
|
|
||||||
|
static thread_local std::pair<const void*, const void*> mainLoopBounds = { nullptr, nullptr };
|
||||||
|
|
||||||
|
|
||||||
|
static LONG WINAPI MainLoopHandler(_EXCEPTION_POINTERS *ExceptionInfo)
|
||||||
|
{
|
||||||
|
if (ExceptionInfo->ExceptionRecord->ExceptionCode == 0xC0000005) {
|
||||||
|
const char* accessType;
|
||||||
|
switch (ExceptionInfo->ExceptionRecord->ExceptionInformation[0]) {
|
||||||
|
case 0: accessType = "read"; break;
|
||||||
|
case 1: accessType = "write"; break;
|
||||||
|
case 8: accessType = "DEP violation"; break;
|
||||||
|
default: accessType = "unknown"; break;
|
||||||
|
}
|
||||||
|
LOG_VERBOSE(YELLOW_BOLD("[THREAD %u] Access violation at 0x%p: %s at address 0x%p"), GetCurrentThreadId(), ExceptionInfo->ExceptionRecord->ExceptionAddress, accessType, ExceptionInfo->ExceptionRecord->ExceptionInformation[1]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
LOG_VERBOSE(YELLOW_BOLD("[THREAD %u] Exception 0x%08X at 0x%p"), GetCurrentThreadId(), ExceptionInfo->ExceptionRecord->ExceptionCode, ExceptionInfo->ExceptionRecord->ExceptionAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
void* p = reinterpret_cast<void*>(ExceptionInfo->ContextRecord->Rip);
|
||||||
|
const std::pair<const void*, const void*>& loopBounds = mainLoopBounds;
|
||||||
|
|
||||||
|
if ((loopBounds.first <= p) && (p < loopBounds.second)) {
|
||||||
|
ExceptionInfo->ContextRecord->Rip = reinterpret_cast<DWORD64>(loopBounds.second);
|
||||||
|
return EXCEPTION_CONTINUE_EXECUTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EXCEPTION_CONTINUE_SEARCH;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace xmrig
|
||||||
|
|
||||||
|
|
||||||
|
void xmrig::RxFix::setMainLoopBounds(const std::pair<const void *, const void *> &bounds)
|
||||||
|
{
|
||||||
|
mainLoopBounds = bounds;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void xmrig::RxFix::setupMainLoopExceptionFrame()
|
||||||
|
{
|
||||||
|
AddVectoredExceptionHandler(1, MainLoopHandler);
|
||||||
|
}
|
|
@ -37,8 +37,6 @@
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <signal.h>
|
|
||||||
#include <ucontext.h>
|
|
||||||
|
|
||||||
|
|
||||||
namespace xmrig {
|
namespace xmrig {
|
||||||
|
@ -235,33 +233,6 @@ static bool wrmsr(const MsrItems& preset, const std::vector<CpuThread>& threads,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef XMRIG_FIX_RYZEN
|
|
||||||
static thread_local std::pair<const void*, const void*> mainLoopBounds = { nullptr, nullptr };
|
|
||||||
|
|
||||||
static void MainLoopHandler(int sig, siginfo_t *info, void *ucontext)
|
|
||||||
{
|
|
||||||
ucontext_t *ucp = (ucontext_t*) ucontext;
|
|
||||||
|
|
||||||
LOG_VERBOSE(YELLOW_BOLD("%s at %p"), (sig == SIGSEGV) ? "SIGSEGV" : "SIGILL", ucp->uc_mcontext.gregs[REG_RIP]);
|
|
||||||
|
|
||||||
void* p = reinterpret_cast<void*>(ucp->uc_mcontext.gregs[REG_RIP]);
|
|
||||||
const std::pair<const void*, const void*>& loopBounds = mainLoopBounds;
|
|
||||||
|
|
||||||
if ((loopBounds.first <= p) && (p < loopBounds.second)) {
|
|
||||||
ucp->uc_mcontext.gregs[REG_RIP] = reinterpret_cast<size_t>(loopBounds.second);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Rx::setMainLoopBounds(const std::pair<const void*, const void*>& bounds)
|
|
||||||
{
|
|
||||||
mainLoopBounds = bounds;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
} // namespace xmrig
|
} // namespace xmrig
|
||||||
|
|
||||||
|
|
||||||
|
@ -299,15 +270,3 @@ void xmrig::Rx::msrDestroy()
|
||||||
LOG_ERR(CLEAR "%s" RED_BOLD_S "failed to restore initial state" BLACK_BOLD(" (%" PRIu64 " ms)"), tag, Chrono::steadyMSecs() - ts);
|
LOG_ERR(CLEAR "%s" RED_BOLD_S "failed to restore initial state" BLACK_BOLD(" (%" PRIu64 " ms)"), tag, Chrono::steadyMSecs() - ts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void xmrig::Rx::setupMainLoopExceptionFrame()
|
|
||||||
{
|
|
||||||
# ifdef XMRIG_FIX_RYZEN
|
|
||||||
struct sigaction act = {};
|
|
||||||
act.sa_sigaction = MainLoopHandler;
|
|
||||||
act.sa_flags = SA_RESTART | SA_SIGINFO;
|
|
||||||
sigaction(SIGSEGV, &act, nullptr);
|
|
||||||
sigaction(SIGILL, &act, nullptr);
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
|
|
|
@ -348,43 +348,6 @@ static bool wrmsr(const MsrItems &preset, const std::vector<CpuThread>& threads,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef XMRIG_FIX_RYZEN
|
|
||||||
static thread_local std::pair<const void*, const void*> mainLoopBounds = { nullptr, nullptr };
|
|
||||||
|
|
||||||
static LONG WINAPI MainLoopHandler(_EXCEPTION_POINTERS *ExceptionInfo)
|
|
||||||
{
|
|
||||||
if (ExceptionInfo->ExceptionRecord->ExceptionCode == 0xC0000005) {
|
|
||||||
const char* accessType;
|
|
||||||
switch (ExceptionInfo->ExceptionRecord->ExceptionInformation[0]) {
|
|
||||||
case 0: accessType = "read"; break;
|
|
||||||
case 1: accessType = "write"; break;
|
|
||||||
case 8: accessType = "DEP violation"; break;
|
|
||||||
default: accessType = "unknown"; break;
|
|
||||||
}
|
|
||||||
LOG_VERBOSE(YELLOW_BOLD("[THREAD %u] Access violation at 0x%p: %s at address 0x%p"), GetCurrentThreadId(), ExceptionInfo->ExceptionRecord->ExceptionAddress, accessType, ExceptionInfo->ExceptionRecord->ExceptionInformation[1]);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
LOG_VERBOSE(YELLOW_BOLD("[THREAD %u] Exception 0x%08X at 0x%p"), GetCurrentThreadId(), ExceptionInfo->ExceptionRecord->ExceptionCode, ExceptionInfo->ExceptionRecord->ExceptionAddress);
|
|
||||||
}
|
|
||||||
|
|
||||||
void* p = reinterpret_cast<void*>(ExceptionInfo->ContextRecord->Rip);
|
|
||||||
const std::pair<const void*, const void*>& loopBounds = mainLoopBounds;
|
|
||||||
|
|
||||||
if ((loopBounds.first <= p) && (p < loopBounds.second)) {
|
|
||||||
ExceptionInfo->ContextRecord->Rip = reinterpret_cast<DWORD64>(loopBounds.second);
|
|
||||||
return EXCEPTION_CONTINUE_EXECUTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
return EXCEPTION_CONTINUE_SEARCH;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Rx::setMainLoopBounds(const std::pair<const void*, const void*>& bounds)
|
|
||||||
{
|
|
||||||
mainLoopBounds = bounds;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
} // namespace xmrig
|
} // namespace xmrig
|
||||||
|
|
||||||
|
|
||||||
|
@ -421,11 +384,3 @@ void xmrig::Rx::msrDestroy()
|
||||||
LOG_ERR(CLEAR "%s" RED_BOLD_S "failed to restore initial state" BLACK_BOLD(" (%" PRIu64 " ms)"), tag, Chrono::steadyMSecs() - ts);
|
LOG_ERR(CLEAR "%s" RED_BOLD_S "failed to restore initial state" BLACK_BOLD(" (%" PRIu64 " ms)"), tag, Chrono::steadyMSecs() - ts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void xmrig::Rx::setupMainLoopExceptionFrame()
|
|
||||||
{
|
|
||||||
# ifdef XMRIG_FIX_RYZEN
|
|
||||||
AddVectoredExceptionHandler(1, MainLoopHandler);
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue