summaryrefslogtreecommitdiff
path: root/net-libs/nodejs/files/nodejs-16.0.0-v8_lto.patch
diff options
context:
space:
mode:
Diffstat (limited to 'net-libs/nodejs/files/nodejs-16.0.0-v8_lto.patch')
-rw-r--r--net-libs/nodejs/files/nodejs-16.0.0-v8_lto.patch39
1 files changed, 39 insertions, 0 deletions
diff --git a/net-libs/nodejs/files/nodejs-16.0.0-v8_lto.patch b/net-libs/nodejs/files/nodejs-16.0.0-v8_lto.patch
new file mode 100644
index 000000000000..a3e4acb02c3a
--- /dev/null
+++ b/net-libs/nodejs/files/nodejs-16.0.0-v8_lto.patch
@@ -0,0 +1,39 @@
+From ea694e2b138d2f991989e09fc0e964fec3587b5f Mon Sep 17 00:00:00 2001
+From: Jesse Chan <jc@linux.com>
+Date: Thu, 22 Apr 2021 19:41:09 +0800
+Subject: [PATCH] tools: disable LTO for "v8_cppgc_shared" target
+
+"PushAllRegistersAndIterateStack" is implemented in assembly and
+called from "stack.cc" via 'extern "C"'. [1]
+
+However, LTO does not work well with symbol usage from assembly. [2]
+
+This change workarounds the issue by disabling LTO for the target.
+
+With GCC 10 and "./configure --enable-lto", compilation succeeds
+after this change.
+
+[1] v8/v8@c10863153
+[2] https://gcc.gnu.org/wiki/LinkTimeOptimizationFAQ#Symbol_usage_from_assembly_language
+
+Refs: #35957
+Refs: #38335
+Signed-off-by: Jesse Chan <jc@linux.com>
+---
+ tools/v8_gypfiles/v8.gyp | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/tools/v8_gypfiles/v8.gyp b/tools/v8_gypfiles/v8.gyp
+index ccb5984f47d..377e12d1fdc 100644
+--- a/tools/v8_gypfiles/v8.gyp
++++ b/tools/v8_gypfiles/v8.gyp
+@@ -1378,6 +1378,9 @@
+ '<(V8_ROOT)/src/heap/base/worklist.h',
+ ],
+ 'conditions': [
++ ['enable_lto=="true"', {
++ 'cflags_cc': [ '-fno-lto' ],
++ }],
+ ['clang or OS!="win"', {
+ 'conditions': [
+ ['_toolset == "host" and host_arch == "x64" or _toolset == "target" and target_arch=="x64"', {