diff options
| -rw-r--r-- | doc/ext_ffi_api.html | 2 | ||||
| -rw-r--r-- | src/lib_ffi.c | 3 | ||||
| -rw-r--r-- | src/lib_io.c | 4 | ||||
| -rw-r--r-- | src/lib_package.c | 24 | ||||
| -rw-r--r-- | src/lj_alloc.c | 6 | ||||
| -rw-r--r-- | src/lj_arch.h | 19 | ||||
| -rw-r--r-- | src/lj_ccallback.c | 4 | ||||
| -rw-r--r-- | src/lj_clib.c | 20 | ||||
| -rw-r--r-- | src/lj_mcode.c | 8 | ||||
| -rw-r--r-- | src/lj_profile.c | 8 |
10 files changed, 78 insertions, 20 deletions
diff --git a/doc/ext_ffi_api.html b/doc/ext_ffi_api.html index 25cc9743..54ff0ce1 100644 --- a/doc/ext_ffi_api.html +++ b/doc/ext_ffi_api.html | |||
| @@ -468,6 +468,8 @@ otherwise. The following parameters are currently defined: | |||
| 468 | <tr class="odd"> | 468 | <tr class="odd"> |
| 469 | <td class="abiparam">win</td><td class="abidesc">Windows variant of the standard ABI</td></tr> | 469 | <td class="abiparam">win</td><td class="abidesc">Windows variant of the standard ABI</td></tr> |
| 470 | <tr class="even"> | 470 | <tr class="even"> |
| 471 | <td class="abiparam">uwp</td><td class="abidesc">Universal Windows Platform</td></tr> | ||
| 472 | <tr class="odd"> | ||
| 471 | <td class="abiparam">gc64</td><td class="abidesc">64 bit GC references</td></tr> | 473 | <td class="abiparam">gc64</td><td class="abidesc">64 bit GC references</td></tr> |
| 472 | </table> | 474 | </table> |
| 473 | 475 | ||
diff --git a/src/lib_ffi.c b/src/lib_ffi.c index 199cfc9a..8032411e 100644 --- a/src/lib_ffi.c +++ b/src/lib_ffi.c | |||
| @@ -747,6 +747,9 @@ LJLIB_CF(ffi_abi) LJLIB_REC(.) | |||
| 747 | #if LJ_ABI_WIN | 747 | #if LJ_ABI_WIN |
| 748 | case H_(4ab624a8,4ab624a8): b = 1; break; /* win */ | 748 | case H_(4ab624a8,4ab624a8): b = 1; break; /* win */ |
| 749 | #endif | 749 | #endif |
| 750 | #if LJ_TARGET_UWP | ||
| 751 | case H_(a40f0bcb,a40f0bcb): b = 1; break; /* uwp */ | ||
| 752 | #endif | ||
| 750 | case H_(3af93066,1f001464): b = 1; break; /* le/be */ | 753 | case H_(3af93066,1f001464): b = 1; break; /* le/be */ |
| 751 | #if LJ_GC64 | 754 | #if LJ_GC64 |
| 752 | case H_(9e89d2c9,13c83c92): b = 1; break; /* gc64 */ | 755 | case H_(9e89d2c9,13c83c92): b = 1; break; /* gc64 */ |
diff --git a/src/lib_io.c b/src/lib_io.c index 9763ed46..73fd9322 100644 --- a/src/lib_io.c +++ b/src/lib_io.c | |||
| @@ -99,7 +99,7 @@ static int io_file_close(lua_State *L, IOFileUD *iof) | |||
| 99 | int stat = -1; | 99 | int stat = -1; |
| 100 | #if LJ_TARGET_POSIX | 100 | #if LJ_TARGET_POSIX |
| 101 | stat = pclose(iof->fp); | 101 | stat = pclose(iof->fp); |
| 102 | #elif LJ_TARGET_WINDOWS && !LJ_TARGET_XBOXONE | 102 | #elif LJ_TARGET_WINDOWS && !LJ_TARGET_XBOXONE && !LJ_TARGET_UWP |
| 103 | stat = _pclose(iof->fp); | 103 | stat = _pclose(iof->fp); |
| 104 | #else | 104 | #else |
| 105 | lua_assert(0); | 105 | lua_assert(0); |
| @@ -406,7 +406,7 @@ LJLIB_CF(io_open) | |||
| 406 | 406 | ||
| 407 | LJLIB_CF(io_popen) | 407 | LJLIB_CF(io_popen) |
| 408 | { | 408 | { |
| 409 | #if LJ_TARGET_POSIX || (LJ_TARGET_WINDOWS && !LJ_TARGET_XBOXONE) | 409 | #if LJ_TARGET_POSIX || (LJ_TARGET_WINDOWS && !LJ_TARGET_XBOXONE && !LJ_TARGET_UWP) |
| 410 | const char *fname = strdata(lj_lib_checkstr(L, 1)); | 410 | const char *fname = strdata(lj_lib_checkstr(L, 1)); |
| 411 | GCstr *s = lj_lib_optstr(L, 2); | 411 | GCstr *s = lj_lib_optstr(L, 2); |
| 412 | const char *mode = s ? strdata(s) : "r"; | 412 | const char *mode = s ? strdata(s) : "r"; |
diff --git a/src/lib_package.c b/src/lib_package.c index 6fac43ec..bedd6d79 100644 --- a/src/lib_package.c +++ b/src/lib_package.c | |||
| @@ -76,6 +76,20 @@ static const char *ll_bcsym(void *lib, const char *sym) | |||
| 76 | BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*); | 76 | BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*); |
| 77 | #endif | 77 | #endif |
| 78 | 78 | ||
| 79 | #if LJ_TARGET_UWP | ||
| 80 | void *LJ_WIN_LOADLIBA(const char *path) | ||
| 81 | { | ||
| 82 | DWORD err = GetLastError(); | ||
| 83 | wchar_t wpath[256]; | ||
| 84 | HANDLE lib = NULL; | ||
| 85 | if (MultiByteToWideChar(CP_ACP, 0, path, -1, wpath, 256) > 0) { | ||
| 86 | lib = LoadPackagedLibrary(wpath, 0); | ||
| 87 | } | ||
| 88 | SetLastError(err); | ||
| 89 | return lib; | ||
| 90 | } | ||
| 91 | #endif | ||
| 92 | |||
| 79 | #undef setprogdir | 93 | #undef setprogdir |
| 80 | 94 | ||
| 81 | static void setprogdir(lua_State *L) | 95 | static void setprogdir(lua_State *L) |
| @@ -119,7 +133,7 @@ static void ll_unloadlib(void *lib) | |||
| 119 | 133 | ||
| 120 | static void *ll_load(lua_State *L, const char *path, int gl) | 134 | static void *ll_load(lua_State *L, const char *path, int gl) |
| 121 | { | 135 | { |
| 122 | HINSTANCE lib = LoadLibraryExA(path, NULL, 0); | 136 | HINSTANCE lib = LJ_WIN_LOADLIBA(path); |
| 123 | if (lib == NULL) pusherror(L); | 137 | if (lib == NULL) pusherror(L); |
| 124 | UNUSED(gl); | 138 | UNUSED(gl); |
| 125 | return lib; | 139 | return lib; |
| @@ -132,17 +146,25 @@ static lua_CFunction ll_sym(lua_State *L, void *lib, const char *sym) | |||
| 132 | return f; | 146 | return f; |
| 133 | } | 147 | } |
| 134 | 148 | ||
| 149 | #if LJ_TARGET_UWP | ||
| 150 | EXTERN_C IMAGE_DOS_HEADER __ImageBase; | ||
| 151 | #endif | ||
| 152 | |||
| 135 | static const char *ll_bcsym(void *lib, const char *sym) | 153 | static const char *ll_bcsym(void *lib, const char *sym) |
| 136 | { | 154 | { |
| 137 | if (lib) { | 155 | if (lib) { |
| 138 | return (const char *)GetProcAddress((HINSTANCE)lib, sym); | 156 | return (const char *)GetProcAddress((HINSTANCE)lib, sym); |
| 139 | } else { | 157 | } else { |
| 158 | #if LJ_TARGET_UWP | ||
| 159 | return (const char *)GetProcAddress((HINSTANCE)&__ImageBase, sym); | ||
| 160 | #else | ||
| 140 | HINSTANCE h = GetModuleHandleA(NULL); | 161 | HINSTANCE h = GetModuleHandleA(NULL); |
| 141 | const char *p = (const char *)GetProcAddress(h, sym); | 162 | const char *p = (const char *)GetProcAddress(h, sym); |
| 142 | if (p == NULL && GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, | 163 | if (p == NULL && GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, |
| 143 | (const char *)ll_bcsym, &h)) | 164 | (const char *)ll_bcsym, &h)) |
| 144 | p = (const char *)GetProcAddress(h, sym); | 165 | p = (const char *)GetProcAddress(h, sym); |
| 145 | return p; | 166 | return p; |
| 167 | #endif | ||
| 146 | } | 168 | } |
| 147 | } | 169 | } |
| 148 | 170 | ||
diff --git a/src/lj_alloc.c b/src/lj_alloc.c index 9fc761c7..f3b6a54d 100644 --- a/src/lj_alloc.c +++ b/src/lj_alloc.c | |||
| @@ -167,7 +167,7 @@ static void *DIRECT_MMAP(size_t size) | |||
| 167 | static void *CALL_MMAP(size_t size) | 167 | static void *CALL_MMAP(size_t size) |
| 168 | { | 168 | { |
| 169 | DWORD olderr = GetLastError(); | 169 | DWORD olderr = GetLastError(); |
| 170 | void *ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); | 170 | void *ptr = LJ_WIN_VALLOC(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); |
| 171 | SetLastError(olderr); | 171 | SetLastError(olderr); |
| 172 | return ptr ? ptr : MFAIL; | 172 | return ptr ? ptr : MFAIL; |
| 173 | } | 173 | } |
| @@ -176,8 +176,8 @@ static void *CALL_MMAP(size_t size) | |||
| 176 | static void *DIRECT_MMAP(size_t size) | 176 | static void *DIRECT_MMAP(size_t size) |
| 177 | { | 177 | { |
| 178 | DWORD olderr = GetLastError(); | 178 | DWORD olderr = GetLastError(); |
| 179 | void *ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, | 179 | void *ptr = LJ_WIN_VALLOC(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, |
| 180 | PAGE_READWRITE); | 180 | PAGE_READWRITE); |
| 181 | SetLastError(olderr); | 181 | SetLastError(olderr); |
| 182 | return ptr ? ptr : MFAIL; | 182 | return ptr ? ptr : MFAIL; |
| 183 | } | 183 | } |
diff --git a/src/lj_arch.h b/src/lj_arch.h index e796912e..31a11593 100644 --- a/src/lj_arch.h +++ b/src/lj_arch.h | |||
| @@ -135,6 +135,13 @@ | |||
| 135 | #define LJ_TARGET_GC64 1 | 135 | #define LJ_TARGET_GC64 1 |
| 136 | #endif | 136 | #endif |
| 137 | 137 | ||
| 138 | #ifdef _UWP | ||
| 139 | #define LJ_TARGET_UWP 1 | ||
| 140 | #if LUAJIT_TARGET == LUAJIT_ARCH_X64 | ||
| 141 | #define LJ_TARGET_GC64 1 | ||
| 142 | #endif | ||
| 143 | #endif | ||
| 144 | |||
| 138 | #define LJ_NUMMODE_SINGLE 0 /* Single-number mode only. */ | 145 | #define LJ_NUMMODE_SINGLE 0 /* Single-number mode only. */ |
| 139 | #define LJ_NUMMODE_SINGLE_DUAL 1 /* Default to single-number mode. */ | 146 | #define LJ_NUMMODE_SINGLE_DUAL 1 /* Default to single-number mode. */ |
| 140 | #define LJ_NUMMODE_DUAL 2 /* Dual-number mode only. */ | 147 | #define LJ_NUMMODE_DUAL 2 /* Dual-number mode only. */ |
| @@ -570,6 +577,18 @@ | |||
| 570 | #define LJ_NO_UNWIND 1 | 577 | #define LJ_NO_UNWIND 1 |
| 571 | #endif | 578 | #endif |
| 572 | 579 | ||
| 580 | #if LJ_TARGET_WINDOWS | ||
| 581 | #if LJ_TARGET_UWP | ||
| 582 | #define LJ_WIN_VALLOC VirtualAllocFromApp | ||
| 583 | #define LJ_WIN_VPROTECT VirtualProtectFromApp | ||
| 584 | extern void *LJ_WIN_LOADLIBA(const char *path); | ||
| 585 | #else | ||
| 586 | #define LJ_WIN_VALLOC VirtualAlloc | ||
| 587 | #define LJ_WIN_VPROTECT VirtualProtect | ||
| 588 | #define LJ_WIN_LOADLIBA(path) LoadLibraryExA((path), NULL, 0) | ||
| 589 | #endif | ||
| 590 | #endif | ||
| 591 | |||
| 573 | /* Compatibility with Lua 5.1 vs. 5.2. */ | 592 | /* Compatibility with Lua 5.1 vs. 5.2. */ |
| 574 | #ifdef LUAJIT_ENABLE_LUA52COMPAT | 593 | #ifdef LUAJIT_ENABLE_LUA52COMPAT |
| 575 | #define LJ_52 1 | 594 | #define LJ_52 1 |
diff --git a/src/lj_ccallback.c b/src/lj_ccallback.c index 03494a7a..412dbf85 100644 --- a/src/lj_ccallback.c +++ b/src/lj_ccallback.c | |||
| @@ -267,7 +267,7 @@ static void callback_mcode_new(CTState *cts) | |||
| 267 | if (CALLBACK_MAX_SLOT == 0) | 267 | if (CALLBACK_MAX_SLOT == 0) |
| 268 | lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV); | 268 | lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV); |
| 269 | #if LJ_TARGET_WINDOWS | 269 | #if LJ_TARGET_WINDOWS |
| 270 | p = VirtualAlloc(NULL, sz, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); | 270 | p = LJ_WIN_VALLOC(NULL, sz, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); |
| 271 | if (!p) | 271 | if (!p) |
| 272 | lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV); | 272 | lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV); |
| 273 | #elif LJ_TARGET_POSIX | 273 | #elif LJ_TARGET_POSIX |
| @@ -285,7 +285,7 @@ static void callback_mcode_new(CTState *cts) | |||
| 285 | #if LJ_TARGET_WINDOWS | 285 | #if LJ_TARGET_WINDOWS |
| 286 | { | 286 | { |
| 287 | DWORD oprot; | 287 | DWORD oprot; |
| 288 | VirtualProtect(p, sz, PAGE_EXECUTE_READ, &oprot); | 288 | LJ_WIN_VPROTECT(p, sz, PAGE_EXECUTE_READ, &oprot); |
| 289 | } | 289 | } |
| 290 | #elif LJ_TARGET_POSIX | 290 | #elif LJ_TARGET_POSIX |
| 291 | mprotect(p, sz, (PROT_READ|PROT_EXEC)); | 291 | mprotect(p, sz, (PROT_READ|PROT_EXEC)); |
diff --git a/src/lj_clib.c b/src/lj_clib.c index 61426590..f016b06b 100644 --- a/src/lj_clib.c +++ b/src/lj_clib.c | |||
| @@ -158,11 +158,13 @@ BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*); | |||
| 158 | /* Default libraries. */ | 158 | /* Default libraries. */ |
| 159 | enum { | 159 | enum { |
| 160 | CLIB_HANDLE_EXE, | 160 | CLIB_HANDLE_EXE, |
| 161 | #if !LJ_TARGET_UWP | ||
| 161 | CLIB_HANDLE_DLL, | 162 | CLIB_HANDLE_DLL, |
| 162 | CLIB_HANDLE_CRT, | 163 | CLIB_HANDLE_CRT, |
| 163 | CLIB_HANDLE_KERNEL32, | 164 | CLIB_HANDLE_KERNEL32, |
| 164 | CLIB_HANDLE_USER32, | 165 | CLIB_HANDLE_USER32, |
| 165 | CLIB_HANDLE_GDI32, | 166 | CLIB_HANDLE_GDI32, |
| 167 | #endif | ||
| 166 | CLIB_HANDLE_MAX | 168 | CLIB_HANDLE_MAX |
| 167 | }; | 169 | }; |
| 168 | 170 | ||
| @@ -208,7 +210,7 @@ static const char *clib_extname(lua_State *L, const char *name) | |||
| 208 | static void *clib_loadlib(lua_State *L, const char *name, int global) | 210 | static void *clib_loadlib(lua_State *L, const char *name, int global) |
| 209 | { | 211 | { |
| 210 | DWORD oldwerr = GetLastError(); | 212 | DWORD oldwerr = GetLastError(); |
| 211 | void *h = (void *)LoadLibraryExA(clib_extname(L, name), NULL, 0); | 213 | void *h = LJ_WIN_LOADLIBA(clib_extname(L, name)); |
| 212 | if (!h) clib_error(L, "cannot load module " LUA_QS ": %s", name); | 214 | if (!h) clib_error(L, "cannot load module " LUA_QS ": %s", name); |
| 213 | SetLastError(oldwerr); | 215 | SetLastError(oldwerr); |
| 214 | UNUSED(global); | 216 | UNUSED(global); |
| @@ -218,6 +220,7 @@ static void *clib_loadlib(lua_State *L, const char *name, int global) | |||
| 218 | static void clib_unloadlib(CLibrary *cl) | 220 | static void clib_unloadlib(CLibrary *cl) |
| 219 | { | 221 | { |
| 220 | if (cl->handle == CLIB_DEFHANDLE) { | 222 | if (cl->handle == CLIB_DEFHANDLE) { |
| 223 | #if !LJ_TARGET_UWP | ||
| 221 | MSize i; | 224 | MSize i; |
| 222 | for (i = CLIB_HANDLE_KERNEL32; i < CLIB_HANDLE_MAX; i++) { | 225 | for (i = CLIB_HANDLE_KERNEL32; i < CLIB_HANDLE_MAX; i++) { |
| 223 | void *h = clib_def_handle[i]; | 226 | void *h = clib_def_handle[i]; |
| @@ -226,11 +229,16 @@ static void clib_unloadlib(CLibrary *cl) | |||
| 226 | FreeLibrary((HINSTANCE)h); | 229 | FreeLibrary((HINSTANCE)h); |
| 227 | } | 230 | } |
| 228 | } | 231 | } |
| 232 | #endif | ||
| 229 | } else if (cl->handle) { | 233 | } else if (cl->handle) { |
| 230 | FreeLibrary((HINSTANCE)cl->handle); | 234 | FreeLibrary((HINSTANCE)cl->handle); |
| 231 | } | 235 | } |
| 232 | } | 236 | } |
| 233 | 237 | ||
| 238 | #if LJ_TARGET_UWP | ||
| 239 | EXTERN_C IMAGE_DOS_HEADER __ImageBase; | ||
| 240 | #endif | ||
| 241 | |||
| 234 | static void *clib_getsym(CLibrary *cl, const char *name) | 242 | static void *clib_getsym(CLibrary *cl, const char *name) |
| 235 | { | 243 | { |
| 236 | void *p = NULL; | 244 | void *p = NULL; |
| @@ -239,6 +247,9 @@ static void *clib_getsym(CLibrary *cl, const char *name) | |||
| 239 | for (i = 0; i < CLIB_HANDLE_MAX; i++) { | 247 | for (i = 0; i < CLIB_HANDLE_MAX; i++) { |
| 240 | HINSTANCE h = (HINSTANCE)clib_def_handle[i]; | 248 | HINSTANCE h = (HINSTANCE)clib_def_handle[i]; |
| 241 | if (!(void *)h) { /* Resolve default library handles (once). */ | 249 | if (!(void *)h) { /* Resolve default library handles (once). */ |
| 250 | #if LJ_TARGET_UWP | ||
| 251 | h = (HINSTANCE)&__ImageBase; | ||
| 252 | #else | ||
| 242 | switch (i) { | 253 | switch (i) { |
| 243 | case CLIB_HANDLE_EXE: GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, NULL, &h); break; | 254 | case CLIB_HANDLE_EXE: GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, NULL, &h); break; |
| 244 | case CLIB_HANDLE_DLL: | 255 | case CLIB_HANDLE_DLL: |
| @@ -249,11 +260,12 @@ static void *clib_getsym(CLibrary *cl, const char *name) | |||
| 249 | GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, | 260 | GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, |
| 250 | (const char *)&_fmode, &h); | 261 | (const char *)&_fmode, &h); |
| 251 | break; | 262 | break; |
| 252 | case CLIB_HANDLE_KERNEL32: h = LoadLibraryExA("kernel32.dll", NULL, 0); break; | 263 | case CLIB_HANDLE_KERNEL32: h = LJ_WIN_LOADLIBA("kernel32.dll"); break; |
| 253 | case CLIB_HANDLE_USER32: h = LoadLibraryExA("user32.dll", NULL, 0); break; | 264 | case CLIB_HANDLE_USER32: h = LJ_WIN_LOADLIBA("user32.dll"); break; |
| 254 | case CLIB_HANDLE_GDI32: h = LoadLibraryExA("gdi32.dll", NULL, 0); break; | 265 | case CLIB_HANDLE_GDI32: h = LJ_WIN_LOADLIBA("gdi32.dll"); break; |
| 255 | } | 266 | } |
| 256 | if (!h) continue; | 267 | if (!h) continue; |
| 268 | #endif | ||
| 257 | clib_def_handle[i] = (void *)h; | 269 | clib_def_handle[i] = (void *)h; |
| 258 | } | 270 | } |
| 259 | p = (void *)GetProcAddress(h, name); | 271 | p = (void *)GetProcAddress(h, name); |
diff --git a/src/lj_mcode.c b/src/lj_mcode.c index e46e3ef0..64b0ca90 100644 --- a/src/lj_mcode.c +++ b/src/lj_mcode.c | |||
| @@ -66,8 +66,8 @@ void lj_mcode_sync(void *start, void *end) | |||
| 66 | 66 | ||
| 67 | static void *mcode_alloc_at(jit_State *J, uintptr_t hint, size_t sz, DWORD prot) | 67 | static void *mcode_alloc_at(jit_State *J, uintptr_t hint, size_t sz, DWORD prot) |
| 68 | { | 68 | { |
| 69 | void *p = VirtualAlloc((void *)hint, sz, | 69 | void *p = LJ_WIN_VALLOC((void *)hint, sz, |
| 70 | MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, prot); | 70 | MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, prot); |
| 71 | if (!p && !hint) | 71 | if (!p && !hint) |
| 72 | lj_trace_err(J, LJ_TRERR_MCODEAL); | 72 | lj_trace_err(J, LJ_TRERR_MCODEAL); |
| 73 | return p; | 73 | return p; |
| @@ -82,7 +82,7 @@ static void mcode_free(jit_State *J, void *p, size_t sz) | |||
| 82 | static int mcode_setprot(void *p, size_t sz, DWORD prot) | 82 | static int mcode_setprot(void *p, size_t sz, DWORD prot) |
| 83 | { | 83 | { |
| 84 | DWORD oprot; | 84 | DWORD oprot; |
| 85 | return !VirtualProtect(p, sz, prot, &oprot); | 85 | return !LJ_WIN_VPROTECT(p, sz, prot, &oprot); |
| 86 | } | 86 | } |
| 87 | 87 | ||
| 88 | #elif LJ_TARGET_POSIX | 88 | #elif LJ_TARGET_POSIX |
| @@ -255,7 +255,7 @@ static void *mcode_alloc(jit_State *J, size_t sz) | |||
| 255 | /* All memory addresses are reachable by relative jumps. */ | 255 | /* All memory addresses are reachable by relative jumps. */ |
| 256 | static void *mcode_alloc(jit_State *J, size_t sz) | 256 | static void *mcode_alloc(jit_State *J, size_t sz) |
| 257 | { | 257 | { |
| 258 | #ifdef __OpenBSD__ | 258 | #if defined(__OpenBSD__) || LJ_TARGET_UWP |
| 259 | /* Allow better executable memory allocation for OpenBSD W^X mode. */ | 259 | /* Allow better executable memory allocation for OpenBSD W^X mode. */ |
| 260 | void *p = mcode_alloc_at(J, 0, sz, MCPROT_RUN); | 260 | void *p = mcode_alloc_at(J, 0, sz, MCPROT_RUN); |
| 261 | if (p && mcode_setprot(p, sz, MCPROT_GEN)) { | 261 | if (p && mcode_setprot(p, sz, MCPROT_GEN)) { |
diff --git a/src/lj_profile.c b/src/lj_profile.c index 116998e1..3223697f 100644 --- a/src/lj_profile.c +++ b/src/lj_profile.c | |||
| @@ -247,7 +247,7 @@ static DWORD WINAPI profile_thread(void *psx) | |||
| 247 | { | 247 | { |
| 248 | ProfileState *ps = (ProfileState *)psx; | 248 | ProfileState *ps = (ProfileState *)psx; |
| 249 | int interval = ps->interval; | 249 | int interval = ps->interval; |
| 250 | #if LJ_TARGET_WINDOWS | 250 | #if LJ_TARGET_WINDOWS && !LJ_TARGET_UWP |
| 251 | ps->wmm_tbp(interval); | 251 | ps->wmm_tbp(interval); |
| 252 | #endif | 252 | #endif |
| 253 | while (1) { | 253 | while (1) { |
| @@ -255,7 +255,7 @@ static DWORD WINAPI profile_thread(void *psx) | |||
| 255 | if (ps->abort) break; | 255 | if (ps->abort) break; |
| 256 | profile_trigger(ps); | 256 | profile_trigger(ps); |
| 257 | } | 257 | } |
| 258 | #if LJ_TARGET_WINDOWS | 258 | #if LJ_TARGET_WINDOWS && !LJ_TARGET_UWP |
| 259 | ps->wmm_tep(interval); | 259 | ps->wmm_tep(interval); |
| 260 | #endif | 260 | #endif |
| 261 | return 0; | 261 | return 0; |
| @@ -264,9 +264,9 @@ static DWORD WINAPI profile_thread(void *psx) | |||
| 264 | /* Start profiling timer thread. */ | 264 | /* Start profiling timer thread. */ |
| 265 | static void profile_timer_start(ProfileState *ps) | 265 | static void profile_timer_start(ProfileState *ps) |
| 266 | { | 266 | { |
| 267 | #if LJ_TARGET_WINDOWS | 267 | #if LJ_TARGET_WINDOWS && !LJ_TARGET_UWP |
| 268 | if (!ps->wmm) { /* Load WinMM library on-demand. */ | 268 | if (!ps->wmm) { /* Load WinMM library on-demand. */ |
| 269 | ps->wmm = LoadLibraryExA("winmm.dll", NULL, 0); | 269 | ps->wmm = LJ_WIN_LOADLIBA("winmm.dll"); |
| 270 | if (ps->wmm) { | 270 | if (ps->wmm) { |
| 271 | ps->wmm_tbp = (WMM_TPFUNC)GetProcAddress(ps->wmm, "timeBeginPeriod"); | 271 | ps->wmm_tbp = (WMM_TPFUNC)GetProcAddress(ps->wmm, "timeBeginPeriod"); |
| 272 | ps->wmm_tep = (WMM_TPFUNC)GetProcAddress(ps->wmm, "timeEndPeriod"); | 272 | ps->wmm_tep = (WMM_TPFUNC)GetProcAddress(ps->wmm, "timeEndPeriod"); |
