Skip to content

Commit

Permalink
Merge xmrig v6.14.0 into master
Browse files Browse the repository at this point in the history
  • Loading branch information
MoneroOcean committed Feb 4, 2022
2 parents 2a53e73 + 4f5f9bd commit 72abe11
Show file tree
Hide file tree
Showing 14 changed files with 96 additions and 19 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# v6.16.4
- [#2904](https://github.com/xmrig/xmrig/pull/2904) Fixed unaligned memory accesses.
- [#2908](https://github.com/xmrig/xmrig/pull/2908) Added MSVC/2022 to `version.h`.
- [#2910](https://github.com/xmrig/xmrig/issues/2910) Fixed donation for GhostRider/RTM.

# v6.16.3
- [#2778](https://github.com/xmrig/xmrig/pull/2778) Fixed `READY threads X/X` display after algorithm switching.
- [#2782](https://github.com/xmrig/xmrig/pull/2782) Updated GhostRider documentation.
Expand Down
4 changes: 2 additions & 2 deletions cmake/flags.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ARM8_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARM8_CXX_FLAGS} -flax-vector-conversions")
elseif (ARM_TARGET EQUAL 7)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon -flax-vector-conversions")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv7-a -mfpu=neon")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv7-a -mfpu=neon -flax-vector-conversions")
else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maes")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maes")
Expand Down
7 changes: 4 additions & 3 deletions src/backend/common/WorkerJob.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@


#include "base/net/stratum/Job.h"
#include "base/tools/Alignment.h"
#include "crypto/common/Nonce.h"


Expand Down Expand Up @@ -77,7 +78,7 @@ class WorkerJob
}
else {
for (size_t i = 0; i < N; ++i) {
*nonce(i) += roundSize;
writeUnaligned(nonce(i), readUnaligned(nonce(i)) + roundSize);
}
}

Expand Down Expand Up @@ -136,11 +137,11 @@ inline bool xmrig::WorkerJob<1>::nextRound(uint32_t rounds, uint32_t roundSize)
return false;
}
if (nonceSize() == sizeof(uint64_t)) {
m_jobs[index()].nonce()[1] = n[1];
writeUnaligned(m_jobs[index()].nonce() + 1, readUnaligned(n + 1));
}
}
else {
*n += roundSize;
writeUnaligned(n, readUnaligned(n) + roundSize);
}

return true;
Expand Down
3 changes: 2 additions & 1 deletion src/backend/cpu/CpuWorker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

#include "backend/cpu/Cpu.h"
#include "backend/cpu/CpuWorker.h"
#include "base/tools/Alignment.h"
#include "base/tools/Chrono.h"
#include "core/config/Config.h"
#include "core/Miner.h"
Expand Down Expand Up @@ -281,7 +282,7 @@ void xmrig::CpuWorker<N>::start()

uint32_t current_job_nonces[N];
for (size_t i = 0; i < N; ++i) {
current_job_nonces[i] = *m_job.nonce(i);
current_job_nonces[i] = readUnaligned(m_job.nonce(i));
}

# ifdef XMRIG_FEATURE_BENCHMARK
Expand Down
3 changes: 2 additions & 1 deletion src/backend/cuda/CudaWorker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "backend/cuda/runners/CudaCnRunner.h"
#include "backend/cuda/wrappers/CudaDevice.h"
#include "base/io/log/Log.h"
#include "base/tools/Alignment.h"
#include "base/tools/Chrono.h"
#include "core/Miner.h"
#include "crypto/common/Nonce.h"
Expand Down Expand Up @@ -152,7 +153,7 @@ void xmrig::CudaWorker::start()
uint32_t foundNonce[16] = { 0 };
uint32_t foundCount = 0;

