From ecdc4353d0a758e3336c24d5d0a7b484d903344c Mon Sep 17 00:00:00 2001
From: Rodrigo Mesquita <rodrigo.m.mesquita@gmail.com>
Date: Mon, 29 May 2023 18:53:39 +0100
Subject: [PATCH] Stop configuring unused Ld command in `settings`

GHC has no direct dependence on the linker. Rather, we depend upon the C
compiler for linking and an object-merging program (which is typically
`ld`) for production of GHCi objects and merging of C stubs into final
object files.

Despite this, for historical reasons we still recorded information about
the linker into `settings`. Remove these entries from `settings`,
`hadrian/cfg/system.config`, as well as the `configure` logic
responsible for this information.

Closes #23566.
---
 configure.ac                       | 3 ---
 distrib/configure.ac.in            | 2 --
 ghc/Main.hs                        | 4 ++--
 hadrian/bindist/Makefile           | 2 --
 hadrian/bindist/config.mk.in       | 2 --
 hadrian/cfg/system.config.in       | 4 +---
 hadrian/src/Oracles/Setting.hs     | 4 ----
 hadrian/src/Rules/Generate.hs      | 2 --
 m4/fp_prog_ld_filelist.m4          | 2 +-
 m4/fp_prog_ld_flag.m4              | 2 +-
 m4/fp_prog_ld_is_gnu.m4            | 2 +-
 m4/fp_prog_ld_no_compact_unwind.m4 | 2 +-
 m4/fp_settings.m4                  | 6 ------
 13 files changed, 7 insertions(+), 30 deletions(-)

diff --git a/configure.ac b/configure.ac
index fa98092dd604..79a74ed45dee 100644
--- a/configure.ac
+++ b/configure.ac
@@ -482,9 +482,7 @@ FIND_LD([$target],[GccUseLdOpt])
 FIND_MERGE_OBJECTS()
 CONF_GCC_LINKER_OPTS_STAGE1="$CONF_GCC_LINKER_OPTS_STAGE1 $GccUseLdOpt"
 CONF_GCC_LINKER_OPTS_STAGE2="$CONF_GCC_LINKER_OPTS_STAGE2 $GccUseLdOpt"
-LdCmd="$LD"
 CFLAGS="$CFLAGS $GccUseLdOpt"
-AC_SUBST([LdCmd])
 
 FP_PROG_LD_IS_GNU
 FP_PROG_LD_NO_COMPACT_UNWIND
@@ -1246,7 +1244,6 @@ echo "\
    hs-cpp       : $HaskellCPPCmd
    hs-cpp-flags : $HaskellCPPArgs
    ar           : $ArCmd
-   ld           : $LdCmd
    nm           : $NmCmd
    objdump      : $ObjdumpCmd
    ranlib       : $RanlibCmd
diff --git a/distrib/configure.ac.in b/distrib/configure.ac.in
index 7546b4e8db6a..c6b7f18e1aae 100644
--- a/distrib/configure.ac.in
+++ b/distrib/configure.ac.in
@@ -125,9 +125,7 @@ FIND_LD([$target],[GccUseLdOpt])
 FIND_MERGE_OBJECTS()
 CONF_GCC_LINKER_OPTS_STAGE1="$CONF_GCC_LINKER_OPTS_STAGE1 $GccUseLdOpt"
 CONF_GCC_LINKER_OPTS_STAGE2="$CONF_GCC_LINKER_OPTS_STAGE2 $GccUseLdOpt"
-LdCmd="$LD"
 CFLAGS="$CFLAGS $GccUseLdOpt"
-AC_SUBST([LdCmd])
 
 FP_PROG_LD_IS_GNU
 FP_PROG_LD_NO_COMPACT_UNWIND
diff --git a/ghc/Main.hs b/ghc/Main.hs
index 5a65b36306cc..33f0d723edae 100644
--- a/ghc/Main.hs
+++ b/ghc/Main.hs
@@ -627,8 +627,8 @@ mode_flags =
           "LibDir",
           "Global Package DB",
           "C compiler flags",
