From 205b8af364b7ff3a54fad081f9bbbf85c1b88a81 Mon Sep 17 00:00:00 2001 From: Cheng Shao <terrorjack@type.dance> Date: Fri, 4 Oct 2024 20:44:54 +0000 Subject: [PATCH] ghc-bin: enforce dynamic way when the target requires so This commit makes ghc-bin use dynamic way when it is doing interactive stuff on certain targets whose RTS linker can only handle dynamic code. (cherry picked from commit 88e992489e1574b471a55ff9ddace2c81a09ba63) (cherry picked from commit 50dc1ac1f9ad3ba62558346ef44759794508c863) --- ghc/Main.hs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/ghc/Main.hs b/ghc/Main.hs index 730a614839b..5f17f24cc85 100644 --- a/ghc/Main.hs +++ b/ghc/Main.hs @@ -224,9 +224,26 @@ main' postLoadMode units dflags0 args flagWarnings = do -- The rest of the arguments are "dynamic" -- Leftover ones are presumably files - (dflags3, fileish_args, dynamicFlagWarnings) <- + (dflags3', fileish_args, dynamicFlagWarnings) <- GHC.parseDynamicFlags logger2 dflags2 args' + -- When we do ghci, force using dyn ways if the target RTS linker + -- only supports dynamic code + let dflags3 + | LinkInMemory <- link, + sTargetRTSLinkerOnlySupportsSharedLibs $ settings dflags3' + = setDynamicNow $ + -- See checkOptions below, -fexternal-interpreter is + -- required when using --interactive with a non-standard + -- way (-prof, -static, or -dynamic). + setGeneralFlag' Opt_ExternalInterpreter $ + -- Use .o for dynamic object, otherwise it gets dropped + -- with "Warning: ignoring unrecognised input", see + -- objish_suffixes + dflags3' { dynObjectSuf_ = objectSuf dflags3' } + | otherwise + = dflags3' + let dflags4 = if backendNeedsFullWays bcknd && not (gopt Opt_ExternalInterpreter dflags3) then -- GitLab