diff --git a/compiler/GHC/Driver/Pipeline/Execute.hs b/compiler/GHC/Driver/Pipeline/Execute.hs index 908422f54785c3f684ea25965a598b73209b8f6a..338d5f26038cc59812455c248eb83b27fb70048b 100644 --- a/compiler/GHC/Driver/Pipeline/Execute.hs +++ b/compiler/GHC/Driver/Pipeline/Execute.hs @@ -1045,17 +1045,12 @@ However, `ld -r` is broken in some cases: * The LLD linker that we use on Windows does not support the `-r` flag needed to support object merging (see #21068). For this reason on Windows we do not support GHCi objects. - * `wasm-ld -r` is prohibitively slow, especially when handling large - input objects (e.g. profiled objects). In these cases, we bundle a module's own object file with its foreign stub's object file, instead of merging them. Consequently, we can end up producing `.o` files which are in fact static archives. This can only work if `ar -L` is supported, so the archive `.o` files can be -properly added to the final static library. We must also take care not -to produce archive `.dyn_o` when building dynamic objects, otherwise -we end up with broken `.so` files when GHC is built with `llvm-ar` -(#22210). +properly added to the final static library. Note that this has somewhat non-obvious consequences when producing initializers and finalizers. See Note [Initializers and finalizers in Cmm] @@ -1081,7 +1076,7 @@ via gcc. -- | See Note [Object merging]. joinObjectFiles :: HscEnv -> [FilePath] -> FilePath -> IO () joinObjectFiles hsc_env o_files output_fn - | can_merge_objs && (not dashLSupported || is_dyn) = do + | can_merge_objs = do let toolSettings' = toolSettings dflags ldIsGnuLd = toolSettings_ldIsGnuLd toolSettings' ld_r args = GHC.SysTools.runMergeObjects (hsc_logger hsc_env) (hsc_tmpfs hsc_env) (hsc_dflags hsc_env) ( @@ -1109,7 +1104,6 @@ joinObjectFiles hsc_env o_files output_fn withAtomicRename output_fn $ \tmp_ar -> liftIO $ runAr logger dflags Nothing $ map Option $ ["qc" ++ dashL, tmp_ar] ++ o_files where - is_dyn = ways dflags `hasWay` WayDyn dashLSupported = sArSupportsDashL (settings dflags) dashL = if dashLSupported then "L" else "" can_merge_objs = isJust (pgm_lm (hsc_dflags hsc_env))