| diff --git a/BUILD.gn b/BUILD.gn |
| index a9ab6783fa..5e144b24e0 100644 |
| --- a/BUILD.gn |
| +++ b/BUILD.gn |
| @@ -444,6 +444,11 @@ config("internal_config") { |
| if (is_component_build) { |
| defines += [ "BUILDING_V8_SHARED" ] |
| } |
| + # Newer versions of gcc don't seem to trigger this warning, |
| + # so remove this once it is no longer necesary |
| + if(is_linux && !is_clang){ |
| + cflags = ["-Wno-invalid-offsetof"] |
| + } |
| } |
| |
| # Should be applied to all targets that write trace events. |
| @@ -942,17 +947,25 @@ config("toolchain") { |
| if (v8_current_cpu == "x86") { |
| defines += [ "V8_TARGET_ARCH_IA32" ] |
| if (is_win) { |
| - # Ensure no surprising artifacts from 80bit double math with x86. |
| - cflags += [ "/arch:SSE2" ] |
| + if(!is_mingw){ |
| + # Ensure no surprising artifacts from 80bit double math with x86. |
| + cflags += [ "/arch:SSE2" ] |
| + } else { |
| + cflags += [ "-msse2" ] |
| + } |
| } |
| } |
| if (v8_current_cpu == "x64") { |
| defines += [ "V8_TARGET_ARCH_X64" ] |
| if (is_win) { |
| - # Increase the initial stack size. The default is 1MB, this is 2MB. This |
| - # applies only to executables and shared libraries produced by V8 since |
| - # ldflags are not pushed to dependants. |
| - ldflags += [ "/STACK:2097152" ] |
| + if(!is_mingw){ |
| + # Increase the initial stack size. The default is 1MB, this is 2MB. This |
| + # applies only to executables and shared libraries produced by V8 since |
| + # ldflags are not pushed to dependants. |
| + ldflags += [ "/STACK:2097152" ] |
| + } else { |
| + ldflags += [ "-Wl,--stack,2097152" ] |
| + } |
| } |
| } |
| if (is_android && v8_android_log_stdout) { |
| @@ -1008,7 +1021,7 @@ config("toolchain") { |
| } |
| |
| if (v8_no_inline) { |
| - if (is_win) { |
| + if (is_win && !is_mingw) { |
| cflags += [ "/Ob0" ] |
| } else { |
| cflags += [ |
| @@ -1032,7 +1045,7 @@ config("toolchain") { |
| } |
| } |
| |
| - if (is_win) { |
| + if (is_win && !is_mingw) { |
| cflags += [ |
| "/wd4245", # Conversion with signed/unsigned mismatch. |
| "/wd4267", # Conversion with possible loss of data. |
| @@ -1054,11 +1067,11 @@ config("toolchain") { |
| ] |
| } |
| |
| - if (!is_clang && is_win) { |
| + if (!is_clang && !is_mingw && is_win) { |
| cflags += [ "/wd4506" ] # Benign "no definition for inline function" |
| } |
| |
| - if (!is_clang && !is_win) { |
| + if (!is_clang && (!is_win || is_mingw)) { |
| cflags += [ |
| # Disable gcc warnings for optimizations based on the assumption that |
| # signed overflow does not occur. Generates false positives (see |
| @@ -4499,17 +4512,25 @@ v8_component("v8_libbase") { |
| |
| defines += [ "_CRT_RAND_S" ] # for rand_s() |
| |
| - libs = [ |
| - "dbghelp.lib", |
| - "winmm.lib", |
| - "ws2_32.lib", |
| - ] |
| + if(!is_mingw){ |
| + libs = [ |
| + "dbghelp.lib", |
| + "winmm.lib", |
| + "ws2_32.lib", |
| + ] |
| |
| - if (v8_enable_system_instrumentation) { |
| - libs += [ "advapi32.lib" ] # Needed for TraceLoggingProvider.h |
| - } |
| + if (v8_enable_system_instrumentation) { |
| + libs += [ "advapi32.lib" ] # Needed for TraceLoggingProvider.h |
| + } |
| |
| - data_deps += [ "//build/win:runtime_libs" ] |
| + data_deps += [ "//build/win:runtime_libs" ] |
| + } else { |
| + libs = [ |
| + "dbghelp", |
| + "winmm", |
| + "ws2_32", |
| + ] |
| + } |
| } |
| |
| if (v8_current_cpu == "mips" || v8_current_cpu == "mips64") { |
| @@ -4606,7 +4627,7 @@ v8_component("v8_libplatform") { |
| # TODO(skyostil): Switch TraceEventListener to protozero. |
| "//third_party/perfetto/protos/perfetto/trace:lite", |
| ] |
| - } else if (is_win) { |
| + } else if (is_win && !is_mingw) { |
| sources -= [ "src/libplatform/tracing/recorder-default.cc" ] |
| sources += [ "src/libplatform/tracing/recorder-win.cc" ] |
| } |
| @@ -4652,7 +4673,7 @@ v8_source_set("v8_cppgc_shared") { |
| "src/heap/cppgc/sanitizers.h", |
| ] |
| |
| - if (is_clang || !is_win) { |
| + if (is_clang || is_mingw || is_linux) { |
| if (current_cpu == "x64") { |
| sources += [ "src/heap/base/asm/x64/push_registers_asm.cc" ] |
| } else if (current_cpu == "x86") { |
| @@ -4672,7 +4693,7 @@ v8_source_set("v8_cppgc_shared") { |
| } else if (current_cpu == "riscv64") { |
| sources += [ "src/heap/base/asm/riscv64/push_registers_asm.cc" ] |
| } |
| - } else if (is_win) { |
| + } else if (is_win && !is_mingw) { |
| if (current_cpu == "x64") { |
| sources += [ "src/heap/base/asm/x64/push_registers_masm.S" ] |
| } else if (current_cpu == "x86") { |
| @@ -4976,6 +4997,12 @@ if (current_toolchain == v8_snapshot_toolchain) { |
| |
| configs = [ ":internal_config" ] |
| |
| + if(is_mingw) { |
| + configs += [ |
| + "//build/config/compiler:strip_debug", |
| + ] |
| + } |
| + |
| deps = [ |
| ":v8_base_without_compiler", |
| ":v8_compiler_for_mksnapshot", |
| @@ -5202,10 +5229,18 @@ if (is_component_build) { |
| |
| public_deps = [ |
| ":v8_base", |
| + ":v8_initializers", |
| ":v8_snapshot", |
| ] |
| |
| - configs = [ ":internal_config" ] |
| + configs = [ |
| + ":internal_config", |
| + ] |
| + if(is_mingw) { |
| + configs += [ |
| + "//build/config/compiler:strip_debug", |
| + ] |
| + } |
| |
| public_configs = [ ":external_config" ] |
| } |
| @@ -5225,7 +5260,16 @@ if (is_component_build) { |
| ":v8_snapshot", |
| ] |
| |
| - configs = [ ":internal_config" ] |
| + configs = [ |
| + ":internal_config", |
| + ] |
| + if(is_mingw) { |
| + configs += [ |
| + "//build/config/win:export_all_symbols", |
| + "//build/config/compiler:strip_debug", |
| + ] |
| + } |
| + |
| |
| public_configs = [ ":external_config" ] |
| } |
| diff --git a/include/v8.h b/include/v8.h |
| index 7cb19bbede..b7b16d004c 100644 |
| --- a/include/v8.h |
| +++ b/include/v8.h |
| @@ -31,6 +31,11 @@ |
| #include "v8-version.h" // NOLINT(build/include_directory) |
| #include "v8config.h" // NOLINT(build/include_directory) |
| |
| +#if defined(__MINGW32__) || defined(__MINGW64__) |
| +// MinGW header files do not implicitly include windows.h |
| +struct _EXCEPTION_POINTERS; |
| +#endif |
| + |
| // We reserve the V8_* prefix for macros defined in V8 public API and |
| // assume there are no name conflicts with the embedder's code. |
| |
| diff --git a/include/v8config.h b/include/v8config.h |
| index acd34d7a1f..50b2213029 100644 |
| --- a/include/v8config.h |
| +++ b/include/v8config.h |
| @@ -129,7 +129,7 @@ path. Add it with -I<path> to the command line |
| #elif defined(__QNXNTO__) |
| # define V8_OS_POSIX 1 |
| # define V8_OS_QNX 1 |
| -#elif defined(_WIN32) |
| +#elif defined(_WIN32) || defined(__MINGW32__) || defined(__MINGW64__) |
| # define V8_OS_WIN 1 |
| #endif |
| |
| @@ -463,7 +463,12 @@ path. Add it with -I<path> to the command line |
| // V8_NODISCARD Foo() { ... }; |
| // [[nodiscard]] comes in C++17 but supported in clang with -std >= c++11. |
| #if V8_HAS_CPP_ATTRIBUTE_NODISCARD |
| +#if defined(__MINGW32__) || defined(__MINGW64__) |
| +// Work around MinGW not supporting the __declspec(dllexport) [[nodiscard]] combination |
| +#define V8_NODISCARD __attribute__((warn_unused_result)) |
| +#else |
| #define V8_NODISCARD [[nodiscard]] |
| +#endif |
| #else |
| #define V8_NODISCARD /* NOT SUPPORTED */ |
| #endif |
| diff --git a/src/base/bits.h b/src/base/bits.h |
| index b137f73936..3bb4ceb7b6 100644 |
| --- a/src/base/bits.h |
| +++ b/src/base/bits.h |
| @@ -12,8 +12,10 @@ |
| #include "src/base/macros.h" |
| #if V8_CC_MSVC |
| #include <intrin.h> |
| +#elif defined(__MINGW32__) |
| +#include <x86intrin.h> |
| #endif |
| -#if V8_OS_WIN32 |
| +#if V8_OS_WIN |
| #include "src/base/win32-headers.h" |
| #endif |
| |
| diff --git a/src/base/export-template.h b/src/base/export-template.h |
| index 861cfe4027..90c41f7097 100644 |
| --- a/src/base/export-template.h |
| +++ b/src/base/export-template.h |
| @@ -153,7 +153,12 @@ |
| |
| EXPORT_TEMPLATE_TEST(DEFAULT, ); |
| EXPORT_TEMPLATE_TEST(DEFAULT, __attribute__((visibility("default")))); |
| +#if defined(__MINGW32__) || defined(__MINGW64__) |
| +// On MingW MSVC_HACK breaks. |
| +EXPORT_TEMPLATE_TEST(DEFAULT, __declspec(dllexport)); |
| +#else |
| EXPORT_TEMPLATE_TEST(MSVC_HACK, __declspec(dllexport)); |
| +#endif |
| EXPORT_TEMPLATE_TEST(DEFAULT, __declspec(dllimport)); |
| |
| #undef EXPORT_TEMPLATE_TEST |
| diff --git a/src/base/platform/platform-win32.cc b/src/base/platform/platform-win32.cc |
| index 7f6c0e97d2..a0eedf5511 100644 |
| --- a/src/base/platform/platform-win32.cc |
| +++ b/src/base/platform/platform-win32.cc |
| @@ -4,21 +4,14 @@ |
| |
| // Platform-specific code for Win32. |
| |
| -// Secure API functions are not available using MinGW with msvcrt.dll |
| -// on Windows XP. Make sure MINGW_HAS_SECURE_API is not defined to |
| -// disable definition of secure API functions in standard headers that |
| -// would conflict with our own implementation. |
| -#ifdef __MINGW32__ |
| -#include <_mingw.h> |
| -#ifdef MINGW_HAS_SECURE_API |
| -#undef MINGW_HAS_SECURE_API |
| -#endif // MINGW_HAS_SECURE_API |
| -#endif // __MINGW32__ |
| - |
| #include <limits> |
| |
| #include "src/base/win32-headers.h" |
| |
| +#if defined(__MINGW32__) || defined(__MINGW64__) |
| +// REMOVE ONCE mingw functions.h file is fixed |
| +#undef __deref |
| +#endif |
| #include "src/base/bits.h" |
| #include "src/base/lazy-instance.h" |
| #include "src/base/macros.h" |
| @@ -33,71 +26,6 @@ |
| #include <crtdbg.h> // NOLINT |
| #endif // defined(_MSC_VER) |
| |
| -// Extra functions for MinGW. Most of these are the _s functions which are in |
| -// the Microsoft Visual Studio C++ CRT. |
| -#ifdef __MINGW32__ |
| - |
| - |
| -#ifndef __MINGW64_VERSION_MAJOR |
| - |
| -#define _TRUNCATE 0 |
| -#define STRUNCATE 80 |
| - |
| -inline void MemoryFence() { |
| - int barrier = 0; |
| - __asm__ __volatile__("xchgl %%eax,%0 ":"=r" (barrier)); |
| -} |
| - |
| -#endif // __MINGW64_VERSION_MAJOR |
| - |
| - |
| -int localtime_s(tm* out_tm, const time_t* time) { |
| - tm* posix_local_time_struct = localtime_r(time, out_tm); |
| - if (posix_local_time_struct == nullptr) return 1; |
| - return 0; |
| -} |
| - |
| - |
| -int fopen_s(FILE** pFile, const char* filename, const char* mode) { |
| - *pFile = fopen(filename, mode); |
| - return *pFile != nullptr ? 0 : 1; |
| -} |
| - |
| -int _vsnprintf_s(char* buffer, size_t sizeOfBuffer, size_t count, |
| - const char* format, va_list argptr) { |
| - DCHECK(count == _TRUNCATE); |
| - return _vsnprintf(buffer, sizeOfBuffer, format, argptr); |
| -} |
| - |
| - |
| -int strncpy_s(char* dest, size_t dest_size, const char* source, size_t count) { |
| - CHECK(source != nullptr); |
| - CHECK(dest != nullptr); |
| - CHECK_GT(dest_size, 0); |
| - |
| - if (count == _TRUNCATE) { |
| - while (dest_size > 0 && *source != 0) { |
| - *(dest++) = *(source++); |
| - --dest_size; |
| - } |
| - if (dest_size == 0) { |
| - *(dest - 1) = 0; |
| - return STRUNCATE; |
| - } |
| - } else { |
| - while (dest_size > 0 && count > 0 && *source != 0) { |
| - *(dest++) = *(source++); |
| - --dest_size; |
| - --count; |
| - } |
| - } |
| - CHECK_GT(dest_size, 0); |
| - *dest = 0; |
| - return 0; |
| -} |
| - |
| -#endif // __MINGW32__ |
| - |
| namespace v8 { |
| namespace base { |
| |
| diff --git a/src/base/platform/time.cc b/src/base/platform/time.cc |
| index c399c52cb2..c0f80761eb 100644 |
| --- a/src/base/platform/time.cc |
| +++ b/src/base/platform/time.cc |
| @@ -787,13 +787,13 @@ ThreadTicks ThreadTicks::Now() { |
| #endif |
| #elif V8_OS_MACOSX |
| return ThreadTicks(ComputeThreadTicks()); |
| -#elif(defined(_POSIX_THREAD_CPUTIME) && (_POSIX_THREAD_CPUTIME >= 0)) || \ |
| - defined(V8_OS_ANDROID) |
| - return ThreadTicks(ClockNow(CLOCK_THREAD_CPUTIME_ID)); |
| #elif V8_OS_SOLARIS |
| return ThreadTicks(gethrvtime() / Time::kNanosecondsPerMicrosecond); |
| #elif V8_OS_WIN |
| return ThreadTicks::GetForThread(::GetCurrentThread()); |
| +#elif(defined(_POSIX_THREAD_CPUTIME) && (_POSIX_THREAD_CPUTIME >= 0)) || \ |
| + defined(V8_OS_ANDROID) |
| + return ThreadTicks(ClockNow(CLOCK_THREAD_CPUTIME_ID)); |
| #else |
| UNREACHABLE(); |
| #endif |
| diff --git a/src/base/win32-headers.h b/src/base/win32-headers.h |
| index 82555463c0..08c67bc13a 100644 |
| --- a/src/base/win32-headers.h |
| +++ b/src/base/win32-headers.h |
| @@ -38,17 +38,9 @@ |
| #include <mmsystem.h> // For timeGetTime(). |
| #include <signal.h> // For raise(). |
| #include <time.h> // For LocalOffset() implementation. |
| -#ifdef __MINGW32__ |
| -// Require Windows XP or higher when compiling with MinGW. This is for MinGW |
| -// header files to expose getaddrinfo. |
| -#undef _WIN32_WINNT |
| -#define _WIN32_WINNT 0x501 |
| -#endif // __MINGW32__ |
| -#if !defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR) |
| #include <dbghelp.h> // For SymLoadModule64 and al. |
| #include <errno.h> // For STRUNCATE |
| #include <versionhelpers.h> // For IsWindows8OrGreater(). |
| -#endif // !defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR) |
| #include <limits.h> // For INT_MAX and al. |
| #include <tlhelp32.h> // For Module32First and al. |
| |
| @@ -56,9 +48,7 @@ |
| // makes it impossible to have them elsewhere. |
| #include <winsock2.h> |
| #include <ws2tcpip.h> |
| -#ifndef __MINGW32__ |
| #include <wspiapi.h> |
| -#endif // __MINGW32__ |
| #include <process.h> // For _beginthreadex(). |
| #include <stdlib.h> |
| |
| @@ -80,5 +70,5 @@ |
| #undef RotateLeft32 |
| #undef RotateRight64 |
| #undef RotateLeft64 |
| - |
| +#undef __deref |
| #endif // V8_BASE_WIN32_HEADERS_H_ |
| diff --git a/src/codegen/code-stub-assembler.h b/src/codegen/code-stub-assembler.h |
| index 03af2cc5e2..bb19092c54 100644 |
| --- a/src/codegen/code-stub-assembler.h |
| +++ b/src/codegen/code-stub-assembler.h |
| @@ -301,7 +301,7 @@ enum class PrimitiveType { kBoolean, kNumber, kString, kSymbol }; |
| // it's possible to add JavaScript-specific useful CodeAssembler "macros" |
| // without modifying files in the compiler directory (and requiring a review |
| // from a compiler directory OWNER). |
| -class V8_EXPORT_PRIVATE CodeStubAssembler |
| +class V8_EXPORT CodeStubAssembler |
| : public compiler::CodeAssembler, |
| public TorqueGeneratedExportedMacrosAssembler { |
| public: |
| diff --git a/src/codegen/handler-table.cc b/src/codegen/handler-table.cc |
| index 8aec047d13..12e25a2631 100644 |
| --- a/src/codegen/handler-table.cc |
| +++ b/src/codegen/handler-table.cc |
| @@ -219,6 +219,12 @@ int HandlerTable::LookupReturn(int pc_offset) { |
| difference_type operator-(const Iterator& other) const { |
| return index - other.index; |
| } |
| +#ifdef _GLIBCXX_DEBUG |
| + bool operator<=(const Iterator& other) const |
| + { |
| + return index <= other.index; |
| + } |
| +#endif |
| HandlerTable* table; |
| int index; |
| }; |
| diff --git a/src/common/assert-scope.h b/src/common/assert-scope.h |
| index 114b4782c9..92acf77aa4 100644 |
| --- a/src/common/assert-scope.h |
| +++ b/src/common/assert-scope.h |
| @@ -84,7 +84,7 @@ class CombinationAssertScope; |
| template <typename Scope> |
| class V8_NODISCARD CombinationAssertScope<Scope> : public Scope { |
| public: |
| - V8_EXPORT_PRIVATE static bool IsAllowed() { |
| + static bool IsAllowed() { |
| // Define IsAllowed() explicitly rather than with using Scope::IsAllowed, to |
| // allow SFINAE removal of IsAllowed() when it's not defined (under debug). |
| return Scope::IsAllowed(); |
| @@ -101,12 +101,12 @@ class CombinationAssertScope<Scope, Scopes...> |
| |
| public: |
| // Constructor for per-thread scopes. |
| - V8_EXPORT_PRIVATE CombinationAssertScope() : Scope(), NextScopes() {} |
| + CombinationAssertScope() : Scope(), NextScopes() {} |
| // Constructor for per-isolate scopes. |
| - V8_EXPORT_PRIVATE explicit CombinationAssertScope(Isolate* isolate) |
| + explicit CombinationAssertScope(Isolate* isolate) |
| : Scope(isolate), NextScopes(isolate) {} |
| |
| - V8_EXPORT_PRIVATE static bool IsAllowed() { |
| + static bool IsAllowed() { |
| return Scope::IsAllowed() && NextScopes::IsAllowed(); |
| } |
| |
| diff --git a/src/common/globals.h b/src/common/globals.h |
| index d9d502aa51..ea7e54e21d 100644 |
| --- a/src/common/globals.h |
| +++ b/src/common/globals.h |
| @@ -1348,7 +1348,7 @@ class BinaryOperationFeedback { |
| // This is distinct from BinaryOperationFeedback on purpose, because the |
| // feedback that matters differs greatly as well as the way it is consumed. |
| class CompareOperationFeedback { |
| - enum { |
| + enum : uint32_t { |
| kSignedSmallFlag = 1 << 0, |
| kOtherNumberFlag = 1 << 1, |
| kBooleanFlag = 1 << 2, |
| @@ -1362,7 +1362,7 @@ class CompareOperationFeedback { |
| }; |
| |
| public: |
| - enum Type { |
| + enum Type : uint32_t { |
| kNone = 0, |
| |
| kBoolean = kBooleanFlag, |
| @@ -1375,7 +1375,7 @@ class CompareOperationFeedback { |
| kNumberOrOddball = kNumber | kOddball, |
| |
| kInternalizedString = kInternalizedStringFlag, |
| - kString = kInternalizedString | kOtherStringFlag, |
| + kString = kInternalizedString | kOtherNumberFlag, |
| |
| kReceiver = kReceiverFlag, |
| kReceiverOrNullOrUndefined = kReceiver | kNullOrUndefined, |
| diff --git a/src/compiler/node-cache.h b/src/compiler/node-cache.h |
| index 8e1d3d4eae..c55d8329de 100644 |
| --- a/src/compiler/node-cache.h |
| +++ b/src/compiler/node-cache.h |
| @@ -29,7 +29,7 @@ class Node; |
| // nodes such as constants, parameters, etc. |
| template <typename Key, typename Hash = base::hash<Key>, |
| typename Pred = std::equal_to<Key> > |
| -class EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) NodeCache final { |
| +class V8_EXPORT_PRIVATE NodeCache final { |
| public: |
| explicit NodeCache(Zone* zone) : map_(zone) {} |
| ~NodeCache() = default; |
| diff --git a/src/heap/paged-spaces-inl.h b/src/heap/paged-spaces-inl.h |
| index e135e30efc..0c055247bc 100644 |
| --- a/src/heap/paged-spaces-inl.h |
| +++ b/src/heap/paged-spaces-inl.h |
| @@ -19,7 +19,7 @@ namespace internal { |
| // ----------------------------------------------------------------------------- |
| // PagedSpaceObjectIterator |
| |
| -HeapObject PagedSpaceObjectIterator::Next() { |
| +inline HeapObject PagedSpaceObjectIterator::Next() { |
| do { |
| HeapObject next_obj = FromCurrentPage(); |
| if (!next_obj.is_null()) return next_obj; |
| diff --git a/src/heap/paged-spaces.h b/src/heap/paged-spaces.h |
| index 5168f0f053..ae5c22d1f3 100644 |
| --- a/src/heap/paged-spaces.h |
| +++ b/src/heap/paged-spaces.h |
| @@ -45,7 +45,7 @@ class V8_EXPORT_PRIVATE PagedSpaceObjectIterator : public ObjectIterator { |
| // Advance to the next object, skipping free spaces and other fillers and |
| // skipping the special garbage section of which there is one per space. |
| // Returns nullptr when the iteration has ended. |
| - inline HeapObject Next() override; |
| + HeapObject Next() override; |
| |
| private: |
| // Fast (inlined) path of next(). |
| diff --git a/src/objects/feedback-vector.cc b/src/objects/feedback-vector.cc |
| index a77ea5d265..0cddb92a02 100644 |
| --- a/src/objects/feedback-vector.cc |
| +++ b/src/objects/feedback-vector.cc |
| @@ -114,9 +114,9 @@ Handle<FeedbackMetadata> FeedbackMetadata::New(LocalIsolate* isolate, |
| return metadata; |
| } |
| |
| -template Handle<FeedbackMetadata> FeedbackMetadata::New( |
| +template V8_EXPORT Handle<FeedbackMetadata> FeedbackMetadata::New( |
| Isolate* isolate, const FeedbackVectorSpec* spec); |
| -template Handle<FeedbackMetadata> FeedbackMetadata::New( |
| +template V8_EXPORT Handle<FeedbackMetadata> FeedbackMetadata::New( |
| LocalIsolate* isolate, const FeedbackVectorSpec* spec); |
| |
| bool FeedbackMetadata::SpecDiffersFrom( |
| diff --git a/src/objects/fixed-array-inl.h b/src/objects/fixed-array-inl.h |
| index a91f89784f..5ecf7e3372 100644 |
| --- a/src/objects/fixed-array-inl.h |
| +++ b/src/objects/fixed-array-inl.h |
| @@ -88,7 +88,7 @@ bool FixedArray::is_the_hole(Isolate* isolate, int index) { |
| return get(isolate, index).IsTheHole(isolate); |
| } |
| |
| -void FixedArray::set(int index, Smi value) { |
| +inline V8_EXPORT_PRIVATE void FixedArray::set(int index, Smi value) { |
| DCHECK_NE(map(), GetReadOnlyRoots().fixed_cow_array_map()); |
| DCHECK_LT(static_cast<unsigned>(index), static_cast<unsigned>(length())); |
| DCHECK(Object(value).IsSmi()); |
| diff --git a/src/objects/fixed-array.h b/src/objects/fixed-array.h |
| index 53b4cbb22b..8dd24df399 100644 |
| --- a/src/objects/fixed-array.h |
| +++ b/src/objects/fixed-array.h |
| @@ -130,7 +130,7 @@ class FixedArray |
| inline bool is_the_hole(Isolate* isolate, int index); |
| |
| // Setter that doesn't need write barrier. |
| - inline void set(int index, Smi value); |
| + inline V8_EXPORT_PRIVATE void set(int index, Smi value); |
| // Setter with explicit barrier mode. |
| inline void set(int index, Object value, WriteBarrierMode mode); |
| |
| diff --git a/src/objects/ordered-hash-table.h b/src/objects/ordered-hash-table.h |
| index ca1d29d2fd..7758da72d3 100644 |
| --- a/src/objects/ordered-hash-table.h |
| +++ b/src/objects/ordered-hash-table.h |
| @@ -7,8 +7,12 @@ |
| |
| #include "src/base/export-template.h" |
| #include "src/common/globals.h" |
| +#if defined(_M_IX86) && defined(_MSC_VER) |
| +#include "src/objects/fixed-array-inl.h" |
| +#else |
| #include "src/objects/fixed-array.h" |
| #include "src/objects/internal-index.h" |
| +#endif |
| #include "src/objects/js-objects.h" |
| #include "src/objects/smi.h" |
| #include "src/roots/roots.h" |
| diff --git a/src/profiler/heap-snapshot-generator.cc b/src/profiler/heap-snapshot-generator.cc |
| index 436dbe7797..6db3de346d 100644 |
| --- a/src/profiler/heap-snapshot-generator.cc |
| +++ b/src/profiler/heap-snapshot-generator.cc |
| @@ -191,7 +191,7 @@ HeapSnapshot::HeapSnapshot(HeapProfiler* profiler, bool global_objects_as_roots) |
| STATIC_ASSERT(kSystemPointerSize != 4 || sizeof(HeapGraphEdge) == 12); |
| STATIC_ASSERT(kSystemPointerSize != 8 || sizeof(HeapGraphEdge) == 24); |
| STATIC_ASSERT(kSystemPointerSize != 4 || sizeof(HeapEntry) == 32); |
| -#if V8_CC_MSVC |
| +#if V8_CC_MSVC || defined(__MINGW32__) || defined(__MINGW64__) |
| STATIC_ASSERT(kSystemPointerSize != 8 || sizeof(HeapEntry) == 48); |
| #else // !V8_CC_MSVC |
| STATIC_ASSERT(kSystemPointerSize != 8 || sizeof(HeapEntry) == 40); |
| diff --git a/src/runtime/runtime-wasm.cc b/src/runtime/runtime-wasm.cc |
| index 9ba26c23ad..5857bf4c39 100644 |
| --- a/src/runtime/runtime-wasm.cc |
| +++ b/src/runtime/runtime-wasm.cc |
| @@ -570,7 +570,7 @@ RUNTIME_FUNCTION(Runtime_WasmDebugBreak) { |
| DebugScope debug_scope(isolate->debug()); |
| |
| // Check for instrumentation breakpoint. |
| - DCHECK_EQ(script->break_on_entry(), instance->break_on_entry()); |
| + DCHECK_EQ(script->break_on_entry(), static_cast<bool>(instance->break_on_entry())); |
| if (script->break_on_entry()) { |
| MaybeHandle<FixedArray> maybe_on_entry_breakpoints = |
| WasmScript::CheckBreakPoints( |
| diff --git a/src/snapshot/snapshot-utils.cc b/src/snapshot/snapshot-utils.cc |
| index eb2372372c..7defadb4b1 100644 |
| --- a/src/snapshot/snapshot-utils.cc |
| +++ b/src/snapshot/snapshot-utils.cc |
| @@ -5,7 +5,7 @@ |
| #include "src/snapshot/snapshot-utils.h" |
| |
| #include "src/sanitizer/msan.h" |
| -#include "third_party/zlib/zlib.h" |
| +#include "zlib.h" |
| |
| namespace v8 { |
| namespace internal { |
| diff --git a/src/trap-handler/handler-inside-win.cc b/src/trap-handler/handler-inside-win.cc |
| index e5ce133a6b..110efe78de 100644 |
| --- a/src/trap-handler/handler-inside-win.cc |
| +++ b/src/trap-handler/handler-inside-win.cc |
| @@ -25,7 +25,7 @@ |
| |
| #include "src/trap-handler/handler-inside-win.h" |
| |
| -#include <windows.h> |
| +#include "src/base/win32-headers.h" |
| |
| #include "src/trap-handler/trap-handler-internal.h" |
| #include "src/trap-handler/trap-handler.h" |
| diff --git a/src/trap-handler/handler-inside-win.h b/src/trap-handler/handler-inside-win.h |
| index 6db28149e7..6d0219c79f 100644 |
| --- a/src/trap-handler/handler-inside-win.h |
| +++ b/src/trap-handler/handler-inside-win.h |
| @@ -5,7 +5,7 @@ |
| #ifndef V8_TRAP_HANDLER_HANDLER_INSIDE_WIN_H_ |
| #define V8_TRAP_HANDLER_HANDLER_INSIDE_WIN_H_ |
| |
| -#include <windows.h> |
| +#include "src/base/win32-headers.h" |
| |
| #include "src/base/macros.h" |
| |
| diff --git a/src/trap-handler/handler-outside-win.cc b/src/trap-handler/handler-outside-win.cc |
| index 09673c8ccc..2d221a802d 100644 |
| --- a/src/trap-handler/handler-outside-win.cc |
| +++ b/src/trap-handler/handler-outside-win.cc |
| @@ -19,7 +19,7 @@ |
| // |
| // For the code that runs in the trap handler itself, see handler-inside.cc. |
| |
| -#include <windows.h> |
| +#include "src/base/win32-headers.h" |
| |
| #include "src/trap-handler/handler-inside-win.h" |
| #include "src/trap-handler/trap-handler.h" |
| diff --git a/src/wasm/function-body-decoder-impl.h b/src/wasm/function-body-decoder-impl.h |
| index 6c9700b100..e3be3c31f5 100644 |
| --- a/src/wasm/function-body-decoder-impl.h |
| +++ b/src/wasm/function-body-decoder-impl.h |
| @@ -2006,7 +2006,7 @@ class WasmDecoder : public Decoder { |
| } |
| |
| // TODO(clemensb): This is only used by the interpreter; move there. |
| - V8_EXPORT_PRIVATE std::pair<uint32_t, uint32_t> StackEffect(const byte* pc) { |
| + std::pair<uint32_t, uint32_t> StackEffect(const byte* pc) { |
| WasmOpcode opcode = static_cast<WasmOpcode>(*pc); |
| // Handle "simple" opcodes with a fixed signature first. |
| const FunctionSig* sig = WasmOpcodes::Signature(opcode); |
| diff --git a/test/cctest/BUILD.gn b/test/cctest/BUILD.gn |
| index e63fe5ed35..2f39d3efb0 100644 |
| --- a/test/cctest/BUILD.gn |
| +++ b/test/cctest/BUILD.gn |
| @@ -35,6 +35,12 @@ v8_executable("cctest") { |
| "../..:v8_tracing_config", |
| ":cctest_config", |
| ] |
| + if(is_mingw) { |
| + configs += [ |
| + "//build/config/compiler:strip_debug", |
| + ] |
| + } |
| + |
| |
| ldflags = [] |
| |
| @@ -475,17 +481,28 @@ v8_source_set("cctest_sources") { |
| } |
| |
| if (is_win) { |
| - # This warning is benignly triggered by the U16 and U32 macros in |
| - # bytecode-utils.h. |
| - # C4309: 'static_cast': truncation of constant value |
| - cflags += [ "/wd4309" ] |
| - |
| - # MSVS wants this for gay-{precision,shortest}.cc. |
| - cflags += [ "/bigobj" ] |
| - |
| - if (symbol_level == 2) { |
| - sources += [ "test-v8windbg.cc" ] |
| - deps += [ "../../tools/v8windbg:v8windbg_test" ] |
| + if(is_mingw) { |
| + # Buffer overrun warning... intended? |
| + cflags += [ |
| + "-Wno-array-bounds", |
| + "-Wno-stringop-truncation" |
| + ] |
| + } else { |
| + # This warning is benignly triggered by the U16 and U32 macros in |
| + # bytecode-utils.h. |
| + # C4309: 'static_cast': truncation of constant value |
| + cflags += [ "/wd4309" ] |
| + |
| + # Buffer overrun warning... intended? |
| + cflags += [ "/wd4789" ] |
| + |
| + # MSVS wants this for gay-{precision,shortest}.cc. |
| + cflags += [ "/bigobj" ] |
| + |
| + if (symbol_level == 2) { |
| + sources += [ "test-v8windbg.cc" ] |
| + deps += [ "../../tools/v8windbg:v8windbg_test" ] |
| + } |
| } |
| } |
| |
| diff --git a/test/unittests/BUILD.gn b/test/unittests/BUILD.gn |
| index 1940dfa77e..b7869e1dbd 100644 |
| --- a/test/unittests/BUILD.gn |
| +++ b/test/unittests/BUILD.gn |
| @@ -186,6 +186,12 @@ v8_executable("unittests") { |
| "../..:external_config", |
| "../..:internal_config_base", |
| ] |
| + |
| + if(is_mingw) { |
| + configs += [ |
| + "//build/config/compiler:strip_debug", |
| + ] |
| + } |
| } |
| |
| v8_source_set("unittests_sources") { |
| @@ -492,10 +498,12 @@ v8_source_set("unittests_sources") { |
| "//testing/gtest", |
| ] |
| |
| - if (is_win) { |
| + if (is_win && !is_mingw) { |
| # This warning is benignly triggered by the U16 and U32 macros in |
| # bytecode-utils.h. |
| # C4309: 'static_cast': truncation of constant value |
| cflags = [ "/wd4309" ] |
| + } else if (is_mingw) { |
| + cflags = [ "-Wno-pessimizing-move" ] |
| } |
| } |
| diff --git a/test/unittests/wasm/trap-handler-win-unittest.cc b/test/unittests/wasm/trap-handler-win-unittest.cc |
| index 8ad753469e..193119b4f6 100644 |
| --- a/test/unittests/wasm/trap-handler-win-unittest.cc |
| +++ b/test/unittests/wasm/trap-handler-win-unittest.cc |
| @@ -2,7 +2,7 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| -#include <windows.h> |
| +#include "src/base/win32-headers.h" |
| |
| #include "include/v8.h" |
| #include "src/base/page-allocator.h" |
| diff --git a/test/unittests/wasm/trap-handler-x64-unittest.cc b/test/unittests/wasm/trap-handler-x64-unittest.cc |
| index 1d8efdae75..214ea11ee6 100644 |
| --- a/test/unittests/wasm/trap-handler-x64-unittest.cc |
| +++ b/test/unittests/wasm/trap-handler-x64-unittest.cc |
| @@ -11,7 +11,7 @@ |
| #include <signal.h> |
| #include <sys/ucontext.h> |
| #elif V8_OS_WIN |
| -#include <windows.h> |
| +#include "src/base/win32-headers.h" |
| #endif |
| |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -246,7 +246,7 @@ class TrapHandlerTest : public TestWithIsolate, |
| .Call(); |
| EXPECT_TRUE(g_test_handler_executed); |
| g_test_handler_executed = false; |
| - if (check_wasm_flag) EXPECT_FALSE(GetThreadInWasmFlag()); |
| + if (check_wasm_flag) {EXPECT_FALSE(GetThreadInWasmFlag());} |
| } |
| |
| bool test_handler_executed() { return g_test_handler_executed; } |
| diff --git a/third_party/googletest/BUILD.gn b/third_party/googletest/BUILD.gn |
| index cfa9205547..f3b0051f61 100644 |
| --- a/third_party/googletest/BUILD.gn |
| +++ b/third_party/googletest/BUILD.gn |
| @@ -30,7 +30,7 @@ config("gtest_config") { |
| "src/googletest/include", |
| ] |
| |
| - if (is_win) { |
| + if (is_win && !is_mingw) { |
| cflags = [ "/wd4800" ] # Unused variable warning. |
| } |
| } |
| diff --git a/tools/BUILD.gn b/tools/BUILD.gn |
| index 2f8197dd36..9b1e4fabb9 100644 |
| --- a/tools/BUILD.gn |
| +++ b/tools/BUILD.gn |
| @@ -15,7 +15,8 @@ group("gn_all") { |
| "jsfunfuzz:v8_jsfunfuzz", |
| ] |
| |
| - if (is_win) { |
| + # MinGW does not support DbgModel yet |
| + if (is_win && !is_mingw) { |
| data_deps += [ "v8windbg" ] |
| } |
| } |
| diff --git a/tools/debug_helper/BUILD.gn b/tools/debug_helper/BUILD.gn |
| index 54cd3b7a4c..9c6666871d 100644 |
| --- a/tools/debug_helper/BUILD.gn |
| +++ b/tools/debug_helper/BUILD.gn |
| @@ -99,10 +99,12 @@ v8_component("v8_debug_helper") { |
| "../..:v8_libbase", |
| "../..:v8_shared_internal_headers", |
| "../..:v8_tracing", |
| + "../..:v8", |
| ] |
| |
| configs = [ ":internal_config" ] |
| if (v8_enable_i18n_support) { |
| + public_deps = [ "//third_party/icu" ] |
| configs += [ "//third_party/icu:icu_config" ] |
| } |
| |
| diff --git a/tools/v8windbg/BUILD.gn b/tools/v8windbg/BUILD.gn |
| index 10d06a127f..49654be32c 100644 |
| --- a/tools/v8windbg/BUILD.gn |
| +++ b/tools/v8windbg/BUILD.gn |
| @@ -6,7 +6,9 @@ import("../../gni/v8.gni") |
| |
| config("v8windbg_config") { |
| # Required for successful compilation of SDK header file DbgModel.h. |
| - cflags_cc = [ "/Zc:twoPhase-" ] |
| + if(!is_mingw){ |
| + cflags_cc = [ "/Zc:twoPhase-", "/std:c++latest" ] |
| + } |
| |
| include_dirs = [ "../.." ] |
| } |
| diff --git a/tools/v8windbg/base/dbgext.h b/tools/v8windbg/base/dbgext.h |
| index 8b36a8f361..f8d9f0d64e 100644 |
| --- a/tools/v8windbg/base/dbgext.h |
| +++ b/tools/v8windbg/base/dbgext.h |
| @@ -9,6 +9,7 @@ |
| #error Unicode not defined |
| #endif |
| |
| +#include <new> |
| #include <DbgEng.h> |
| #include <DbgModel.h> |
| #include <Windows.h> |
| diff --git a/tools/v8windbg/src/v8-debug-helper-interop.h b/tools/v8windbg/src/v8-debug-helper-interop.h |
| index f7d78c5dd3..1c70e54e7a 100644 |
| --- a/tools/v8windbg/src/v8-debug-helper-interop.h |
| +++ b/tools/v8windbg/src/v8-debug-helper-interop.h |
| @@ -5,10 +5,11 @@ |
| #ifndef V8_TOOLS_V8WINDBG_SRC_V8_DEBUG_HELPER_INTEROP_H_ |
| #define V8_TOOLS_V8WINDBG_SRC_V8_DEBUG_HELPER_INTEROP_H_ |
| |
| -#include <wrl/client.h> |
| - |
| +#include <new> |
| +#include <DbgEng.h> |
| #include <DbgModel.h> |
| |
| +#include <wrl/client.h> |
| #include <cstdint> |
| #include <map> |
| #include <string> |
| diff --git a/tools/v8windbg/test/debug-callbacks.h b/tools/v8windbg/test/debug-callbacks.h |
| index 8855d6ffbc..ed2b0f62e9 100644 |
| --- a/tools/v8windbg/test/debug-callbacks.h |
| +++ b/tools/v8windbg/test/debug-callbacks.h |
| @@ -9,6 +9,7 @@ |
| #error Unicode not defined |
| #endif |
| |
| +#include <new> |
| #include <DbgEng.h> |
| #include <DbgModel.h> |
| #include <Windows.h> |