From 0d7acfac82a20fceb7aa91c61abc18b711edba28 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Fri, 2 Aug 2019 11:57:02 +0100 Subject: build: enable linux large pages LLVM lld linkage support The custom linker script is compatible with GNU ld only. As such, providin a new expliciting option to redirect to a different one. lld seems unable to migrate this large section w/o segfaulting so providing only the base address anchor for now. PR-URL: https://github.com/nodejs/node/pull/28938 Reviewed-By: Ben Noordhuis --- configure.py | 6 ++++++ node.gypi | 14 +++++++++++++- src/large_pages/ld.implicit.script.lld | 3 +++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/large_pages/ld.implicit.script.lld diff --git a/configure.py b/configure.py index 3d752f434b..beab9ceccc 100755 --- a/configure.py +++ b/configure.py @@ -401,6 +401,11 @@ parser.add_option('--use-largepages', help='build with Large Pages support. This feature is supported only on Linux kernel' + '>= 2.6.38 with Transparent Huge pages enabled and FreeBSD') +parser.add_option('--use-largepages-script-lld', + action='store_true', + dest='node_use_large_pages_script_lld', + help='link against the LLVM ld linker script. Implies -fuse-ld=lld in the linker flags') + intl_optgroup.add_option('--with-intl', action='store', dest='with_intl', @@ -1048,6 +1053,7 @@ def configure_node(o): raise Exception( 'Large pages need Linux kernel version >= 2.6.38') o['variables']['node_use_large_pages'] = b(options.node_use_large_pages) + o['variables']['node_use_large_pages_script_lld'] = b(options.node_use_large_pages_script_lld) if options.no_ifaddrs: o['defines'] += ['SUNOS_NO_IFADDRS'] diff --git a/node.gypi b/node.gypi index 5fd1d8e1d4..df10c97280 100644 --- a/node.gypi +++ b/node.gypi @@ -295,12 +295,24 @@ 'ldflags': [ '-Wl,-z,relro', '-Wl,-z,now' ] }], - [ 'OS=="linux" and target_arch=="x64" and node_use_large_pages=="true"', { + [ 'OS=="linux" and ' + 'target_arch=="x64" and ' + 'node_use_large_pages=="true" and ' + 'node_use_large_pages_script_lld=="false"', { 'ldflags': [ '-Wl,-T', '