From bec959ef8b97b5a589775e554964cb14548c9895 Mon Sep 17 00:00:00 2001 From: Jesse Chan 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 PR-URL: https://github.com/nodejs/node/pull/38346 Refs: https://github.com/nodejs/node/issues/35957 Refs: https://github.com/nodejs/node/issues/38335 Reviewed-By: Khaidi Chu Reviewed-By: Richard Lau Reviewed-By: Joyee Cheung Reviewed-By: Rich Trott Reviewed-By: Jiawen Geng --- 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 ccb5984f47d0d8..377e12d1fdcfbd 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"', {