buildMozillaMach: Add RELRHACK_LINKER patch (#401323)

This commit is contained in:
Martin Weinelt 2025-04-27 02:28:52 +02:00 committed by GitHub
commit 91faf77291
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 61 additions and 0 deletions

View file

@ -0,0 +1,57 @@
From 45d40b3eeb393051bd3a49feebcefe39dc6e4e93 Mon Sep 17 00:00:00 2001
From: Peter Collingbourne <pcc@google.com>
Date: Wed, 23 Apr 2025 21:13:38 -0700
Subject: [PATCH] build: fix RELRHACK_LINKER setting when linker name is target
triple prefixed
RELRHACK_LINKER is used as the name of a binary installed in a
directory specified with -B to override the linker. Both Clang and
GCC will only look for a binary named "ld" (or "ld.$fuse_ld_setting"
if -fuse-ld= is specified) in the -B directories, which means that
if the linker name does not follow this pattern, for example if it
is named $target_triple-ld", the relrhack linker will not be found,
the compiler will use the normal linker and the link will fail. To fix
this problem, use the correct pattern to name the relrhack executable.
---
toolkit/moz.configure | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/toolkit/moz.configure b/toolkit/moz.configure
index 6c47287a5b..1a9c368e5e 100644
--- a/toolkit/moz.configure
+++ b/toolkit/moz.configure
@@ -1843,23 +1843,23 @@ with only_when("--enable-compile-environment"):
use_relrhack = depends(which_elf_hack)(lambda x: x == "relr")
set_config("RELRHACK", True, when=use_relrhack)
- @depends(c_compiler, linker_ldflags, when=use_relrhack)
- def relrhack_real_linker(c_compiler, linker_ldflags):
+ @depends(linker_ldflags, when=use_relrhack)
+ def relrhack_linker(linker_ldflags):
ld = "ld"
for flag in linker_ldflags:
if flag.startswith("-fuse-ld="):
ld = "ld." + flag[len("-fuse-ld=") :]
+ return ld
+
+ set_config("RELRHACK_LINKER", relrhack_linker)
+
+ @depends(c_compiler, relrhack_linker, when=use_relrhack)
+ def relrhack_real_linker(c_compiler, ld):
ld = check_cmd_output(
c_compiler.compiler, f"--print-prog-name={ld}", *c_compiler.flags
)
return ld.rstrip()
- @depends(relrhack_real_linker, when=use_relrhack)
- def relrhack_linker(ld):
- return os.path.basename(ld)
-
- set_config("RELRHACK_LINKER", relrhack_linker)
-
std_filesystem = host_cxx_compiler.try_run(
header="#include <filesystem>",
body='auto foo = std::filesystem::absolute("");',
--
2.49.0.805.g082f7c87e0-goog

View file

@ -357,6 +357,10 @@ buildStdenv.mkDerivation {
# Fix for missing vector header on macOS
# https://bugzilla.mozilla.org/show_bug.cgi?id=1939405
./firefox-mac-missing-vector-header.patch
# https://bugzilla.mozilla.org/show_bug.cgi?id=1962497
# https://phabricator.services.mozilla.com/D246545
./build-fix-RELRHACK_LINKER-setting-when-linker-name-i.patch
]
++ extraPatches;