diff --git a/patches/common/v8/.patches b/patches/common/v8/.patches index db8b2021381ee..13d69fdada3c6 100644 --- a/patches/common/v8/.patches +++ b/patches/common/v8/.patches @@ -5,3 +5,4 @@ deps_provide_more_v8_backwards_compatibility.patch dcheck.patch export_symbols_needed_for_windows_build.patch workaround_an_undefined_symbol_error.patch +do_not_export_private_v8_symbols_on_windows.patch diff --git a/patches/common/v8/do_not_export_private_v8_symbols_on_windows.patch b/patches/common/v8/do_not_export_private_v8_symbols_on_windows.patch new file mode 100644 index 0000000000000..8bbde8c8788f3 --- /dev/null +++ b/patches/common/v8/do_not_export_private_v8_symbols_on_windows.patch @@ -0,0 +1,52 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Tomas Rycl +Date: Mon, 13 May 2019 15:48:48 +0200 +Subject: Do not export private V8 symbols on Windows + +This change stops private V8 symbols and internal crt methods being exported. +It fixes an issue where native node modules can import +incorrect CRT methods and crash on Windows. +It also reduces size of node.lib by 75%. + +This patch can be safely removed if, when it is removed, `node.lib` does not +contain any standard C++ library exports (e.g. `std::ostringstream`). + +diff --git a/BUILD.gn b/BUILD.gn +index 1acc7006545bd4ff6112b444758bde4c16d0c3e5..748d700cead149f5cdeebcfe11d07516db3d6a86 100644 +--- a/BUILD.gn ++++ b/BUILD.gn +@@ -269,6 +269,10 @@ config("internal_config") { + ":v8_header_features", + ] + ++ if (!is_component_build && is_electron_build) { ++ defines += [ "HIDE_PRIVATE_SYMBOLS" ] ++ } ++ + if (is_component_build || is_electron_build) { + defines += [ "BUILDING_V8_SHARED" ] + } +diff --git a/src/base/macros.h b/src/base/macros.h +index ad70e9820ddb4a63639ca7738c1836cb87766db5..d40be9b57294583f74594d88d9b7d7b937b2db3c 100644 +--- a/src/base/macros.h ++++ b/src/base/macros.h +@@ -414,13 +414,17 @@ bool is_inbounds(float_t v) { + #ifdef V8_OS_WIN + + // Setup for Windows shared library export. ++#if defined(HIDE_PRIVATE_SYMBOLS) ++#define V8_EXPORT_PRIVATE ++#else //if !defined(HIDE_PRIVATE_SYMBOLS) + #ifdef BUILDING_V8_SHARED + #define V8_EXPORT_PRIVATE __declspec(dllexport) + #elif USING_V8_SHARED + #define V8_EXPORT_PRIVATE __declspec(dllimport) +-#else ++#else //!(BUILDING_V8_SHARED || USING_V8_SHARED) + #define V8_EXPORT_PRIVATE +-#endif // BUILDING_V8_SHARED ++#endif ++#endif + + #else // V8_OS_WIN +