From cfbdbcd322324ec9916bd797d00cf85644d601ca Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Tue, 8 Apr 2025 09:03:34 +0200 Subject: [PATCH 01/12] win32: do not redefine mode_t with conflicting type on MinGW --- src/include/win/port_win.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/include/win/port_win.h b/src/include/win/port_win.h index 790a8fe3e8..709a190ae8 100644 --- a/src/include/win/port_win.h +++ b/src/include/win/port_win.h @@ -74,7 +74,9 @@ typedef __int64_t int64_t; typedef __uint64_t uint64_t; typedef long off_t; +#if defined(_MSC_VER) typedef int mode_t; +#endif typedef long _off_t; typedef long int __loff_t; typedef unsigned long DWORD; From e71e309ce28517c3b7e97a11fdee1137bbe21b87 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Tue, 8 Apr 2025 09:04:53 +0200 Subject: [PATCH 02/12] win32: include stdint for INT64_MAX --- src/include/portability.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/include/portability.h b/src/include/portability.h index d0360ebfa9..ec5ea772eb 100644 --- a/src/include/portability.h +++ b/src/include/portability.h @@ -16,6 +16,7 @@ #ifndef NATIVE_CLIENT_SRC_INCLUDE_PORTABILITY_H_ #define NATIVE_CLIENT_SRC_INCLUDE_PORTABILITY_H_ 1 +#include #include #include "native_client/src/include/build_config.h" From bc690fe6f7ac5a1bae6b5e25b116110b4bf5c109 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Tue, 8 Apr 2025 09:05:21 +0200 Subject: [PATCH 03/12] win32: use lowercase header file name --- src/shared/platform/win/lock_impl.h | 2 +- src/shared/platform/win/xlate_system_error.c | 2 +- src/trusted/validator/validation_cache.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/shared/platform/win/lock_impl.h b/src/shared/platform/win/lock_impl.h index cb5f98b8d3..9024ea3a06 100644 --- a/src/shared/platform/win/lock_impl.h +++ b/src/shared/platform/win/lock_impl.h @@ -8,7 +8,7 @@ #ifndef NATIVE_CLIENT_SRC_TRUSTED_PLATFORM_WIN_LOCK_IMPL_H_ #define NATIVE_CLIENT_SRC_TRUSTED_PLATFORM_WIN_LOCK_IMPL_H_ -#include +#include #include "native_client/src/include/nacl_macros.h" #include "native_client/src/shared/platform/nacl_sync.h" diff --git a/src/shared/platform/win/xlate_system_error.c b/src/shared/platform/win/xlate_system_error.c index cfaca7c266..b9d51f34fd 100644 --- a/src/shared/platform/win/xlate_system_error.c +++ b/src/shared/platform/win/xlate_system_error.c @@ -9,7 +9,7 @@ */ #include -#include +#include #include "native_client/src/shared/platform/nacl_log.h" #include "native_client/src/shared/platform/win/xlate_system_error.h" diff --git a/src/trusted/validator/validation_cache.c b/src/trusted/validator/validation_cache.c index b9d9536bb7..f8ce53e9ef 100644 --- a/src/trusted/validator/validation_cache.c +++ b/src/trusted/validator/validation_cache.c @@ -21,7 +21,7 @@ #include "native_client/src/trusted/validator/validation_metadata.h" #if NACL_WINDOWS -#include +#include #include #endif From 19a626742fd1f7c27a3d312b857183c0f3f81fff Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Tue, 8 Apr 2025 09:26:48 +0200 Subject: [PATCH 04/12] win32: use __inline__ instead of __forceinline__ on MinGW --- src/include/nacl_compiler_annotations.h | 2 +- src/trusted/validator_ragel/bitmap.h | 2 +- src/trusted/validator_ragel/decoding.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/include/nacl_compiler_annotations.h b/src/include/nacl_compiler_annotations.h index c9baad67b7..b8e46d2f26 100644 --- a/src/include/nacl_compiler_annotations.h +++ b/src/include/nacl_compiler_annotations.h @@ -10,7 +10,7 @@ #include "native_client/src/include/build_config.h" /* MSVC supports "inline" only in C++ */ -#if NACL_WINDOWS +#if defined(_MSC_VER) # define INLINE __forceinline #else # define INLINE __inline__ diff --git a/src/trusted/validator_ragel/bitmap.h b/src/trusted/validator_ragel/bitmap.h index dec2a0d2cb..798e392b72 100644 --- a/src/trusted/validator_ragel/bitmap.h +++ b/src/trusted/validator_ragel/bitmap.h @@ -15,7 +15,7 @@ #include "native_client/src/include/nacl_macros.h" #include "native_client/src/include/portability.h" -#if NACL_WINDOWS +#if defined(_MSC_VER) # define FORCEINLINE __forceinline #else # define FORCEINLINE __inline __attribute__ ((always_inline)) diff --git a/src/trusted/validator_ragel/decoding.h b/src/trusted/validator_ragel/decoding.h index 64087b7621..51a781d14e 100644 --- a/src/trusted/validator_ragel/decoding.h +++ b/src/trusted/validator_ragel/decoding.h @@ -19,7 +19,7 @@ #include "native_client/src/include/build_config.h" #include "native_client/src/trusted/validator_ragel/decoder.h" -#if NACL_WINDOWS +#if defined(_MSC_VER) # define FORCEINLINE __forceinline #else # define FORCEINLINE __inline __attribute__ ((always_inline)) From 661bfa5cc5b0bf07949f45e80df6193abeb83c08 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Tue, 8 Apr 2025 09:27:54 +0200 Subject: [PATCH 05/12] win32: do not use non-standard i64 integer suffix on MinGW --- src/include/portability.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/include/portability.h b/src/include/portability.h index ec5ea772eb..1344148347 100644 --- a/src/include/portability.h +++ b/src/include/portability.h @@ -60,7 +60,7 @@ #define GG_UINT32_C(x) (x ## U) #define GG_UINT64_C(x) GG_ULONGLONG(x) -#if NACL_WINDOWS +#if NACL_WINDOWS && defined(_MSC_VER) #define GG_LONGLONG(x) x##I64 #define GG_ULONGLONG(x) x##UI64 #else From b93fd4d30e28b532ef5af51ea67f4757fdbea392 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Tue, 8 Apr 2025 09:34:32 +0200 Subject: [PATCH 06/12] win32: do not declare PosixSignals enum on MinGW --- src/trusted/service_runtime/nacl_signal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/trusted/service_runtime/nacl_signal.h b/src/trusted/service_runtime/nacl_signal.h index e3a8fa1732..2301ed407e 100644 --- a/src/trusted/service_runtime/nacl_signal.h +++ b/src/trusted/service_runtime/nacl_signal.h @@ -58,7 +58,7 @@ struct NaClExceptionFrame; #define NACL_ABI_WIFSIGNALED(status) ((((status) + 1) & 0x7f) > 1) #define NACL_ABI_W_EXITCODE(ret, sig) ((((ret) & 0xff) << 8) + ((sig) & 0x7f)) -#if NACL_WINDOWS +#if NACL_WINDOWS && defined(_MSC_VER) enum PosixSignals { SIGINT = 2, SIGQUIT = 3, From 47af10e74a4fc535ab4ed76b67cf72dde01f2454 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Tue, 8 Apr 2025 09:37:05 +0200 Subject: [PATCH 07/12] win32: use GCC noinline on MinGW --- src/trusted/service_runtime/sel_ldr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/trusted/service_runtime/sel_ldr.c b/src/trusted/service_runtime/sel_ldr.c index 4dbc7611cb..7bcf97c210 100644 --- a/src/trusted/service_runtime/sel_ldr.c +++ b/src/trusted/service_runtime/sel_ldr.c @@ -912,7 +912,7 @@ void NaClVmIoPendingCheck_mu(struct NaClApp *nap, * We need its symbol in the symbol table so don't inline it. * TODO(dje): add some explanation for the non-GDB person. */ -#if NACL_WINDOWS +#if NACL_WINDOWS && defined(_MSVC_VER) __declspec(dllexport noinline) #endif #ifdef __GNUC__ From 1d334ef19b741cc0704a59f44ca9447eb25d9242 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Tue, 8 Apr 2025 11:30:35 +0200 Subject: [PATCH 08/12] win32: use asm intrinsics alternative to __halt() on MinGW --- src/shared/platform/win/nacl_exit.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/shared/platform/win/nacl_exit.c b/src/shared/platform/win/nacl_exit.c index a190175ff5..17c7741d89 100644 --- a/src/shared/platform/win/nacl_exit.c +++ b/src/shared/platform/win/nacl_exit.c @@ -39,7 +39,11 @@ void NaClAbort(void) { * http://code.google.com/p/nativeclient/issues/detail?id=2772). */ while (1) { +#if defined(_MSC_VER) __halt(); +#else + __asm__("hlt"); +#endif } } From 3a91181457a3da144a384a207b06bd0b4066a927 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Tue, 8 Apr 2025 12:21:33 +0200 Subject: [PATCH 09/12] win32: use posix intrinsics instead of MSVC asm code on i686 MinGW --- src/trusted/service_runtime/arch/x86_32/sel_rt_32.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/trusted/service_runtime/arch/x86_32/sel_rt_32.c b/src/trusted/service_runtime/arch/x86_32/sel_rt_32.c index 5757b6c904..15d543639e 100644 --- a/src/trusted/service_runtime/arch/x86_32/sel_rt_32.c +++ b/src/trusted/service_runtime/arch/x86_32/sel_rt_32.c @@ -90,7 +90,7 @@ int NaClAppThreadInitArchSpecific(struct NaClAppThread *natp, * Save the system's state of the x87 FPU control word so we can restore * the same state when returning to trusted code. */ -#if NACL_WINDOWS +#if defined(_MSC_VER) { uint16_t sys_fcw; __asm { From e963b644423c4239e9589e65f029a7eba5dcf60c Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Tue, 8 Apr 2025 12:29:32 +0200 Subject: [PATCH 10/12] win32: do not use MSVC fast asm in port_win.c on i686 MinGW --- src/shared/platform/win/port_win.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/platform/win/port_win.c b/src/shared/platform/win/port_win.c index 2f303ff10a..d743bd1c49 100644 --- a/src/shared/platform/win/port_win.c +++ b/src/shared/platform/win/port_win.c @@ -12,7 +12,7 @@ #include "native_client/src/include/portability.h" -#if ( DO_NOT_USE_FAST_ASSEMBLER_VERSION_FOR_FFS || defined(_WIN64) ) +#if ( DO_NOT_USE_FAST_ASSEMBLER_VERSION_FOR_FFS || defined(_WIN64) || !defined(_MSC_VER) ) int ffs(int x) { int r = 1; From e322f24cba2197def05c19b7ac814b71a99c694d Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Tue, 9 Dec 2025 18:07:46 +0100 Subject: [PATCH 11/12] win32: silence some MSVC pragma and redefinitions on MinGW --- src/include/portability.h | 2 ++ src/include/portability_io.h | 4 ++++ src/include/portability_string.h | 2 ++ src/include/win/port_win.h | 6 +++++- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/include/portability.h b/src/include/portability.h index 1344148347..42aab4d5a5 100644 --- a/src/include/portability.h +++ b/src/include/portability.h @@ -31,7 +31,9 @@ #if NACL_WINDOWS /* disable warnings for deprecated functions like getenv, etc. */ +#if defined(_MSC_VER) #pragma warning(disable : 4996) +#endif # include /* TODO: eliminate port_win.h */ # include "native_client/src/include/win/port_win.h" diff --git a/src/include/portability_io.h b/src/include/portability_io.h index 75eedbf12d..8abafd023f 100644 --- a/src/include/portability_io.h +++ b/src/include/portability_io.h @@ -17,7 +17,9 @@ #if NACL_WINDOWS /* disable warnings for deprecated _snprintf */ +#if defined(_MSC_VER) #pragma warning(disable : 4996) +#endif #include #include @@ -43,7 +45,9 @@ /* missing from win stdio.h and fcntl.h */ /* from bits/fcntl.h */ +#if defined(_MSC_VER) #define O_ACCMODE 0003 +#endif #else diff --git a/src/include/portability_string.h b/src/include/portability_string.h index 9b86ead994..1c49954770 100644 --- a/src/include/portability_string.h +++ b/src/include/portability_string.h @@ -53,7 +53,9 @@ size_t strnlen(const char* str, size_t max); #if NACL_WINDOWS /* disable warnings for deprecated strncpy */ +#if defined(_MSC_VER) #pragma warning(disable : 4996) +#endif #define STRDUP _strdup #define STRTOLL _strtoi64 diff --git a/src/include/win/port_win.h b/src/include/win/port_win.h index 709a190ae8..8130db69c2 100644 --- a/src/include/win/port_win.h +++ b/src/include/win/port_win.h @@ -38,6 +38,7 @@ /* TODO: eliminated this file and move its contents to portability*.h */ +#if defined(_MSC_VER) /* wchar_t and unsigned short are not always equivalent*/ #pragma warning(disable : 4255) /* padding added after struct member */ @@ -46,6 +47,7 @@ #pragma warning(disable: 4826) /* conditional expression is constant */ #pragma warning(disable : 4127) +#endif /* TODO: limit this include to files that really need it */ #ifndef NOMINMAX @@ -96,7 +98,7 @@ typedef int32_t ssize_t; * * Only including range values actually used in our codebase. */ -#if _MSC_VER >= 1800 +#if !defined(_MSC_VER) || _MSC_VER >= 1800 #include #else # if !defined(UINT8_MAX) @@ -162,6 +164,8 @@ EXTERN_C_END /* from linux/limits.h, via sys/param.h */ +#if defined(_MSC_VER) #define PATH_MAX 4096 +#endif #endif /* NATIVE_CLIENT_SRC_INCLUDE_WIN_PORT_WIN_H_ */ From e52b0bd3f2fe17d520a02bb78f423ae4efd30641 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Tue, 9 Dec 2025 18:33:56 +0100 Subject: [PATCH 12/12] win32: silence warnings about undefined NACL_USE_TLS and NACL_USE_TSD --- src/trusted/fault_injection/fault_injection.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/trusted/fault_injection/fault_injection.c b/src/trusted/fault_injection/fault_injection.c index 3d71f5f7b2..2fa29c35d9 100644 --- a/src/trusted/fault_injection/fault_injection.c +++ b/src/trusted/fault_injection/fault_injection.c @@ -66,6 +66,8 @@ */ # define NACL_HAS_STRNDUP 0 /* could use TLS if not built into a DLL, otherwise must use TLSALLOC */ +# define NACL_USE_TLS 0 +# define NACL_USE_TSD 0 # define NACL_USE_TLSALLOC 1 # include #endif