-          "C compiler link flags",
-          "ld flags"],
+          "C compiler link flags"
+          ],
     let k' = "-print-" ++ map (replaceSpace . toLower) k
         replaceSpace ' ' = '-'
         replaceSpace c   = c
diff --git a/hadrian/bindist/Makefile b/hadrian/bindist/Makefile
index db4383d77a77..8a79b6394222 100644
--- a/hadrian/bindist/Makefile
+++ b/hadrian/bindist/Makefile
@@ -87,8 +87,6 @@ lib/settings : config.mk
 	@echo ',("C compiler supports -no-pie", "$(SettingsCCompilerSupportsNoPie)")' >> $@
 	@echo ',("Haskell CPP command", "$(SettingsHaskellCPPCommand)")' >> $@
 	@echo ',("Haskell CPP flags", "$(SettingsHaskellCPPFlags)")' >> $@
-	@echo ',("ld command", "$(SettingsLdCommand)")' >> $@
-	@echo ',("ld flags", "$(SettingsLdFlags)")' >> $@
 	@echo ',("ld supports compact unwind", "$(LdHasNoCompactUnwind)")' >> $@
 	@echo ',("ld supports filelist", "$(LdHasFilelist)")' >> $@
 	@echo ',("ld supports response files", "$(LdSupportsResponseFiles)")' >> $@
diff --git a/hadrian/bindist/config.mk.in b/hadrian/bindist/config.mk.in
index 2649e2e51ffd..3ae168d6ac5f 100644
--- a/hadrian/bindist/config.mk.in
+++ b/hadrian/bindist/config.mk.in
@@ -263,8 +263,6 @@ SettingsCCompilerFlags = @SettingsCCompilerFlags@
 SettingsCxxCompilerFlags = @SettingsCxxCompilerFlags@
 SettingsCCompilerLinkFlags = @SettingsCCompilerLinkFlags@
 SettingsCCompilerSupportsNoPie = @SettingsCCompilerSupportsNoPie@
-SettingsLdCommand = @SettingsLdCommand@
-SettingsLdFlags = @SettingsLdFlags@
 SettingsMergeObjectsCommand = @SettingsMergeObjectsCommand@
 SettingsMergeObjectsFlags = @SettingsMergeObjectsFlags@
 SettingsArCommand = @SettingsArCommand@
diff --git a/hadrian/cfg/system.config.in b/hadrian/cfg/system.config.in
index 9efd02c70548..bbe619d08df7 100644
--- a/hadrian/cfg/system.config.in
+++ b/hadrian/cfg/system.config.in
@@ -11,7 +11,7 @@ autoreconf     = @AutoreconfCmd@
 cc             = @CC@
 happy          = @HappyCmd@
 hs-cpp         = @HaskellCPPCmd@
-ld             = @LdCmd@
+ld             = @LD@
 make           = @MakeCmd@
 nm             = @NmCmd@
 merge-objects  = @MergeObjsCmd@
@@ -151,8 +151,6 @@ settings-c-compiler-flags = @SettingsCCompilerFlags@
 settings-cxx-compiler-flags = @SettingsCxxCompilerFlags@
 settings-c-compiler-link-flags = @SettingsCCompilerLinkFlags@
 settings-c-compiler-supports-no-pie = @SettingsCCompilerSupportsNoPie@
-settings-ld-command = @SettingsLdCommand@
-settings-ld-flags = @SettingsLdFlags@
 settings-merge-objects-command = @SettingsMergeObjectsCommand@
 settings-merge-objects-flags = @SettingsMergeObjectsFlags@
 settings-ar-command = @SettingsArCommand@
diff --git a/hadrian/src/Oracles/Setting.hs b/hadrian/src/Oracles/Setting.hs
index 615b820b8fa5..a6a8b98a78c7 100644
--- a/hadrian/src/Oracles/Setting.hs
+++ b/hadrian/src/Oracles/Setting.hs
@@ -115,8 +115,6 @@ data SettingsFileSetting
     | SettingsFileSetting_CxxCompilerFlags
     | SettingsFileSetting_CCompilerLinkFlags
     | SettingsFileSetting_CCompilerSupportsNoPie
