X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmisc.cpp;h=42083e0a94f63dd98e98f9a9d59acf0301016be3;hb=3c0e86a91e48baea273306e45fb6cf13a59373cf;hp=6469c5cf9eca24edbd8b9579951bce9d9b07bf84;hpb=7a6fa34f5f9f0f193d9350cd58c82a8f98a6505d;p=stockfish
diff --git a/src/misc.cpp b/src/misc.cpp
index 6469c5cf..42083e0a 100644
--- a/src/misc.cpp
+++ b/src/misc.cpp
@@ -16,6 +16,8 @@
along with this program. If not, see .
*/
+#include "misc.h"
+
#ifdef _WIN32
#if _WIN32_WINNT < 0x0601
#undef _WIN32_WINNT
@@ -38,20 +40,25 @@ using fun2_t = bool(*)(USHORT, PGROUP_AFFINITY);
using fun3_t = bool(*)(HANDLE, CONST GROUP_AFFINITY*, PGROUP_AFFINITY);
using fun4_t = bool(*)(USHORT, PGROUP_AFFINITY, USHORT, PUSHORT);
using fun5_t = WORD(*)();
+using fun6_t = bool(*)(HANDLE, DWORD, PHANDLE);
+using fun7_t = bool(*)(LPCSTR, LPCSTR, PLUID);
+using fun8_t = bool(*)(HANDLE, BOOL, PTOKEN_PRIVILEGES, DWORD, PTOKEN_PRIVILEGES, PDWORD);
}
#endif
+#include
#include
#include
#include
#include
#include
+#include
#include
#include
-#include
+
+#include "types.h"
#if defined(__linux__) && !defined(__ANDROID__)
-#include
#include
#endif
@@ -60,9 +67,6 @@ using fun5_t = WORD(*)();
#include
#endif
-#include "misc.h"
-#include "thread.h"
-
using namespace std;
namespace Stockfish {
@@ -157,7 +161,7 @@ string engine_info(bool to_uci) {
{
ss << "-";
#ifdef GIT_DATE
- ss << GIT_DATE;
+ ss << stringify(GIT_DATE);
#else
constexpr string_view months("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec");
string month, day, year;
@@ -170,7 +174,7 @@ string engine_info(bool to_uci) {
ss << "-";
#ifdef GIT_SHA
- ss << GIT_SHA;
+ ss << stringify(GIT_SHA);
#else
ss << "nogit";
#endif
@@ -187,8 +191,6 @@ string engine_info(bool to_uci) {
std::string compiler_info() {
- #define stringify2(x) #x
- #define stringify(x) stringify2(x)
#define make_version_string(major, minor, patch) stringify(major) "." stringify(minor) "." stringify(patch)
/// Predefined macros hell:
@@ -279,7 +281,9 @@ std::string compiler_info() {
#if defined(USE_MMX)
compiler += " MMX";
#endif
- #if defined(USE_NEON)
+ #if defined(USE_NEON_DOTPROD)
+ compiler += " NEON_DOTPROD";
+ #elif defined(USE_NEON)
compiler += " NEON";
#endif
@@ -372,7 +376,7 @@ void dbg_print() {
for (int i = 0; i < MaxDebugSlots; ++i)
if ((n = stdev[i][0]))
{
- double r = sqrtl(E(stdev[i][2]) - sqr(E(stdev[i][1])));
+ double r = sqrt(E(stdev[i][2]) - sqr(E(stdev[i][1])));
std::cerr << "Stdev #" << i
<< ": Total " << n << " Stdev " << r
<< std::endl;
@@ -382,8 +386,8 @@ void dbg_print() {
if ((n = correl[i][0]))
{
double r = (E(correl[i][5]) - E(correl[i][1]) * E(correl[i][3]))
- / ( sqrtl(E(correl[i][2]) - sqr(E(correl[i][1])))
- * sqrtl(E(correl[i][4]) - sqr(E(correl[i][3]))));
+ / ( sqrt(E(correl[i][2]) - sqr(E(correl[i][1])))
+ * sqrt(E(correl[i][4]) - sqr(E(correl[i][3]))));
std::cerr << "Correl. #" << i
<< ": Total " << n << " Coefficient " << r
<< std::endl;
@@ -488,11 +492,30 @@ static void* aligned_large_pages_alloc_windows([[maybe_unused]] size_t allocSize
if (!largePageSize)
return nullptr;
- // We need SeLockMemoryPrivilege, so try to enable it for the process
- if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hProcessToken))
+ // Dynamically link OpenProcessToken, LookupPrivilegeValue and AdjustTokenPrivileges
+
+ HMODULE hAdvapi32 = GetModuleHandle(TEXT("advapi32.dll"));
+
+ if (!hAdvapi32)
+ hAdvapi32 = LoadLibrary(TEXT("advapi32.dll"));
+
+ auto fun6 = (fun6_t)(void(*)())GetProcAddress(hAdvapi32, "OpenProcessToken");
+ if (!fun6)
+ return nullptr;
+ auto fun7 = (fun7_t)(void(*)())GetProcAddress(hAdvapi32, "LookupPrivilegeValueA");
+ if (!fun7)
return nullptr;
+ auto fun8 = (fun8_t)(void(*)())GetProcAddress(hAdvapi32, "AdjustTokenPrivileges");
+ if (!fun8)
+ return nullptr;
+
+ // We need SeLockMemoryPrivilege, so try to enable it for the process
+ if (!fun6( // OpenProcessToken()
+ GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hProcessToken))
+ return nullptr;
- if (LookupPrivilegeValue(nullptr, SE_LOCK_MEMORY_NAME, &luid))
+ if (fun7( // LookupPrivilegeValue(nullptr, SE_LOCK_MEMORY_NAME, &luid)
+ nullptr, "SeLockMemoryPrivilege", &luid))
{
TOKEN_PRIVILEGES tp { };
TOKEN_PRIVILEGES prevTp { };
@@ -504,7 +527,7 @@ static void* aligned_large_pages_alloc_windows([[maybe_unused]] size_t allocSize
// Try to enable SeLockMemoryPrivilege. Note that even if AdjustTokenPrivileges() succeeds,
// we still need to query GetLastError() to ensure that the privileges were actually obtained.
- if (AdjustTokenPrivileges(
+ if (fun8( // AdjustTokenPrivileges()
hProcessToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &prevTp, &prevTpLen) &&
GetLastError() == ERROR_SUCCESS)
{
@@ -514,7 +537,8 @@ static void* aligned_large_pages_alloc_windows([[maybe_unused]] size_t allocSize
nullptr, allocSize, MEM_RESERVE | MEM_COMMIT | MEM_LARGE_PAGES, PAGE_READWRITE);
// Privilege no longer needed, restore previous state
- AdjustTokenPrivileges(hProcessToken, FALSE, &prevTp, 0, nullptr, nullptr);
+ fun8( // AdjustTokenPrivileges ()
+ hProcessToken, FALSE, &prevTp, 0, nullptr, nullptr);
}
}