diff options
author | Mike Pall <mike> | 2018-06-05 17:03:08 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2018-06-05 17:03:08 +0200 |
commit | c3c54ce1aef782823936808a75460e6b53aada2c (patch) | |
tree | 999dc989e25281bfc36ed8861d6f14b5d4e89786 /src | |
parent | a5a89ab586a3b5bb4f266949bbf3dc2b140e2374 (diff) | |
download | luajit-c3c54ce1aef782823936808a75460e6b53aada2c.tar.gz luajit-c3c54ce1aef782823936808a75460e6b53aada2c.tar.bz2 luajit-c3c54ce1aef782823936808a75460e6b53aada2c.zip |
Windows: Add UWP support, part 1.
Contributed by Ben Pye.
Diffstat (limited to 'src')
-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 |
9 files changed, 76 insertions, 20 deletions
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"); |