if (!m_runner->run(*m_job.nonce(), &foundCount, foundNonce)) {
if (!m_runner->run(readUnaligned(m_job.nonce()), &foundCount, foundNonce)) {
return;
}

Expand Down
3 changes: 2 additions & 1 deletion src/backend/opencl/OclWorker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include "backend/opencl/runners/tools/OclSharedData.h"
#include "backend/opencl/runners/tools/OclSharedState.h"
#include "base/io/log/Log.h"
#include "base/tools/Alignment.h"
#include "base/tools/Chrono.h"
#include "core/Miner.h"
#include "crypto/common/Nonce.h"
Expand Down Expand Up @@ -189,7 +190,7 @@ void xmrig::OclWorker::start()
const uint64_t t = Chrono::steadyMSecs();

try {
m_runner->run(*m_job.nonce(), results);
m_runner->run(readUnaligned(m_job.nonce()), results);
}
catch (std::exception &ex) {
printError(id(), ex.what());
Expand Down
1 change: 1 addition & 0 deletions src/base/base.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ set(HEADERS_BASE
src/base/net/tools/MemPool.h
src/base/net/tools/NetBuffer.h
src/base/net/tools/Storage.h
src/base/tools/Alignment.h
src/base/tools/Arguments.h
src/base/tools/Baton.h
src/base/tools/bswap_64.h
Expand Down
6 changes: 6 additions & 0 deletions src/base/net/stratum/AutoClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,12 @@ bool xmrig::AutoClient::parseLogin(const rapidjson::Value &result, int *code)
m_mode = ETH_MODE;
setAlgo(algo);

# ifdef XMRIG_ALGO_GHOSTRIDER
if (algo.family() == Algorithm::GHOSTRIDER) {
setExtraNonce2Size(Json::getUint64(result, "extra_nonce2_size"));
}
# endif

return true;
}

Expand Down
4 changes: 4 additions & 0 deletions src/base/net/stratum/EthStratumClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ class EthStratumClient : public Client

void setExtraNonce(const rapidjson::Value &nonce);

# ifdef XMRIG_ALGO_GHOSTRIDER
inline void setExtraNonce2Size(uint64_t size) { m_extraNonce2Size = size; }
# endif

private:
static const char *errorMessage(const rapidjson::Value &error);

Expand Down
3 changes: 2 additions & 1 deletion src/base/net/stratum/Job.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@


#include "base/net/stratum/Job.h"
#include "base/tools/Alignment.h"
#include "base/tools/Buffer.h"
#include "base/tools/Cvt.h"
#include "base/tools/cryptonote/BlockTemplate.h"
Expand Down Expand Up @@ -73,7 +74,7 @@ bool xmrig::Job::setBlob(const char *blob)
return false;
}

if (*nonce() != 0 && !m_nicehash) {
if (readUnaligned(nonce()) != 0 && !m_nicehash) {
m_nicehash = true;
}

Expand Down
53 changes: 53 additions & 0 deletions src/base/tools/Alignment.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/* XMRig
* Copyright (c) 2018-2022 SChernykh <https://github.com/SChernykh>
* Copyright (c) 2016-2022 XMRig <https://github.com/xmrig>, <[email protected]>
*
* 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_ALIGNMENT_H
#define XMRIG_ALIGNMENT_H


#include <type_traits>
#include <cstring>


namespace xmrig {


template<typename T>
inline T readUnaligned(const T* ptr)
{
static_assert(std::is_integral<T>::value, "Integer type required");

T result;
memcpy(&result, ptr, sizeof(T));
return result;
}


template<typename T>
inline void writeUnaligned(T* ptr, T data)
{
static_assert(std::is_integral<T>::value, "Integer type required");

memcpy(ptr, &data, sizeof(T));
}


} /* namespace xmrig */


#endif /* XMRIG_ALIGNMENT_H */
5 changes: 3 additions & 2 deletions src/crypto/common/Nonce.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#include "base/tools/Alignment.h"
#include "crypto/common/Nonce.h"


Expand Down Expand Up @@ -53,10 +54,10 @@ bool xmrig::Nonce::next(uint8_t index, uint32_t *nonce, uint32_t reserveCount, u
continue;
}

*nonce = (nonce[0] & ~mask) | counter;
writeUnaligned(nonce, static_cast<uint32_t>((readUnaligned(nonce) & ~mask) | counter));

if (mask > 0xFFFFFFFFULL) {
nonce[1] = (nonce[1] & (~mask >> 32)) | (counter >> 32);
writeUnaligned(nonce + 1, static_cast<uint32_t>((readUnaligned(nonce + 1) & (~mask >> 32)) | (counter >> 32)));
}

return true;
Expand Down
10 changes: 5 additions & 5 deletions src/net/JobResult.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,12 @@ class JobResult

inline JobResult(const Job &job, uint64_t nonce, const uint8_t *result, const uint8_t* header_hash = nullptr, const uint8_t *mix_hash = nullptr, const uint8_t* miner_signature = nullptr) :
algorithm(job.algorithm()),
index(job.index()),
clientId(job.clientId()),
jobId(job.id()),
backend(job.backend()),
nonce(nonce),
diff(job.diff()),
index(job.index())
diff(job.diff())
{
memcpy(m_result, result, sizeof(m_result));

Expand All @@ -70,12 +70,12 @@ class JobResult

inline JobResult(const Job &job) :
algorithm(job.algorithm()),
index(job.index()),
clientId(job.clientId()),
jobId(job.id()),
backend(job.backend()),
nonce(0),
diff(0),
index(job.index())
diff(0)
{
}

Expand All @@ -88,12 +88,12 @@ class JobResult
inline const uint8_t *minerSignature() const { return m_hasMinerSignature ? m_minerSignature : nullptr; }

const Algorithm algorithm;
const uint8_t index;
const String clientId;
const String jobId;
const uint32_t backend;
const uint64_t nonce;
const uint64_t diff;
const uint8_t index;

private:
uint8_t m_result[32] = { 0 };
Expand Down
8 changes: 5 additions & 3 deletions src/version.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,20 @@
#define APP_ID "xmrig"
#define APP_NAME "XMRig"
#define APP_DESC "XMRig miner"
#define APP_VERSION "6.16.3-mo1"
#define APP_VERSION "6.16.4-mo1"
#define APP_DOMAIN "xmrig.com"
#define APP_SITE "www.xmrig.com"
#define APP_COPYRIGHT "Copyright (C) 2016-2021 xmrig.com"
#define APP_KIND "miner"

#define APP_VER_MAJOR 6
#define APP_VER_MINOR 16
#define APP_VER_PATCH 3
#define APP_VER_PATCH 4

#ifdef _MSC_VER
# if (_MSC_VER >= 1920)
# if (_MSC_VER >= 1930)
# define MSVC_VERSION 2022
# elif (_MSC_VER >= 1920 && _MSC_VER < 1930)
# define MSVC_VERSION 2019
# elif (_MSC_VER >= 1910 && _MSC_VER < 1920)
# define MSVC_VERSION 2017
Expand Down

0 comments on commit 72abe11

Please sign in to comment.