Unverified Commit 91faf772 authored by Martin Weinelt's avatar Martin Weinelt Committed by GitHub
Browse files

buildMozillaMach: Add RELRHACK_LINKER patch (#401323)

parents 9b8ba51f 7bb315a0
Loading
Loading
Loading
Loading
+57 −0
Original line number Diff line number Diff line
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
+4 −0
Original line number Diff line number Diff line
@@ -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;