From 175a82c3ae5c714264cc18123178c42f475e4c5d Mon Sep 17 00:00:00 2001 From: Alberto Quattrini Li Date: Sat, 23 May 2020 21:03:58 -0400 Subject: [PATCH 1/5] Static library option for MSVC updated. --- tool/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tool/CMakeLists.txt b/tool/CMakeLists.txt index 3739e552..350955c0 100644 --- a/tool/CMakeLists.txt +++ b/tool/CMakeLists.txt @@ -7,7 +7,7 @@ add_executable(foonathan_memory_node_size_debugger test_types.hpp node_size_debugger.hpp node_size_debugger.cpp) if (CMAKE_CROSSCOMPILING) # statically link when cross compiling so emulator doesn't need library paths - set_target_properties(foonathan_memory_node_size_debugger PROPERTIES LINK_FLAGS "-static") + set_target_properties(foonathan_memory_node_size_debugger PROPERTIES LINK_FLAGS "/WHOLEARCHIVE") endif() if (MSVC) target_compile_options(foonathan_memory_node_size_debugger PRIVATE "/bigobj") From 18ced54f093a13a8f7f97a5f4fe42506503f6967 Mon Sep 17 00:00:00 2001 From: Alberto Quattrini Li Date: Sun, 24 May 2020 22:10:08 -0400 Subject: [PATCH 2/5] Use of VirtualAlloc compatible also with UWP VirtualAlloc to VirtualAllocFromApp so that it is compatible for both Windows Desktop and UWP (https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualallocfromapp). --- src/virtual_memory.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/virtual_memory.cpp b/src/virtual_memory.cpp index c0c9277b..85fe8163 100644 --- a/src/virtual_memory.cpp +++ b/src/virtual_memory.cpp @@ -37,7 +37,7 @@ const std::size_t foonathan::memory::virtual_memory_page_size = get_page_size(); void* foonathan::memory::virtual_memory_reserve(std::size_t no_pages) noexcept { auto pages = - VirtualAlloc(nullptr, no_pages * virtual_memory_page_size, MEM_RESERVE, PAGE_READWRITE); + VirtualAllocFromApp(nullptr, no_pages * virtual_memory_page_size, MEM_RESERVE, PAGE_READWRITE); return pages; } @@ -51,7 +51,7 @@ void* foonathan::memory::virtual_memory_commit(void* memory, std::size_t no_pages) noexcept { auto region = - VirtualAlloc(memory, no_pages * virtual_memory_page_size, MEM_COMMIT, PAGE_READWRITE); + VirtualAllocFromApp(memory, no_pages * virtual_memory_page_size, MEM_COMMIT, PAGE_READWRITE); if (!region) return nullptr; FOONATHAN_MEMORY_ASSERT(region == memory); From a060513f01879c2caeb17973fbf84efdbe5cab5f Mon Sep 17 00:00:00 2001 From: Alberto Quattrini Li Date: Sat, 30 May 2020 01:50:59 -0400 Subject: [PATCH 3/5] Added check for UWP. Added check for UWP so that older versions of Visual Studio can still work (see https://docs.microsoft.com/en-us/cpp/porting/how-to-use-existing-cpp-code-in-a-universal-windows-platform-app?view=vs-2019). --- src/virtual_memory.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/virtual_memory.cpp b/src/virtual_memory.cpp index 85fe8163..650fac86 100644 --- a/src/virtual_memory.cpp +++ b/src/virtual_memory.cpp @@ -19,6 +19,7 @@ void detail::virtual_memory_allocator_leak_handler::operator()(std::ptrdiff_t am #if defined(_WIN32) #include +#include namespace { @@ -37,7 +38,11 @@ const std::size_t foonathan::memory::virtual_memory_page_size = get_page_size(); void* foonathan::memory::virtual_memory_reserve(std::size_t no_pages) noexcept { auto pages = + #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + VirtualAlloc(nullptr, no_pages * virtual_memory_page_size, MEM_RESERVE, PAGE_READWRITE); + #else VirtualAllocFromApp(nullptr, no_pages * virtual_memory_page_size, MEM_RESERVE, PAGE_READWRITE); + #endif return pages; } @@ -51,7 +56,11 @@ void* foonathan::memory::virtual_memory_commit(void* memory, std::size_t no_pages) noexcept { auto region = + #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + VirtualAlloc(memory, no_pages * virtual_memory_page_size, MEM_COMMIT, PAGE_READWRITE); + #else VirtualAllocFromApp(memory, no_pages * virtual_memory_page_size, MEM_COMMIT, PAGE_READWRITE); + #endif if (!region) return nullptr; FOONATHAN_MEMORY_ASSERT(region == memory); From 9fc0d8611a524479fc2466a6f3495d53441f150b Mon Sep 17 00:00:00 2001 From: Alberto Quattrini Li Date: Sat, 30 May 2020 01:52:32 -0400 Subject: [PATCH 4/5] Indentation fixes. --- src/virtual_memory.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/virtual_memory.cpp b/src/virtual_memory.cpp index 650fac86..d142321b 100644 --- a/src/virtual_memory.cpp +++ b/src/virtual_memory.cpp @@ -39,10 +39,10 @@ void* foonathan::memory::virtual_memory_reserve(std::size_t no_pages) noexcept { auto pages = #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) - VirtualAlloc(nullptr, no_pages * virtual_memory_page_size, MEM_RESERVE, PAGE_READWRITE); - #else + VirtualAlloc(nullptr, no_pages * virtual_memory_page_size, MEM_RESERVE, PAGE_READWRITE); + #else VirtualAllocFromApp(nullptr, no_pages * virtual_memory_page_size, MEM_RESERVE, PAGE_READWRITE); - #endif + #endif return pages; } @@ -57,10 +57,10 @@ void* foonathan::memory::virtual_memory_commit(void* memory, { auto region = #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) - VirtualAlloc(memory, no_pages * virtual_memory_page_size, MEM_COMMIT, PAGE_READWRITE); - #else + VirtualAlloc(memory, no_pages * virtual_memory_page_size, MEM_COMMIT, PAGE_READWRITE); + #else VirtualAllocFromApp(memory, no_pages * virtual_memory_page_size, MEM_COMMIT, PAGE_READWRITE); - #endif + #endif if (!region) return nullptr; FOONATHAN_MEMORY_ASSERT(region == memory); From 0f1d791e75ee66fe50407920d3c6b776e65caae9 Mon Sep 17 00:00:00 2001 From: Alberto Quattrini Li Date: Wed, 3 Jun 2020 23:21:56 -0400 Subject: [PATCH 5/5] Changed the check from UWP to VS compiler version As UWP app would just link to this program and given that the library depends on the build tools, the check on whether to use VirtualAlloc vs. VirtualAllocFromApp is on the Visual Studio compiler version (https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=vs-2019). --- src/virtual_memory.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/virtual_memory.cpp b/src/virtual_memory.cpp index d142321b..9bf882a1 100644 --- a/src/virtual_memory.cpp +++ b/src/virtual_memory.cpp @@ -19,7 +19,6 @@ void detail::virtual_memory_allocator_leak_handler::operator()(std::ptrdiff_t am #if defined(_WIN32) #include -#include namespace { @@ -38,7 +37,7 @@ const std::size_t foonathan::memory::virtual_memory_page_size = get_page_size(); void* foonathan::memory::virtual_memory_reserve(std::size_t no_pages) noexcept { auto pages = - #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + #if (_MSC_VER <= 1900) VirtualAlloc(nullptr, no_pages * virtual_memory_page_size, MEM_RESERVE, PAGE_READWRITE); #else VirtualAllocFromApp(nullptr, no_pages * virtual_memory_page_size, MEM_RESERVE, PAGE_READWRITE); @@ -56,7 +55,7 @@ void* foonathan::memory::virtual_memory_commit(void* memory, std::size_t no_pages) noexcept { auto region = - #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + #if (_MSC_VER <= 1900) VirtualAlloc(memory, no_pages * virtual_memory_page_size, MEM_COMMIT, PAGE_READWRITE); #else VirtualAllocFromApp(memory, no_pages * virtual_memory_page_size, MEM_COMMIT, PAGE_READWRITE);