summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/lib/osdlib_uwp.cpp
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2016-11-11 10:11:16 +0100
committer Miodrag Milanovic <mmicko@gmail.com>2016-11-11 10:11:16 +0100
commitd8bf7a88e89866d63cedd73224a2078eeaec6d13 (patch)
treef3dd6fe507cc16465cce30e5f16c4fc61575d8d0 /src/osd/modules/lib/osdlib_uwp.cpp
parentdac02ddf8e9d340385f0094e8241b08b50c73394 (diff)
MALLOC_DEBUG part is not able to compile on UWP (nw)
Diffstat (limited to 'src/osd/modules/lib/osdlib_uwp.cpp')
-rw-r--r--src/osd/modules/lib/osdlib_uwp.cpp88
1 files changed, 2 insertions, 86 deletions
diff --git a/src/osd/modules/lib/osdlib_uwp.cpp b/src/osd/modules/lib/osdlib_uwp.cpp
index 484ed3fb44c..ccdd3f3886a 100644
--- a/src/osd/modules/lib/osdlib_uwp.cpp
+++ b/src/osd/modules/lib/osdlib_uwp.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Olivier Galibert, R. Belmont
+// copyright-holders:Olivier Galibert, R. Belmont, Brad Hughes
//============================================================
//
// sdlos_*.c - OS specific low level code
@@ -13,9 +13,6 @@
#include <mmsystem.h>
#include <stdlib.h>
-#ifndef _MSC_VER
-#include <unistd.h>
-#endif
#include <cstdio>
#include <memory>
@@ -120,24 +117,7 @@ void osd_process_kill()
void *osd_malloc(size_t size)
{
-#ifndef MALLOC_DEBUG
return malloc(size);
-#else
- // add in space for the size and offset
- size += MAX_ALIGNMENT + sizeof(size_t) + 2;
- size &= ~size_t(1);
-
- // basic objects just come from the heap
- uint8_t *const block = reinterpret_cast<uint8_t *>(HeapAlloc(GetProcessHeap(), 0, size));
- if (block == nullptr)
- return nullptr;
- uint8_t *const result = reinterpret_cast<uint8_t *>(reinterpret_cast<uintptr_t>(block + sizeof(size_t) + MAX_ALIGNMENT) & ~(uintptr_t(MAX_ALIGNMENT) - 1));
-
- // store the size and return and pointer to the data afterward
- *reinterpret_cast<size_t *>(block) = size;
- *(result - 1) = result - block;
- return result;
-#endif
}
@@ -147,35 +127,7 @@ void *osd_malloc(size_t size)
void *osd_malloc_array(size_t size)
{
-#ifndef MALLOC_DEBUG
return malloc(size);
-#else
- // add in space for the size and offset
- size += MAX_ALIGNMENT + sizeof(size_t) + 2;
- size &= ~size_t(1);
-
- // round the size up to a page boundary
- size_t const rounded_size = ((size + sizeof(void *) + PAGE_SIZE - 1) / PAGE_SIZE) * PAGE_SIZE;
-
- // reserve that much memory, plus two guard pages
- void *page_base = VirtualAlloc(nullptr, rounded_size + 2 * PAGE_SIZE, MEM_RESERVE, PAGE_NOACCESS);
- if (page_base == nullptr)
- return nullptr;
-
- // now allow access to everything but the first and last pages
- page_base = VirtualAlloc(reinterpret_cast<uint8_t *>(page_base) + PAGE_SIZE, rounded_size, MEM_COMMIT, PAGE_READWRITE);
- if (page_base == nullptr)
- return nullptr;
-
- // work backwards from the page base to get to the block base
- uint8_t *const block = GUARD_ALIGN_START ? reinterpret_cast<uint8_t *>(page_base) : (reinterpret_cast<uint8_t *>(page_base) + rounded_size - size);
- uint8_t *const result = reinterpret_cast<uint8_t *>(reinterpret_cast<uintptr_t>(block + sizeof(size_t) + MAX_ALIGNMENT) & ~(uintptr_t(MAX_ALIGNMENT) - 1));
-
- // store the size at the start with a flag indicating it has a guard page
- *reinterpret_cast<size_t *>(block) = size | 1;
- *(result - 1) = result - block;
- return result;
-#endif
}
@@ -185,25 +137,7 @@ void *osd_malloc_array(size_t size)
void osd_free(void *ptr)
{
-#ifndef MALLOC_DEBUG
free(ptr);
-#else
- uint8_t const offset = *(reinterpret_cast<uint8_t *>(ptr) - 1);
- uint8_t *const block = reinterpret_cast<uint8_t *>(ptr) - offset;
- size_t const size = *reinterpret_cast<size_t *>(block);
-
- if ((size & 0x1) == 0)
- {
- // if no guard page, just free the pointer
- HeapFree(GetProcessHeap(), 0, block);
- }
- else
- {
- // large items need more care
- ULONG_PTR const page_base = reinterpret_cast<ULONG_PTR>(block) & ~(PAGE_SIZE - 1);
- VirtualFree(reinterpret_cast<void *>(page_base - PAGE_SIZE), 0, MEM_RELEASE);
- }
-#endif
}
@@ -237,21 +171,11 @@ void osd_free_executable(void *ptr, size_t size)
void osd_break_into_debugger(const char *message)
{
-#ifdef OSD_WINDOWS
- if (IsDebuggerPresent())
- {
- win_output_debug_string_utf8(message);
- DebugBreak();
- }
- else if (s_debugger_stack_crawler != nullptr)
- (*s_debugger_stack_crawler)();
-#else
if (IsDebuggerPresent())
{
OutputDebugStringA(message);
__debugbreak();
}
-#endif
}
//============================================================
@@ -309,13 +233,7 @@ char *osd_get_clipboard_text(void)
//============================================================
// osd_dynamic_bind
//============================================================
-
-#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
-// for classic desktop applications
-#define load_library(filename) LoadLibrary(filename)
-#else
// for Windows Store universal applications
-
// This needs to change ASAP as it won't be allowed in the store
typedef HMODULE __stdcall t_LLA(const char *);
typedef FARPROC __stdcall t_GPA(HMODULE H, const char *);
@@ -457,7 +375,7 @@ void find_load_exports()
#define load_library(filename) g_LoadLibraryA(osd::text::from_wstring(filename).c_str())
#define get_proc_address(mod, proc) g_GetProcAddressA(mod, proc)
-#endif
+
namespace osd {
class dynamic_module_win32_impl : public dynamic_module
@@ -467,9 +385,7 @@ public:
: m_module(nullptr)
{
m_libraries = libraries;
-#if defined(OSD_UWP)
find_load_exports();
-#endif
}
virtual ~dynamic_module_win32_impl() override