aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorthegeorg <thegeorg@yandex-team.ru>2022-05-16 16:18:40 +0300
committerthegeorg <thegeorg@yandex-team.ru>2022-05-16 16:18:40 +0300
commit5e43bd290eea0c0799394c484e7c77ccd452eba8 (patch)
treedf8484d8a419ee4c3a438eea0ffad9a725bd869e
parentca04e360f54a3601b44d9227ad5898a14bc69b73 (diff)
downloadydb-5e43bd290eea0c0799394c484e7c77ccd452eba8.tar.gz
Use lld linker on Linux unless USE_LINKER_GOLD() is explicitly specified
* Drop heuristical switching to gold when compiling with gcc and musl * Drop `USE_LINKER_BFD()` and `USE_LINKER_LLD()` macros. * User can still request to `USE_LINKER_GOLD()`, as it is capable to workaround _relocation out of range_ problem in certain cases. ref:3c5181f8be6eb35067f5cfe14aad3e7d2a1748eb
-rw-r--r--build/conf/linkers/ld.conf6
-rw-r--r--build/ymake.core.conf16
-rwxr-xr-xbuild/ymake_conf.py18
3 files changed, 4 insertions, 36 deletions
diff --git a/build/conf/linkers/ld.conf b/build/conf/linkers/ld.conf
index ede939564b..90f548edbf 100644
--- a/build/conf/linkers/ld.conf
+++ b/build/conf/linkers/ld.conf
@@ -2,12 +2,6 @@ _LD_FLAGS_1=
_LD_FLAGS_2=
when ($MUSL == "yes") {
_LD_FLAGS_1=-Wl,--no-as-needed
- when ($GCC == "yes") {
- # MUSL_BFD: musl build uses --no-dynamic-linker linker flag
- # which gold doesn't know about. And we can only specify linker
- # type, not it's path as we do for Clang through linker selector.
- _LD_FLAGS_2=-fuse-ld=bfd
- }
}
elsewhen ($OS_LINUX == "yes") {
_LD_FLAGS_1=-ldl -lrt -Wl,--no-as-needed
diff --git a/build/ymake.core.conf b/build/ymake.core.conf
index fd28f422bf..de54cf09ed 100644
--- a/build/ymake.core.conf
+++ b/build/ymake.core.conf
@@ -1435,10 +1435,10 @@ module _BASE_UNIT: _BARE_UNIT {
}
_LINKER_ID=
-# GCC does not support -fuse-ld with an executable path, only
-# -fuse-ld=bfd or -fuse-ld=gold (or -fuse-ld=lld in later versions).
+# GCC does not support -fuse-ld with an executable path,
+# only -fuse-ld=gold or -fuse-ld=lld.
when ($_LINKER_ID != "" && $_DEFAULT_LINKER_ID != "" && $CLANG == "yes" && $NEED_PLATFORM_PEERDIRS == "yes") {
- when ($_LINKER_ID in [ "bfd", "gold", "lld" ]) {
+ when ($_LINKER_ID in [ "gold", "lld" ]) {
PEERDIR+=build/platform/${_LINKER_ID}
}
}
@@ -1451,21 +1451,11 @@ macro _USE_LINKER() {
_USE_LINKER_IMPL($_DEFAULT_LINKER_ID)
}
-### @usage: USE_LINKER_BFD()
-### Use bfd linker for a program. This doesn't work in libraries
-macro USE_LINKER_BFD() {
- _USE_LINKER_IMPL(bfd)
-}
### @usage: USE_LINKER_GOLD()
### Use gold linker for a program. This doesn't work in libraries
macro USE_LINKER_GOLD() {
_USE_LINKER_IMPL(gold)
}
-### @usage: USE_LINKER_LLD()
-### Use lld linker for a program. This doesn't work in libraries
-macro USE_LINKER_LLD() {
- _USE_LINKER_IMPL(lld)
-}
COMMON_LINK_SETTINGS=
LINK_ADDITIONAL_SECTIONS=
diff --git a/build/ymake_conf.py b/build/ymake_conf.py
index 173eab7ad0..fd06591d8e 100755
--- a/build/ymake_conf.py
+++ b/build/ymake_conf.py
@@ -1779,18 +1779,7 @@ class Linker(object):
return Linker.LLD
elif self.build.target.is_linux:
- # DEVTOOLS-6782: LLD8 fails to link LTO builds with in-memory ELF objects larger than 4 GiB
- blacklist_lld = is_positive('CLANG7') and is_positive('USE_LTO') and not is_positive('MUSL')
- if self.tc.is_clang and not blacklist_lld:
- return Linker.LLD
- else:
- # GCC et al.
-
- if self.tc.is_gcc and is_positive('MUSL'):
- # See MUSL_BFD comment below
- return Linker.BFD
-
- return Linker.GOLD
+ return Linker.LLD
# There is no linker choice on Darwin (ld64) or Windows (link.exe)
return None
@@ -1882,11 +1871,6 @@ class LD(Linker):
if self.musl.value:
self.ld_flags.extend(['-Wl,--no-as-needed'])
- if self.tc.is_gcc:
- # MUSL_BFD: musl build uses --no-dynamic-linker linker flag
- # which gold doesn't know about. And we can only specify linker
- # type, not it's path as we do for Clang through linker selector.
- self.ld_flags.append('-fuse-ld=bfd')
elif target.is_linux:
self.ld_flags.extend(['-ldl', '-lrt', '-Wl,--no-as-needed'])
if self.tc.is_gcc: