diff --git a/core/iwasm/compilation/aot_llvm.c b/core/iwasm/compilation/aot_llvm.c index 96d6c8c62..e8c805c73 100644 --- a/core/iwasm/compilation/aot_llvm.c +++ b/core/iwasm/compilation/aot_llvm.c @@ -1643,7 +1643,7 @@ aot_create_comp_context(AOTCompData *comp_data, aot_comp_option_t option) vendor_sys = strstr(default_triple, "-"); bh_assert(vendor_sys); bh_memcpy_s(default_arch, sizeof(default_arch), default_triple, - vendor_sys - default_triple); + (uint32)(vendor_sys - default_triple)); arch1 = default_arch; LLVMDisposeMessage(default_triple); @@ -1668,13 +1668,15 @@ aot_create_comp_context(AOTCompData *comp_data, aot_comp_option_t option) bh_assert(strlen(arch1) + strlen(vendor_sys) + strlen(abi) < sizeof(triple_buf)); - bh_memcpy_s(triple_buf, sizeof(triple_buf), arch1, strlen(arch1)); + bh_memcpy_s(triple_buf, (uint32)sizeof(triple_buf), arch1, + (uint32)strlen(arch1)); bh_memcpy_s(triple_buf + strlen(arch1), - sizeof(triple_buf) - strlen(arch1), vendor_sys, - strlen(vendor_sys)); + (uint32)(sizeof(triple_buf) - strlen(arch1)), + vendor_sys, (uint32)strlen(vendor_sys)); bh_memcpy_s(triple_buf + strlen(arch1) + strlen(vendor_sys), - sizeof(triple_buf) - strlen(arch1) - strlen(vendor_sys), - abi, strlen(abi)); + (uint32)(sizeof(triple_buf) - strlen(arch1) + - strlen(vendor_sys)), + abi, (uint32)strlen(abi)); triple = triple_buf; } else if (arch) { @@ -1707,13 +1709,15 @@ aot_create_comp_context(AOTCompData *comp_data, aot_comp_option_t option) bh_assert(strlen(arch) + strlen(vendor_sys) + strlen(abi) < sizeof(triple_buf)); - bh_memcpy_s(triple_buf, sizeof(triple_buf), arch, strlen(arch)); + bh_memcpy_s(triple_buf, (uint32)sizeof(triple_buf), arch, + (uint32)strlen(arch)); bh_memcpy_s(triple_buf + strlen(arch), - sizeof(triple_buf) - strlen(arch), vendor_sys, - strlen(vendor_sys)); + (uint32)(sizeof(triple_buf) - strlen(arch)), vendor_sys, + (uint32)strlen(vendor_sys)); bh_memcpy_s(triple_buf + strlen(arch) + strlen(vendor_sys), - sizeof(triple_buf) - strlen(arch) - strlen(vendor_sys), - abi, strlen(abi)); + (uint32)(sizeof(triple_buf) - strlen(arch) + - strlen(vendor_sys)), + abi, (uint32)strlen(abi)); triple = triple_buf; } @@ -2604,4 +2608,4 @@ aot_load_const_from_table(AOTCompContext *comp_ctx, LLVMValueRef base, } return const_value; -} +} \ No newline at end of file diff --git a/core/shared/platform/windows/win_thread.c b/core/shared/platform/windows/win_thread.c index 558a3733d..408784d54 100644 --- a/core/shared/platform/windows/win_thread.c +++ b/core/shared/platform/windows/win_thread.c @@ -47,6 +47,10 @@ static os_thread_data supervisor_thread_data; /* Thread data key */ static DWORD thread_data_key; +/* The GetCurrentThreadStackLimits API from "kernel32" */ +static void(WINAPI *GetCurrentThreadStackLimits_Kernel32)(PULONG_PTR, + PULONG_PTR) = NULL; + int os_sem_init(korp_sem *sem); int @@ -61,6 +65,8 @@ os_sem_signal(korp_sem *sem); int os_thread_sys_init() { + HMODULE module; + if (is_thread_sys_inited) return BHT_OK; @@ -84,6 +90,11 @@ os_thread_sys_init() if (!TlsSetValue(thread_data_key, &supervisor_thread_data)) goto fail4; + if ((module = GetModuleHandle((LPSTR) "kernel32"))) { + *(void **)&GetCurrentThreadStackLimits_Kernel32 = + GetProcAddress(module, "GetCurrentThreadStackLimits"); + } + is_thread_sys_inited = true; return BHT_OK; @@ -556,7 +567,6 @@ os_cond_signal(korp_cond *cond) static os_thread_local_attribute uint8 *thread_stack_boundary = NULL; -#if _WIN32_WINNT < 0x0602 static ULONG GetCurrentThreadStackLimits_Win7(PULONG_PTR p_low_limit, PULONG_PTR p_high_limit) @@ -579,7 +589,6 @@ GetCurrentThreadStackLimits_Win7(PULONG_PTR p_low_limit, os_printf("warning: VirtualQuery() failed\n"); return GetLastError(); } -#endif uint8 * os_thread_get_stack_boundary() @@ -591,13 +600,14 @@ os_thread_get_stack_boundary() return thread_stack_boundary; page_size = os_getpagesize(); -#if _WIN32_WINNT >= 0x0602 - GetCurrentThreadStackLimits(&low_limit, &high_limit); -#else - if (0 != GetCurrentThreadStackLimits_Win7(&low_limit, &high_limit)) { - return NULL; + if (GetCurrentThreadStackLimits_Kernel32) { + GetCurrentThreadStackLimits_Kernel32(&low_limit, &high_limit); } -#endif + else { + if (0 != GetCurrentThreadStackLimits_Win7(&low_limit, &high_limit)) + return NULL; + } + /* 4 pages are set unaccessible by system, we reserved one more page at least for safety */ thread_stack_boundary = (uint8 *)(uintptr_t)low_limit + page_size * 5; diff --git a/product-mini/platforms/windows/CMakeLists.txt b/product-mini/platforms/windows/CMakeLists.txt index 0ac3fa302..c85e2c548 100644 --- a/product-mini/platforms/windows/CMakeLists.txt +++ b/product-mini/platforms/windows/CMakeLists.txt @@ -103,7 +103,7 @@ set (WAMR_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../..) include (${WAMR_ROOT_DIR}/build-scripts/runtime_lib.cmake) add_library(vmlib ${WAMR_RUNTIME_LIB_SOURCE}) -set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWIN32_LEAN_AND_MEAN") +set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWIN32_LEAN_AND_MEAN -D_WINSOCK_DEPRECATED_NO_WARNINGS") set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO") set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO") diff --git a/wamr-compiler/CMakeLists.txt b/wamr-compiler/CMakeLists.txt index f6fdf9742..8d943d97e 100644 --- a/wamr-compiler/CMakeLists.txt +++ b/wamr-compiler/CMakeLists.txt @@ -222,6 +222,10 @@ if (NOT MSVC) endif() endif() +if (MSVC) + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_WINSOCK_DEPRECATED_NO_WARNINGS") +endif() + # message ("-- CMAKE_C_FLAGS: ${CMAKE_C_FLAGS}") add_library (vmlib