Tarantool development patches archive
 help / color / mirror / Atom feed
From: Sergey Bronnikov via Tarantool-patches <tarantool-patches@dev.tarantool.org>
To: Sergey Kaplun <skaplun@tarantool.org>, Igor Munkin <imun@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH luajit 08/19] Windows: Add UWP support, part 1.
Date: Wed, 16 Aug 2023 19:40:18 +0300	[thread overview]
Message-ID: <fb7f0b05-4916-2f94-f79d-bb0ed2a41640@tarantool.org> (raw)
In-Reply-To: <86adbae13323277ea291b7e3a709fc166086fbd3.1691592488.git.skaplun@tarantool.org>

Hi, Sergey


Thanks for the patch! LGTM


On 8/9/23 18:35, Sergey Kaplun wrote:
> From: Mike Pall <mike>
>
> Contributed by Ben Pye.
>
> (cherry-picked from commit c3c54ce1aef782823936808a75460e6b53aada2c)
>
> This patch adds partial support for the Universal Windows Platform [1]
> in LuaJIT.
> This includes:
> * `LJ_TARGET_UWP` is introduced to mark that target is Universal Windows
>    Platform.
> * `LJ_WIN_VALLOC()` macro is introduced to use instead of
>    `VirtualAlloc()` [2] (`VirtualAllocFromApp()` [3] for UWP)
> * `LJ_WIN_VPROTECT()` macro is introduced to use instead of
>    `VirtualProtect()` [4] (`VirtualProtectFromApp()` [5] for UWP)
> * `LJ_WIN_LOADLIBA()` macro is introduced to use instead of
>    `LoadLibraryExA()` [6] (custom implementation using
>    `LoadPackagedLibrary()` [7] for UWP).
>
> Note that the following features are not implemented for UWP:
> * `io.popen()`.
> * LuaJIT profiler's (`jit.p`) timer for Windows has not very high
>    resolution since `timeBeginPeriod()` [8] and `timeEndPeriod()` [9] are
>    not used, because the <winmm.dll> library isn't loaded.
>
> [1]: https://learn.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide
> [2]: https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc
> [3]: https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualallocfromapp
> [4]: https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualprotect
> [5]: https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualprotectfromapp
> [6]: https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibraryexa
> [7]: https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-loadpackagedlibrary
> [8]: https://learn.microsoft.com/en-us/windows/win32/api/timeapi/nf-timeapi-timebeginperiod
> [9]: https://learn.microsoft.com/en-us/windows/win32/api/timeapi/nf-timeapi-timeendperiod
>
> Sergey Kaplun:
> * added the description for the feature
>
> Part of tarantool/tarantool#8825
> ---
>   doc/ext_ffi_api.html   |  2 ++
>   src/lib_ffi.c          |  3 +++
>   src/lib_io.c           |  4 ++--
>   src/lib_package.c      | 24 +++++++++++++++++++++++-
>   src/lj_alloc.c         |  6 +++---
>   src/lj_arch.h          | 19 +++++++++++++++++++
>   src/lj_ccallback.c     |  4 ++--
>   src/lj_clib.c          | 20 ++++++++++++++++----
>   src/lj_mcode.c         |  8 ++++----
>   src/lj_profile_timer.c |  8 ++++----
>   10 files changed, 78 insertions(+), 20 deletions(-)
>
> diff --git a/doc/ext_ffi_api.html b/doc/ext_ffi_api.html
> index 91af2e1d..c72191d1 100644
> --- a/doc/ext_ffi_api.html
> +++ b/doc/ext_ffi_api.html
> @@ -469,6 +469,8 @@ otherwise. The following parameters are currently defined:
>   <tr class="odd">
>   <td class="abiparam">win</td><td class="abidesc">Windows variant of the standard ABI</td></tr>
>   <tr class="even">
> +<td class="abiparam">uwp</td><td class="abidesc">Universal Windows Platform</td></tr>
> +<tr class="odd">
>   <td class="abiparam">gc64</td><td class="abidesc">64 bit GC references</td></tr>
>   </table>
>   
> diff --git a/src/lib_ffi.c b/src/lib_ffi.c
> index 136e98e8..d1fe1a14 100644
> --- a/src/lib_ffi.c
> +++ b/src/lib_ffi.c
> @@ -746,6 +746,9 @@ LJLIB_CF(ffi_abi)	LJLIB_REC(.)
>   #endif
>   #if LJ_ABI_WIN
>     case H_(4ab624a8,4ab624a8): b = 1; break;  /* win */
> +#endif
> +#if LJ_TARGET_UWP
> +  case H_(a40f0bcb,a40f0bcb): b = 1; break;  /* uwp */
>   #endif
>     case H_(3af93066,1f001464): b = 1; break;  /* le/be */
>   #if LJ_GC64
> diff --git a/src/lib_io.c b/src/lib_io.c
> index f0108227..db995ae6 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)
>       int stat = -1;
>   #if LJ_TARGET_POSIX
>       stat = pclose(iof->fp);
> -#elif LJ_TARGET_WINDOWS && !LJ_TARGET_XBOXONE
> +#elif LJ_TARGET_WINDOWS && !LJ_TARGET_XBOXONE && !LJ_TARGET_UWP
>       stat = _pclose(iof->fp);
>   #else
>       lua_assert(0);
> @@ -414,7 +414,7 @@ LJLIB_CF(io_open)
>   
>   LJLIB_CF(io_popen)
>   {
> -#if LJ_TARGET_POSIX || (LJ_TARGET_WINDOWS && !LJ_TARGET_XBOXONE)
> +#if LJ_TARGET_POSIX || (LJ_TARGET_WINDOWS && !LJ_TARGET_XBOXONE && !LJ_TARGET_UWP)
>     const char *fname = strdata(lj_lib_checkstr(L, 1));
>     GCstr *s = lj_lib_optstr(L, 2);
>     const char *mode = s ? strdata(s) : "r";
> diff --git a/src/lib_package.c b/src/lib_package.c
> index 67959a10..b49f0209 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)
>   BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*);
>   #endif
>   
> +#if LJ_TARGET_UWP
> +void *LJ_WIN_LOADLIBA(const char *path)
> +{
> +  DWORD err = GetLastError();
> +  wchar_t wpath[256];
> +  HANDLE lib = NULL;
> +  if (MultiByteToWideChar(CP_ACP, 0, path, -1, wpath, 256) > 0) {
> +    lib = LoadPackagedLibrary(wpath, 0);
> +  }
> +  SetLastError(err);
> +  return lib;
> +}
> +#endif
> +
>   #undef setprogdir
>   
>   static void setprogdir(lua_State *L)
> @@ -119,7 +133,7 @@ static void ll_unloadlib(void *lib)
>   
>   static void *ll_load(lua_State *L, const char *path, int gl)
>   {
> -  HINSTANCE lib = LoadLibraryExA(path, NULL, 0);
> +  HINSTANCE lib = LJ_WIN_LOADLIBA(path);
>     if (lib == NULL) pusherror(L);
>     UNUSED(gl);
>     return lib;
> @@ -132,17 +146,25 @@ static lua_CFunction ll_sym(lua_State *L, void *lib, const char *sym)
>     return f;
>   }
>   
> +#if LJ_TARGET_UWP
> +EXTERN_C IMAGE_DOS_HEADER __ImageBase;
> +#endif
> +
>   static const char *ll_bcsym(void *lib, const char *sym)
>   {
>     if (lib) {
>       return (const char *)GetProcAddress((HINSTANCE)lib, sym);
>     } else {
> +#if LJ_TARGET_UWP
> +    return (const char *)GetProcAddress((HINSTANCE)&__ImageBase, sym);
> +#else
>       HINSTANCE h = GetModuleHandleA(NULL);
>       const char *p = (const char *)GetProcAddress(h, sym);
>       if (p == NULL && GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
>   					(const char *)ll_bcsym, &h))
>         p = (const char *)GetProcAddress(h, sym);
>       return p;
> +#endif
>     }
>   }
>   
> diff --git a/src/lj_alloc.c b/src/lj_alloc.c
> index f7039b5b..9e2fb1f6 100644
> --- a/src/lj_alloc.c
> +++ b/src/lj_alloc.c
> @@ -167,7 +167,7 @@ static void *DIRECT_MMAP(size_t size)
>   static void *CALL_MMAP(size_t size)
>   {
>     DWORD olderr = GetLastError();
> -  void *ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
> +  void *ptr = LJ_WIN_VALLOC(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
>     SetLastError(olderr);
>     return ptr ? ptr : MFAIL;
>   }
> @@ -176,8 +176,8 @@ static void *CALL_MMAP(size_t size)
>   static void *DIRECT_MMAP(size_t size)
>   {
>     DWORD olderr = GetLastError();
> -  void *ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN,
> -			   PAGE_READWRITE);
> +  void *ptr = LJ_WIN_VALLOC(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN,
> +			    PAGE_READWRITE);
>     SetLastError(olderr);
>     return ptr ? ptr : MFAIL;
>   }
> diff --git a/src/lj_arch.h b/src/lj_arch.h
> index 7397492e..0351e046 100644
> --- a/src/lj_arch.h
> +++ b/src/lj_arch.h
> @@ -141,6 +141,13 @@
>   #define LJ_TARGET_GC64		1
>   #endif
>   
> +#ifdef _UWP
> +#define LJ_TARGET_UWP		1
> +#if LUAJIT_TARGET == LUAJIT_ARCH_X64
> +#define LJ_TARGET_GC64		1
> +#endif
> +#endif
> +
>   #define LJ_NUMMODE_SINGLE	0	/* Single-number mode only. */
>   #define LJ_NUMMODE_SINGLE_DUAL	1	/* Default to single-number mode. */
>   #define LJ_NUMMODE_DUAL		2	/* Dual-number mode only. */
> @@ -586,6 +593,18 @@
>   #define LJ_ABI_WIN		0
>   #endif
>   
> +#if LJ_TARGET_WINDOWS
> +#if LJ_TARGET_UWP
> +#define LJ_WIN_VALLOC	VirtualAllocFromApp
> +#define LJ_WIN_VPROTECT	VirtualProtectFromApp
> +extern void *LJ_WIN_LOADLIBA(const char *path);
> +#else
> +#define LJ_WIN_VALLOC	VirtualAlloc
> +#define LJ_WIN_VPROTECT	VirtualProtect
> +#define LJ_WIN_LOADLIBA(path)	LoadLibraryExA((path), NULL, 0)
> +#endif
> +#endif
> +
>   #if defined(LUAJIT_NO_UNWIND) || __GNU_COMPACT_EH__ || defined(__symbian__) || LJ_TARGET_IOS || LJ_TARGET_PS3 || LJ_TARGET_PS4
>   #define LJ_NO_UNWIND		1
>   #endif
> diff --git a/src/lj_ccallback.c b/src/lj_ccallback.c
> index c33190d7..37edd00f 100644
> --- a/src/lj_ccallback.c
> +++ b/src/lj_ccallback.c
> @@ -267,7 +267,7 @@ static void callback_mcode_new(CTState *cts)
>     if (CALLBACK_MAX_SLOT == 0)
>       lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV);
>   #if LJ_TARGET_WINDOWS
> -  p = VirtualAlloc(NULL, sz, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
> +  p = LJ_WIN_VALLOC(NULL, sz, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
>     if (!p)
>       lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV);
>   #elif LJ_TARGET_POSIX
> @@ -285,7 +285,7 @@ static void callback_mcode_new(CTState *cts)
>   #if LJ_TARGET_WINDOWS
>     {
>       DWORD oprot;
> -    VirtualProtect(p, sz, PAGE_EXECUTE_READ, &oprot);
> +    LJ_WIN_VPROTECT(p, sz, PAGE_EXECUTE_READ, &oprot);
>     }
>   #elif LJ_TARGET_POSIX
>     mprotect(p, sz, (PROT_READ|PROT_EXEC));
> diff --git a/src/lj_clib.c b/src/lj_clib.c
> index c06c0915..a8672052 100644
> --- a/src/lj_clib.c
> +++ b/src/lj_clib.c
> @@ -158,11 +158,13 @@ BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*);
>   /* Default libraries. */
>   enum {
>     CLIB_HANDLE_EXE,
> +#if !LJ_TARGET_UWP
>     CLIB_HANDLE_DLL,
>     CLIB_HANDLE_CRT,
>     CLIB_HANDLE_KERNEL32,
>     CLIB_HANDLE_USER32,
>     CLIB_HANDLE_GDI32,
> +#endif
>     CLIB_HANDLE_MAX
>   };
>   
> @@ -208,7 +210,7 @@ static const char *clib_extname(lua_State *L, const char *name)
>   static void *clib_loadlib(lua_State *L, const char *name, int global)
>   {
>     DWORD oldwerr = GetLastError();
> -  void *h = (void *)LoadLibraryExA(clib_extname(L, name), NULL, 0);
> +  void *h = LJ_WIN_LOADLIBA(clib_extname(L, name));
>     if (!h) clib_error(L, "cannot load module " LUA_QS ": %s", name);
>     SetLastError(oldwerr);
>     UNUSED(global);
> @@ -218,6 +220,7 @@ static void *clib_loadlib(lua_State *L, const char *name, int global)
>   static void clib_unloadlib(CLibrary *cl)
>   {
>     if (cl->handle == CLIB_DEFHANDLE) {
> +#if !LJ_TARGET_UWP
>       MSize i;
>       for (i = CLIB_HANDLE_KERNEL32; i < CLIB_HANDLE_MAX; i++) {
>         void *h = clib_def_handle[i];
> @@ -226,11 +229,16 @@ static void clib_unloadlib(CLibrary *cl)
>   	FreeLibrary((HINSTANCE)h);
>         }
>       }
> +#endif
>     } else if (cl->handle) {
>       FreeLibrary((HINSTANCE)cl->handle);
>     }
>   }
>   
> +#if LJ_TARGET_UWP
> +EXTERN_C IMAGE_DOS_HEADER __ImageBase;
> +#endif
> +
>   static void *clib_getsym(CLibrary *cl, const char *name)
>   {
>     void *p = NULL;
> @@ -239,6 +247,9 @@ static void *clib_getsym(CLibrary *cl, const char *name)
>       for (i = 0; i < CLIB_HANDLE_MAX; i++) {
>         HINSTANCE h = (HINSTANCE)clib_def_handle[i];
>         if (!(void *)h) {  /* Resolve default library handles (once). */
> +#if LJ_TARGET_UWP
> +	h = (HINSTANCE)&__ImageBase;
> +#else
>   	switch (i) {
>   	case CLIB_HANDLE_EXE: GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, NULL, &h); break;
>   	case CLIB_HANDLE_DLL:
> @@ -249,11 +260,12 @@ static void *clib_getsym(CLibrary *cl, const char *name)
>   	  GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
>   			     (const char *)&_fmode, &h);
>   	  break;
> -	case CLIB_HANDLE_KERNEL32: h = LoadLibraryExA("kernel32.dll", NULL, 0); break;
> -	case CLIB_HANDLE_USER32: h = LoadLibraryExA("user32.dll", NULL, 0); break;
> -	case CLIB_HANDLE_GDI32: h = LoadLibraryExA("gdi32.dll", NULL, 0); break;
> +	case CLIB_HANDLE_KERNEL32: h = LJ_WIN_LOADLIBA("kernel32.dll"); break;
> +	case CLIB_HANDLE_USER32: h = LJ_WIN_LOADLIBA("user32.dll"); break;
> +	case CLIB_HANDLE_GDI32: h = LJ_WIN_LOADLIBA("gdi32.dll"); break;
>   	}
>   	if (!h) continue;
> +#endif
>   	clib_def_handle[i] = (void *)h;
>         }
>         p = (void *)GetProcAddress(h, name);
> diff --git a/src/lj_mcode.c b/src/lj_mcode.c
> index c6361018..10db4457 100644
> --- a/src/lj_mcode.c
> +++ b/src/lj_mcode.c
> @@ -66,8 +66,8 @@ void lj_mcode_sync(void *start, void *end)
>   
>   static void *mcode_alloc_at(jit_State *J, uintptr_t hint, size_t sz, DWORD prot)
>   {
> -  void *p = VirtualAlloc((void *)hint, sz,
> -			 MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, prot);
> +  void *p = LJ_WIN_VALLOC((void *)hint, sz,
> +			  MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, prot);
>     if (!p && !hint)
>       lj_trace_err(J, LJ_TRERR_MCODEAL);
>     return p;
> @@ -82,7 +82,7 @@ static void mcode_free(jit_State *J, void *p, size_t sz)
>   static int mcode_setprot(void *p, size_t sz, DWORD prot)
>   {
>     DWORD oprot;
> -  return !VirtualProtect(p, sz, prot, &oprot);
> +  return !LJ_WIN_VPROTECT(p, sz, prot, &oprot);
>   }
>   
>   #elif LJ_TARGET_POSIX
> @@ -255,7 +255,7 @@ static void *mcode_alloc(jit_State *J, size_t sz)
>   /* All memory addresses are reachable by relative jumps. */
>   static void *mcode_alloc(jit_State *J, size_t sz)
>   {
> -#ifdef __OpenBSD__
> +#if defined(__OpenBSD__) || LJ_TARGET_UWP
>     /* Allow better executable memory allocation for OpenBSD W^X mode. */
>     void *p = mcode_alloc_at(J, 0, sz, MCPROT_RUN);
>     if (p && mcode_setprot(p, sz, MCPROT_GEN)) {
> diff --git a/src/lj_profile_timer.c b/src/lj_profile_timer.c
> index 056fd1f7..0b859457 100644
> --- a/src/lj_profile_timer.c
> +++ b/src/lj_profile_timer.c
> @@ -84,7 +84,7 @@ static DWORD WINAPI timer_thread(void *timerx)
>   {
>     lj_profile_timer *timer = (lj_profile_timer *)timerx;
>     int interval = timer->opt.interval_msec;
> -#if LJ_TARGET_WINDOWS
> +#if LJ_TARGET_WINDOWS && !LJ_TARGET_UWP
>     timer->wmm_tbp(interval);
>   #endif
>     while (1) {
> @@ -92,7 +92,7 @@ static DWORD WINAPI timer_thread(void *timerx)
>       if (timer->abort) break;
>       timer->opt.handler();
>     }
> -#if LJ_TARGET_WINDOWS
> +#if LJ_TARGET_WINDOWS && !LJ_TARGET_UWP
>     timer->wmm_tep(interval);
>   #endif
>     return 0;
> @@ -101,9 +101,9 @@ static DWORD WINAPI timer_thread(void *timerx)
>   /* Start profiling timer thread. */
>   void lj_profile_timer_start(lj_profile_timer *timer)
>   {
> -#if LJ_TARGET_WINDOWS
> +#if LJ_TARGET_WINDOWS && !LJ_TARGET_UWP
>     if (!timer->wmm) { /* Load WinMM library on-demand. */
> -    timer->wmm = LoadLibraryExA("winmm.dll", NULL, 0);
> +    timer->wmm = LJ_WIN_LOADLIBA("winmm.dll");
>       if (timer->wmm) {
>         timer->wmm_tbp =
>   	(WMM_TPFUNC)GetProcAddress(timer->wmm, "timeBeginPeriod");

  parent reply	other threads:[~2023-08-16 16:40 UTC|newest]

Thread overview: 97+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-09 15:35 [Tarantool-patches] [PATCH luajit 00/19] Prerequisites for improve assertions Sergey Kaplun via Tarantool-patches
2023-08-09 15:35 ` [Tarantool-patches] [PATCH luajit 01/19] MIPS: Use precise search for exit jump patching Sergey Kaplun via Tarantool-patches
2023-08-15  9:36   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 12:40     ` Sergey Kaplun via Tarantool-patches
2023-08-16 13:25   ` Sergey Bronnikov via Tarantool-patches
2023-08-09 15:35 ` [Tarantool-patches] [PATCH luajit 02/19] test: introduce mcode generator for tests Sergey Kaplun via Tarantool-patches
2023-08-15 10:14   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 12:55     ` Sergey Kaplun via Tarantool-patches
2023-08-16 13:06       ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 14:32   ` Sergey Bronnikov via Tarantool-patches
2023-08-16 15:20     ` Sergey Kaplun via Tarantool-patches
2023-08-16 16:08       ` Sergey Bronnikov via Tarantool-patches
2023-08-09 15:35 ` [Tarantool-patches] [PATCH luajit 03/19] MIPS: Fix handling of spare long-range jump slots Sergey Kaplun via Tarantool-patches
2023-08-15 11:13   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 13:05     ` Sergey Kaplun via Tarantool-patches
2023-08-16 15:02   ` Sergey Bronnikov via Tarantool-patches
2023-08-16 15:32     ` Sergey Kaplun via Tarantool-patches
2023-08-16 16:08       ` Sergey Bronnikov via Tarantool-patches
2023-08-09 15:35 ` [Tarantool-patches] [PATCH luajit 04/19] MIPS64: Add soft-float support to JIT compiler backend Sergey Kaplun via Tarantool-patches
2023-08-15 11:27   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 13:10     ` Sergey Kaplun via Tarantool-patches
2023-08-16 16:07   ` Sergey Bronnikov via Tarantool-patches
2023-08-09 15:35 ` [Tarantool-patches] [PATCH luajit 05/19] PPC: Add soft-float support to interpreter Sergey Kaplun via Tarantool-patches
2023-08-15 11:40   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 13:13     ` Sergey Kaplun via Tarantool-patches
2023-08-17 14:53   ` Sergey Bronnikov via Tarantool-patches
2023-08-09 15:35 ` [Tarantool-patches] [PATCH luajit 06/19] PPC: Add soft-float support to JIT compiler backend Sergey Kaplun via Tarantool-patches
2023-08-15 11:46   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 13:21     ` Sergey Kaplun via Tarantool-patches
2023-08-17 14:33   ` Sergey Bronnikov via Tarantool-patches
2023-08-09 15:35 ` [Tarantool-patches] [PATCH luajit 07/19] build: fix non-Linux/macOS builds Sergey Kaplun via Tarantool-patches
2023-08-15 11:58   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 13:40     ` Sergey Kaplun via Tarantool-patches
2023-08-17 14:31   ` Sergey Bronnikov via Tarantool-patches
2023-08-09 15:35 ` [Tarantool-patches] [PATCH luajit 08/19] Windows: Add UWP support, part 1 Sergey Kaplun via Tarantool-patches
2023-08-15 12:09   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 13:50     ` Sergey Kaplun via Tarantool-patches
2023-08-16 16:40   ` Sergey Bronnikov via Tarantool-patches [this message]
2023-08-09 15:35 ` [Tarantool-patches] [PATCH luajit 09/19] FFI: Eliminate hardcoded string hashes Sergey Kaplun via Tarantool-patches
2023-08-15 13:07   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 13:52     ` Sergey Kaplun via Tarantool-patches
2023-08-16 17:04     ` Sergey Bronnikov via Tarantool-patches
2023-08-09 15:35 ` [Tarantool-patches] [PATCH luajit 10/19] Cleanup math function compilation and fix inconsistencies Sergey Kaplun via Tarantool-patches
2023-08-11  8:06   ` Sergey Kaplun via Tarantool-patches
2023-08-15 13:10   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 17:15   ` Sergey Bronnikov via Tarantool-patches
2023-08-09 15:36 ` [Tarantool-patches] [PATCH luajit 11/19] Fix GCC 7 -Wimplicit-fallthrough warnings Sergey Kaplun via Tarantool-patches
2023-08-15 13:17   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 13:59     ` Sergey Kaplun via Tarantool-patches
2023-08-17  7:37   ` Sergey Bronnikov via Tarantool-patches
2023-08-09 15:36 ` [Tarantool-patches] [PATCH luajit 12/19] DynASM: Fix warning Sergey Kaplun via Tarantool-patches
2023-08-15 13:21   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 14:01     ` Sergey Kaplun via Tarantool-patches
2023-08-17  7:39   ` Sergey Bronnikov via Tarantool-patches
2023-08-17  7:51     ` Sergey Bronnikov via Tarantool-patches
2023-08-17  7:58       ` Sergey Kaplun via Tarantool-patches
2023-08-09 15:36 ` [Tarantool-patches] [PATCH luajit 13/19] ARM: Fix GCC 7 -Wimplicit-fallthrough warnings Sergey Kaplun via Tarantool-patches
2023-08-15 13:25   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 14:08     ` Sergey Kaplun via Tarantool-patches
2023-08-17  7:44   ` Sergey Bronnikov via Tarantool-patches
2023-08-17  8:01     ` Sergey Kaplun via Tarantool-patches
2023-08-09 15:36 ` [Tarantool-patches] [PATCH luajit 14/19] Fix debug.getinfo() argument check Sergey Kaplun via Tarantool-patches
2023-08-15 13:35   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 14:20     ` Sergey Kaplun via Tarantool-patches
2023-08-16 20:13       ` Maxim Kokryashkin via Tarantool-patches
2023-08-17  8:29   ` Sergey Bronnikov via Tarantool-patches
2023-08-09 15:36 ` [Tarantool-patches] [PATCH luajit 15/19] Fix LJ_MAX_JSLOTS assertion in rec_check_slots() Sergey Kaplun via Tarantool-patches
2023-08-15 14:07   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 14:22     ` Sergey Kaplun via Tarantool-patches
2023-08-17  8:57   ` Sergey Bronnikov via Tarantool-patches
2023-08-17  8:57     ` Sergey Kaplun via Tarantool-patches
2023-08-09 15:36 ` [Tarantool-patches] [PATCH luajit 16/19] Prevent integer overflow while parsing long strings Sergey Kaplun via Tarantool-patches
2023-08-15 14:38   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 14:52     ` Sergey Kaplun via Tarantool-patches
2023-08-17 10:53   ` Sergey Bronnikov via Tarantool-patches
2023-08-17 13:57     ` Sergey Kaplun via Tarantool-patches
2023-08-17 14:28       ` Sergey Bronnikov via Tarantool-patches
2023-08-09 15:36 ` [Tarantool-patches] [PATCH luajit 17/19] MIPS64: Fix register allocation in assembly of HREF Sergey Kaplun via Tarantool-patches
2023-08-16  9:01   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 15:17     ` Sergey Kaplun via Tarantool-patches
2023-08-16 20:14       ` Maxim Kokryashkin via Tarantool-patches
2023-08-17 11:06   ` Sergey Bronnikov via Tarantool-patches
2023-08-17 13:50     ` Sergey Kaplun via Tarantool-patches
2023-08-17 14:30       ` Sergey Bronnikov via Tarantool-patches
2023-08-09 15:36 ` [Tarantool-patches] [PATCH luajit 18/19] DynASM/MIPS: Fix shadowed variable Sergey Kaplun via Tarantool-patches
2023-08-16  9:03   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 15:22     ` Sergey Kaplun via Tarantool-patches
2023-08-17 12:01   ` Sergey Bronnikov via Tarantool-patches
2023-08-09 15:36 ` [Tarantool-patches] [PATCH luajit 19/19] MIPS: Add MIPS64 R6 port Sergey Kaplun via Tarantool-patches
2023-08-16  9:16   ` Maxim Kokryashkin via Tarantool-patches
2023-08-16 15:24     ` Sergey Kaplun via Tarantool-patches
2023-08-17 13:03   ` Sergey Bronnikov via Tarantool-patches
2023-08-17 13:59     ` Sergey Kaplun via Tarantool-patches
2023-08-16 15:35 ` [Tarantool-patches] [PATCH luajit 00/19] Prerequisites for improve assertions Sergey Kaplun via Tarantool-patches
2023-08-17 14:06   ` Maxim Kokryashkin via Tarantool-patches
2023-08-17 14:38 ` Sergey Bronnikov via Tarantool-patches
2023-08-31 15:17 ` Igor Munkin via Tarantool-patches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=fb7f0b05-4916-2f94-f79d-bb0ed2a41640@tarantool.org \
    --to=tarantool-patches@dev.tarantool.org \
    --cc=imun@tarantool.org \
    --cc=sergeyb@tarantool.org \
    --cc=skaplun@tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH luajit 08/19] Windows: Add UWP support, part 1.' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox