diff options
author | Cody P Schafer | 2018-10-11 21:54:47 -0400 |
---|---|---|
committer | Cody P Schafer | 2018-10-11 21:54:47 -0400 |
commit | c9a69d6a30c3eec20094a4a6ab6a5d61a4acfa0a (patch) | |
tree | f9f5043a91d504f15eaae353e35933c33da7b551 | |
parent | e49f44420d90580c8f1599f0e1ec6706c077c2b5 (diff) | |
download | aur-c9a69d6a30c3eec20094a4a6ab6a5d61a4acfa0a.tar.gz |
version 2.5.0
-rw-r--r-- | 1876.patch | 168 | ||||
-rw-r--r-- | PKGBUILD | 6 |
2 files changed, 171 insertions, 3 deletions
diff --git a/1876.patch b/1876.patch new file mode 100644 index 000000000000..1ae5fd98faa8 --- /dev/null +++ b/1876.patch @@ -0,0 +1,168 @@ +From 9e592ec58211b91557f955718a02dc02f90981db Mon Sep 17 00:00:00 2001 +From: psychocrypt <psychocryptHPC@gmail.com> +Date: Mon, 8 Oct 2018 14:48:22 +0200 +Subject: [PATCH] compatibility and better messages + +- add more descriptive messages if memory allocation fails +- add gnu compiler flags: `noexecstack` to support systemd +- handle cases where memroy allocation fails + +Co-authored-by: Tony Butler <spudz76@gmail.com> +--- + CMakeLists.txt | 10 ++++++++-- + xmrstak/backend/amd/minethd.cpp | 5 +++++ + .../backend/cpu/crypto/cryptonight_common.cpp | 16 +++++++++------- + xmrstak/backend/cpu/minethd.cpp | 8 ++++++++ + xmrstak/cli/cli-miner.cpp | 1 + + xmrstak/config.tpl | 5 ++--- + 6 files changed, 33 insertions(+), 12 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 712fb429..b714ee0c 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -443,6 +443,11 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + endif() + endif() + ++if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") ++ set(CMAKE_CXX_FLAGS "-Wl,-z,noexecstack ${CMAKE_CXX_FLAGS}") ++ set(CMAKE_C_FLAGS "-Wl,-z,noexecstack ${CMAKE_C_FLAGS}") ++endif() ++ + # activate static libgcc and libstdc++ linking + if(CMAKE_LINK_STATIC) + set(BUILD_SHARED_LIBRARIES OFF) +@@ -464,7 +469,8 @@ if(CMAKE_C_COMPILER_ID MATCHES "MSVC") + else() + # asm optimized monero v8 code + enable_language(ASM) +- set_property(SOURCE "xmrstak/backend/cpu/crypto/asm/cryptonight_v8_main_loop.S" PROPERTY C) ++ set_property(SOURCE "xmrstak/backend/cpu/crypto/asm/cryptonight_v8_main_loop.S" PROPERTY CPP) ++ set_source_files_properties("xmrstak/backend/cpu/crypto/asm/cryptonight_v8_main_loop.S" PROPERTIES COMPILE_FLAGS "-x assembler-with-cpp") + add_library(xmr-stak-asm + STATIC + "xmrstak/backend/cpu/crypto/asm/cryptonight_v8_main_loop.S" +@@ -587,4 +593,4 @@ if( NOT CMAKE_INSTALL_PREFIX STREQUAL PROJECT_BINARY_DIR ) + else() + # this rule is used if the install prefix is the build directory + install(CODE "MESSAGE(\"xmr-stak installed to folder 'bin'\")") +-endif() +\ No newline at end of file ++endif() +diff --git a/xmrstak/backend/amd/minethd.cpp b/xmrstak/backend/amd/minethd.cpp +index 45979cbd..5e70f25a 100644 +--- a/xmrstak/backend/amd/minethd.cpp ++++ b/xmrstak/backend/amd/minethd.cpp +@@ -174,6 +174,11 @@ void minethd::work_main() + cryptonight_ctx* cpu_ctx; + cpu_ctx = cpu::minethd::minethd_alloc_ctx(); + ++ if(cpu_ctx == nullptr) ++ { ++ printer::inst()->print_msg(L0, "ERROR: miner was not able to allocate memory, miner will be stopped."); ++ win_exit(1); ++ } + // start with root algorithm and switch later if fork version is reached + auto miner_algo = ::jconf::inst()->GetCurrentCoinSelection().GetDescription(1).GetMiningAlgoRoot(); + cn_hash_fun hash_fun = cpu::minethd::func_selector(::jconf::inst()->HaveHardwareAes(), true /*bNoPrefetch*/, miner_algo); +diff --git a/xmrstak/backend/cpu/crypto/cryptonight_common.cpp b/xmrstak/backend/cpu/crypto/cryptonight_common.cpp +index a478c9b2..a7e4696a 100644 +--- a/xmrstak/backend/cpu/crypto/cryptonight_common.cpp ++++ b/xmrstak/backend/cpu/crypto/cryptonight_common.cpp +@@ -216,6 +216,8 @@ cryptonight_ctx* cryptonight_alloc_ctx(size_t use_fast_mem, size_t use_mlock, al + ptr->long_state = (uint8_t*)_mm_malloc(hashMemSize, hashMemSize); + ptr->ctx_info[0] = 0; + ptr->ctx_info[1] = 0; ++ if(ptr->long_state == NULL) ++ printer::inst()->print_msg(L0, "MEMORY ALLOC FAILED: _mm_malloc was not able to allocate %s byte",std::to_string(hashMemSize).c_str()); + return ptr; + } + +@@ -243,25 +245,25 @@ cryptonight_ctx* cryptonight_alloc_ctx(size_t use_fast_mem, size_t use_mlock, al + return ptr; + } + #else +- ++//http://man7.org/linux/man-pages/man2/mmap.2.html + #if defined(__APPLE__) +- ptr->long_state = (uint8_t*)mmap(0, hashMemSize, PROT_READ | PROT_WRITE, ++ ptr->long_state = (uint8_t*)mmap(NULL, hashMemSize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANON, VM_FLAGS_SUPERPAGE_SIZE_2MB, 0); + #elif defined(__FreeBSD__) +- ptr->long_state = (uint8_t*)mmap(0, hashMemSize, PROT_READ | PROT_WRITE, ++ ptr->long_state = (uint8_t*)mmap(NULL, hashMemSize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS | MAP_ALIGNED_SUPER | MAP_PREFAULT_READ, -1, 0); + #elif defined(__OpenBSD__) +- ptr->long_state = (uint8_t*)mmap(0, hashMemSize, PROT_READ | PROT_WRITE, ++ ptr->long_state = (uint8_t*)mmap(NULL, hashMemSize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANON, -1, 0); + #else +- ptr->long_state = (uint8_t*)mmap(0, hashMemSize, PROT_READ | PROT_WRITE, +- MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB | MAP_POPULATE, 0, 0); ++ ptr->long_state = (uint8_t*)mmap(NULL, hashMemSize, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB | MAP_POPULATE, -1, 0); + #endif + + if (ptr->long_state == MAP_FAILED) + { + _mm_free(ptr); +- msg->warning = "mmap failed"; ++ msg->warning = "mmap failed, check attribute 'use_slow_memory' in 'config.txt'"; + return NULL; + } + +diff --git a/xmrstak/backend/cpu/minethd.cpp b/xmrstak/backend/cpu/minethd.cpp +index 912ef48b..3e90159e 100644 +--- a/xmrstak/backend/cpu/minethd.cpp ++++ b/xmrstak/backend/cpu/minethd.cpp +@@ -226,6 +226,7 @@ bool minethd::self_test() + { + if ((ctx[i] = minethd_alloc_ctx()) == nullptr) + { ++ printer::inst()->print_msg(L0, "ERROR: miner was not able to allocate memory."); + for (int j = 0; j < i; j++) + cryptonight_free_ctx(ctx[j]); + return false; +@@ -683,6 +684,13 @@ void minethd::multiway_work_main() + for (size_t i = 0; i < N; i++) + { + ctx[i] = minethd_alloc_ctx(); ++ if(ctx[i] == nullptr) ++ { ++ printer::inst()->print_msg(L0, "ERROR: miner was not able to allocate memory."); ++ for (int j = 0; j < i; j++) ++ cryptonight_free_ctx(ctx[j]); ++ win_exit(1); ++ } + piHashVal[i] = (uint64_t*)(bHashOut + 32 * i + 24); + piNonce[i] = (i == 0) ? (uint32_t*)(bWorkBlob + 39) : nullptr; + } +diff --git a/xmrstak/cli/cli-miner.cpp b/xmrstak/cli/cli-miner.cpp +index ae39d250..428952b1 100644 +--- a/xmrstak/cli/cli-miner.cpp ++++ b/xmrstak/cli/cli-miner.cpp +@@ -749,6 +749,7 @@ int main(int argc, char *argv[]) + + if (!BackendConnector::self_test()) + { ++ printer::inst()->print_msg(L0, "Self test not passed!"); + win_exit(); + return 1; + } +diff --git a/xmrstak/config.tpl b/xmrstak/config.tpl +index 96f0e9cb..73ae054c 100644 +--- a/xmrstak/config.tpl ++++ b/xmrstak/config.tpl +@@ -94,9 +94,8 @@ R"===(// generated by XMRSTAK_VERSION + * Memory locking means that the kernel can't swap out the page to disk - something that is unlikely to happen on a---LINUX + * command line system that isn't starved of memory. I haven't observed any difference on a CLI Linux system between---LINUX + * locked and unlocked memory. If that is your setup see option "no_mlck".---LINUX +- */ +- +-/* ++ * ++ * + * use_slow_memory defines our behaviour with regards to large pages. There are three possible options here: + * always - Don't even try to use large pages. Always use slow memory. + * warn - We will try to use large pages, but fall back to slow memory if that fails. @@ -1,5 +1,5 @@ pkgname=xmr-stak -pkgver=2.4.7 +pkgver=2.5.0 pkgrel=0 pkgdesc="Unified All-in-one Monero miner (no cuda)" arch=('x86_64') @@ -10,7 +10,7 @@ depends=('libmicrohttpd' 'openssl' 'hwloc' 'ocl-icd') source=("xmr-stak-$pkgver.tar.gz::https://github.com/fireice-uk/xmr-stak/archive/$pkgver.tar.gz" 'no-donate.patch' 'xmr-stak.service') -sha256sums=('1c4270b2b3b59bf8b37cd2a91fb595bb7ee550397ccae752000592d2f67d4f08' +sha256sums=('617a909754749eb03ee305c5fe3f94217b09824a09bf062dc9ce3d757c7e0dc0' 'b279c373afbce7cc8610c44f69a5e29a4b36969d131e2fd47229211a3903912a' 'e0cbee0dab1c730e5deff31eddef84a635b4c9f33ba2368a446e62acc084649a') @@ -22,7 +22,7 @@ prepare() { build() { cd "$srcdir/xmr-stak-$pkgver" cmake . -DCUDA_ENABLE=OFF - make + make VERBOSE=1 } package() { |