From 3850c23ba5e78d26c75f048bd231c3ceef71a2b0 Mon Sep 17 00:00:00 2001 From: Tomas Rycl Date: Mon, 13 May 2019 15:56:55 +0200 Subject: [PATCH 1/6] fix: do not export v8 private symbols on Windows --- patches/common/v8/.patches | 1 + ...export_private_v8_symbols_on_windows.patch | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 patches/common/v8/do_not_export_private_v8_symbols_on_windows.patch diff --git a/patches/common/v8/.patches b/patches/common/v8/.patches index daf9f50f89618..4b218df8b428a 100644 --- a/patches/common/v8/.patches +++ b/patches/common/v8/.patches @@ -6,3 +6,4 @@ dcheck.patch revert_cctest_add_v8_export_private_to_arm_arm64_ports.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..e058a0a4b5bb6 --- /dev/null +++ b/patches/common/v8/do_not_export_private_v8_symbols_on_windows.patch @@ -0,0 +1,22 @@ +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 + + +diff --git a/src/base/macros.h b/src/base/macros.h +index 1276805182084bda3b72b30afb695d9c0648ad34..7be3c3370755dfe4deaffcb0598cc4d7d7cda0ba 100644 +--- a/src/base/macros.h ++++ b/src/base/macros.h +@@ -416,9 +416,9 @@ bool is_inbounds(float_t v) { + + // Setup for Windows shared library export. + #ifdef BUILDING_V8_SHARED +-#define V8_EXPORT_PRIVATE __declspec(dllexport) ++#define V8_EXPORT_PRIVATE // __declspec(dllexport) + #elif USING_V8_SHARED +-#define V8_EXPORT_PRIVATE __declspec(dllimport) ++#define V8_EXPORT_PRIVATE // __declspec(dllimport) + #else + #define V8_EXPORT_PRIVATE + #endif // BUILDING_V8_SHARED From 77788447132c92a0866748b51b52dc1942629e2c Mon Sep 17 00:00:00 2001 From: Tomas Rycl Date: Tue, 21 May 2019 15:05:59 +0200 Subject: [PATCH 2/6] Using safer comment which will not affect rest of the line --- .../v8/do_not_export_private_v8_symbols_on_windows.patch | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 index e058a0a4b5bb6..527da40be2a2a 100644 --- 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 @@ -9,14 +9,14 @@ index 1276805182084bda3b72b30afb695d9c0648ad34..7be3c3370755dfe4deaffcb0598cc4d7 --- a/src/base/macros.h +++ b/src/base/macros.h @@ -416,9 +416,9 @@ bool is_inbounds(float_t v) { - + // Setup for Windows shared library export. #ifdef BUILDING_V8_SHARED -#define V8_EXPORT_PRIVATE __declspec(dllexport) -+#define V8_EXPORT_PRIVATE // __declspec(dllexport) ++#define V8_EXPORT_PRIVATE /* __declspec(dllexport) */ #elif USING_V8_SHARED -#define V8_EXPORT_PRIVATE __declspec(dllimport) -+#define V8_EXPORT_PRIVATE // __declspec(dllimport) ++#define V8_EXPORT_PRIVATE /* __declspec(dllimport) */ #else #define V8_EXPORT_PRIVATE #endif // BUILDING_V8_SHARED From f9398b6d3d94db1f8ceab8fddd1e743b75418bc9 Mon Sep 17 00:00:00 2001 From: Tomas Rycl Date: Tue, 21 May 2019 15:36:57 +0200 Subject: [PATCH 3/6] Better patch description --- .../v8/do_not_export_private_v8_symbols_on_windows.patch | 4 ++++ 1 file changed, 4 insertions(+) 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 index 527da40be2a2a..5b6951feb81bc 100644 --- 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 @@ -3,6 +3,10 @@ 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%. diff --git a/src/base/macros.h b/src/base/macros.h index 1276805182084bda3b72b30afb695d9c0648ad34..7be3c3370755dfe4deaffcb0598cc4d7d7cda0ba 100644 From 777a85587f434116fa69be2c51dc7d48eec4c64a Mon Sep 17 00:00:00 2001 From: Tomas Rycl Date: Thu, 30 May 2019 19:30:49 +0200 Subject: [PATCH 4/6] Patch modified so component build is not affected --- ...export_private_v8_symbols_on_windows.patch | 48 +++++++++++++++---- 1 file changed, 40 insertions(+), 8 deletions(-) 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 index 5b6951feb81bc..732e3d6468b91 100644 --- 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 @@ -8,19 +8,51 @@ 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%. +Patch-Filename: do_not_export_private_v8_symbols_on_windows.patch +--- + BUILD.gn | 4 ++++ + src/base/macros.h | 8 ++++++-- + 2 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/BUILD.gn b/BUILD.gn +index 315c7079ed..0f668eae73 100644 +--- a/BUILD.gn ++++ b/BUILD.gn +@@ -273,6 +273,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 1276805182084bda3b72b30afb695d9c0648ad34..7be3c3370755dfe4deaffcb0598cc4d7d7cda0ba 100644 --- a/src/base/macros.h +++ b/src/base/macros.h -@@ -416,9 +416,9 @@ bool is_inbounds(float_t v) { - +@@ -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) -+#define V8_EXPORT_PRIVATE /* __declspec(dllexport) */ + #define V8_EXPORT_PRIVATE __declspec(dllexport) #elif USING_V8_SHARED --#define V8_EXPORT_PRIVATE __declspec(dllimport) -+#define V8_EXPORT_PRIVATE /* __declspec(dllimport) */ - #else + #define V8_EXPORT_PRIVATE __declspec(dllimport) +-#else ++#else //!(BUILDING_V8_SHARED || USING_V8_SHARED) #define V8_EXPORT_PRIVATE - #endif // BUILDING_V8_SHARED +-#endif // BUILDING_V8_SHARED ++#endif ++#endif + + #else // V8_OS_WIN + +-- +2.21.0 + From 541ead3f74531028a6d65165491bf44f97dcf850 Mon Sep 17 00:00:00 2001 From: Tomas Rycl Date: Thu, 30 May 2019 22:13:59 +0200 Subject: [PATCH 5/6] Patch properly exported --- ...o_not_export_private_v8_symbols_on_windows.patch | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) 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 index 732e3d6468b91..09b5331c26e80 100644 --- 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 @@ -8,14 +8,8 @@ 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%. -Patch-Filename: do_not_export_private_v8_symbols_on_windows.patch ---- - BUILD.gn | 4 ++++ - src/base/macros.h | 8 ++++++-- - 2 files changed, 10 insertions(+), 2 deletions(-) - diff --git a/BUILD.gn b/BUILD.gn -index 315c7079ed..0f668eae73 100644 +index 315c7079ed488461a456aff799b4d1f17b896150..0f668eae73686c02a7133df31a79e8a0a7b77707 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -273,6 +273,10 @@ config("internal_config") { @@ -30,7 +24,7 @@ index 315c7079ed..0f668eae73 100644 defines += [ "BUILDING_V8_SHARED" ] } diff --git a/src/base/macros.h b/src/base/macros.h -index 1276805182084bda3b72b30afb695d9c0648ad34..7be3c3370755dfe4deaffcb0598cc4d7d7cda0ba 100644 +index ad70e9820ddb4a63639ca7738c1836cb87766db5..d40be9b57294583f74594d88d9b7d7b937b2db3c 100644 --- a/src/base/macros.h +++ b/src/base/macros.h @@ -414,13 +414,17 @@ bool is_inbounds(float_t v) { @@ -53,6 +47,3 @@ index 1276805182084bda3b72b30afb695d9c0648ad34..7be3c3370755dfe4deaffcb0598cc4d7 #else // V8_OS_WIN --- -2.21.0 - From f8d98beaadb0db11de725238b5cf200299827f68 Mon Sep 17 00:00:00 2001 From: Tomas Rycl Date: Thu, 30 May 2019 22:16:35 +0200 Subject: [PATCH 6/6] Added comment about removing patch --- .../do_not_export_private_v8_symbols_on_windows.patch | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) 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 index 09b5331c26e80..e8212ebb02f47 100644 --- 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 @@ -8,6 +8,9 @@ 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 315c7079ed488461a456aff799b4d1f17b896150..0f668eae73686c02a7133df31a79e8a0a7b77707 100644 --- a/BUILD.gn @@ -15,7 +18,7 @@ index 315c7079ed488461a456aff799b4d1f17b896150..0f668eae73686c02a7133df31a79e8a0 @@ -273,6 +273,10 @@ config("internal_config") { ":v8_header_features", ] - + + if (!is_component_build && is_electron_build) { + defines += [ "HIDE_PRIVATE_SYMBOLS" ] + } @@ -29,7 +32,7 @@ index ad70e9820ddb4a63639ca7738c1836cb87766db5..d40be9b57294583f74594d88d9b7d7b9 +++ 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 @@ -44,6 +47,6 @@ index ad70e9820ddb4a63639ca7738c1836cb87766db5..d40be9b57294583f74594d88d9b7d7b9 -#endif // BUILDING_V8_SHARED +#endif +#endif - + #else // V8_OS_WIN - +