From baba3f2d1349f153f8dadfd9aa3d9ece67d0ad3d 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) --- 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