-    | SettingsFileSetting_LdCommand
-    | SettingsFileSetting_LdFlags
     | SettingsFileSetting_MergeObjectsCommand
     | SettingsFileSetting_MergeObjectsFlags
     | SettingsFileSetting_ArCommand
@@ -214,8 +212,6 @@ settingsFileSetting key = lookupSystemConfig $ case key of
     SettingsFileSetting_CxxCompilerFlags -> "settings-cxx-compiler-flags"
     SettingsFileSetting_CCompilerLinkFlags -> "settings-c-compiler-link-flags"
     SettingsFileSetting_CCompilerSupportsNoPie -> "settings-c-compiler-supports-no-pie"
-    SettingsFileSetting_LdCommand -> "settings-ld-command"
-    SettingsFileSetting_LdFlags -> "settings-ld-flags"
     SettingsFileSetting_MergeObjectsCommand -> "settings-merge-objects-command"
     SettingsFileSetting_MergeObjectsFlags -> "settings-merge-objects-flags"
     SettingsFileSetting_ArCommand -> "settings-ar-command"
diff --git a/hadrian/src/Rules/Generate.hs b/hadrian/src/Rules/Generate.hs
index d7a41a20ae49..41ca71970006 100644
--- a/hadrian/src/Rules/Generate.hs
+++ b/hadrian/src/Rules/Generate.hs
@@ -446,8 +446,6 @@ generateSettings = do
         , ("C compiler supports -no-pie", expr $ settingsFileSetting SettingsFileSetting_CCompilerSupportsNoPie)
         , ("Haskell CPP command", expr $ settingsFileSetting SettingsFileSetting_HaskellCPPCommand)
         , ("Haskell CPP flags", expr $ settingsFileSetting SettingsFileSetting_HaskellCPPFlags)
-        , ("ld command", expr $ settingsFileSetting SettingsFileSetting_LdCommand)
-        , ("ld flags", expr $ settingsFileSetting SettingsFileSetting_LdFlags)
         , ("ld supports compact unwind", expr $ lookupSystemConfig "ld-has-no-compact-unwind")
         , ("ld supports filelist", expr $ lookupSystemConfig "ld-has-filelist")
         , ("ld supports response files", expr $ lookupSystemConfig "ld-supports-response-files")
diff --git a/m4/fp_prog_ld_filelist.m4 b/m4/fp_prog_ld_filelist.m4
index a61cb3103c28..e8bbbd80c2e0 100644
--- a/m4/fp_prog_ld_filelist.m4
+++ b/m4/fp_prog_ld_filelist.m4
@@ -12,7 +12,7 @@ AC_CACHE_CHECK([whether ld understands -filelist], [fp_cv_ld_has_filelist],
     ${CC-cc} -c conftest2.c
     echo conftest1.o  > conftest.o-files
     echo conftest2.o >> conftest.o-files
-    if ${LdCmd} -r -filelist conftest.o-files -o conftest.o > /dev/null 2>&1
+    if $LD -r -filelist conftest.o-files -o conftest.o > /dev/null 2>&1
     then
         fp_cv_ld_has_filelist=yes
     else
diff --git a/m4/fp_prog_ld_flag.m4 b/m4/fp_prog_ld_flag.m4
index 8617d7ceb30e..59ceb9082ac6 100644
--- a/m4/fp_prog_ld_flag.m4
+++ b/m4/fp_prog_ld_flag.m4
@@ -7,7 +7,7 @@ AC_DEFUN([FP_PROG_LD_FLAG],
 AC_CACHE_CHECK([whether ld understands $1], [fp_cv_$2],
 [echo 'int foo() { return 0; }' > conftest.c
 ${CC-cc} -c conftest.c
-if ${LdCmd} -r $1 -o conftest2.o conftest.o > /dev/null 2>&1; then
+if $LD -r $1 -o conftest2.o conftest.o > /dev/null 2>&1; then
    fp_cv_$2=$1
 else
    fp_cv_$2=
diff --git a/m4/fp_prog_ld_is_gnu.m4 b/m4/fp_prog_ld_is_gnu.m4
index 90f6d5fcda59..62f06de69bbf 100644
--- a/m4/fp_prog_ld_is_gnu.m4
+++ b/m4/fp_prog_ld_is_gnu.m4
@@ -4,7 +4,7 @@
 # GNU ld or not.
 AC_DEFUN([FP_PROG_LD_IS_GNU],[
 AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld],
-[[if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
+[[if $LD --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
   fp_cv_gnu_ld=YES
 else
   fp_cv_gnu_ld=NO
diff --git a/m4/fp_prog_ld_no_compact_unwind.m4 b/m4/fp_prog_ld_no_compact_unwind.m4
index b80ac854c589..d1ea0527f913 100644
--- a/m4/fp_prog_ld_no_compact_unwind.m4
+++ b/m4/fp_prog_ld_no_compact_unwind.m4
@@ -7,7 +7,7 @@ AC_DEFUN([FP_PROG_LD_NO_COMPACT_UNWIND],
 AC_CACHE_CHECK([whether ld understands -no_compact_unwind], [fp_cv_ld_no_compact_unwind],
 [echo 'int foo() { return 0; }' > conftest.c
 ${CC-cc} -c conftest.c
-if ${LdCmd} -r -no_compact_unwind -o conftest2.o conftest.o > /dev/null 2>&1; then
+if $LD -r -no_compact_unwind -o conftest2.o conftest.o > /dev/null 2>&1; then
    fp_cv_ld_no_compact_unwind=yes
 else
    fp_cv_ld_no_compact_unwind=no
diff --git a/m4/fp_settings.m4 b/m4/fp_settings.m4
index 26e15a163cd4..1f144adda0ab 100644
--- a/m4/fp_settings.m4
+++ b/m4/fp_settings.m4
@@ -16,8 +16,6 @@ AC_DEFUN([FP_SETTINGS],
         SettingsCCompilerLinkFlags="$CONF_GCC_LINKER_OPTS_STAGE2 -L\$\$tooldir/mingw/lib -L\$\$tooldir/mingw/x86_64-w64-mingw32/lib"
         SettingsHaskellCPPCommand="${mingw_bin_prefix}clang.exe"
         SettingsHaskellCPPFlags="$HaskellCPPArgs -I\$\$tooldir/mingw/include"
-        SettingsLdCommand="${mingw_bin_prefix}ld.lld.exe"
-        SettingsLdFlags=""
         # LLD does not support object merging (#21068)
         SettingsMergeObjectsCommand=""
         SettingsMergeObjectsFlags=""
@@ -38,8 +36,6 @@ AC_DEFUN([FP_SETTINGS],
         SettingsHaskellCPPCommand="$HaskellCPPCmd"
         SettingsHaskellCPPFlags="$HaskellCPPArgs"
         SettingsCCompilerLinkFlags="$CONF_GCC_LINKER_OPTS_STAGE2"
-        SettingsLdCommand="$LdCmd"
-        SettingsLdFlags="$CONF_LD_LINKER_OPTS_STAGE2"
         SettingsArCommand="$ArCmd"
         SettingsRanlibCommand="$RanlibCmd"
         SettingsMergeObjectsCommand="$MergeObjsCmd"
@@ -113,8 +109,6 @@ AC_DEFUN([FP_SETTINGS],
     AC_SUBST(SettingsCxxCompilerFlags)
     AC_SUBST(SettingsCCompilerLinkFlags)
     AC_SUBST(SettingsCCompilerSupportsNoPie)
-    AC_SUBST(SettingsLdCommand)
-    AC_SUBST(SettingsLdFlags)
     AC_SUBST(SettingsMergeObjectsCommand)
     AC_SUBST(SettingsMergeObjectsFlags)
     AC_SUBST(SettingsArCommand)
-- 
GitLab