diff options
author | Ben Gamari <ben@smart-cactus.org> | 2018-12-25 22:45:44 -0500 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2018-12-25 22:45:44 -0500 |
commit | 427bd016cbc9c286a3f2098df50a5b8e5d29065d (patch) | |
tree | ab74d12cd2722c4b0c4dbaebabf650109420e827 | |
parent | 15fff5bf6e6b5f72a33b02c31565be4afb6a7480 (diff) | |
download | haskell-wip/revert-windows-big-pe.tar.gz |
Revert "Windows: Use the "big" PE object format on amd64"wip/revert-windows-big-pe
This reverts commit 1ef90f990da90036d481c830d8832e21b8f1571b.
-rw-r--r-- | compiler/main/DriverPipeline.hs | 38 |
1 files changed, 1 insertions, 37 deletions
diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs index f1a5cb46e0..2cc24b9023 100644 --- a/compiler/main/DriverPipeline.hs +++ b/compiler/main/DriverPipeline.hs @@ -1344,11 +1344,6 @@ runPhase (RealPhase (As with_cpp)) input_fn dflags (local_includes ++ global_includes -- See Note [-fPIC for assembler] ++ map SysTools.Option pic_c_flags - -- See Note [Produce big objects on Windows] - ++ [ SysTools.Option "-Wa,-mbig-obj" - | platformOS (targetPlatform dflags) == OSMinGW32 - , not $ target32Bit (targetPlatform dflags) - ] -- We only support SparcV9 and better because V8 lacks an atomic CAS -- instruction so we have to make sure that the assembler accepts the @@ -2162,32 +2157,6 @@ generateMacros prefix name version = -- --------------------------------------------------------------------------- -- join object files into a single relocatable object file, using ld -r -{- -Note [Produce big objects on Windows] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Windows Portable Executable object format has a limit of 32k sections, which -we tend to blow through pretty easily. Thankfully, there is a "big object" -extension, which raises this limit to 2^32. However, it must be explicitly -enabled in the toolchain: - - * the assembler accepts the -mbig-obj flag, which causes it to produce a - bigobj-enabled COFF object. - - * the linker accepts the --oformat pe-bigobj-x86-64 flag. Despite what the name - suggests, this tells the linker to produce a bigobj-enabled COFF object, no a - PE executable. - -We must enable bigobj output in a few places: - - * When merging object files (DriverPipeline.joinObjectFiles) - - * When assembling (DriverPipeline.runPhase (RealPhase As ...)) - -Unfortunately the big object format is not supported on 32-bit targets so -none of this can be used in that case. --} - joinObjectFiles :: DynFlags -> [FilePath] -> FilePath -> IO () joinObjectFiles dflags o_files output_fn = do let mySettings = settings dflags @@ -2197,7 +2166,7 @@ joinObjectFiles dflags o_files output_fn = do SysTools.Option "-nostdlib", SysTools.Option "-Wl,-r" ] - -- See Note [No PIE while linking] in DynFlags + -- See Note [No PIE while linking] in SysTools ++ (if sGccSupportsNoPie mySettings then [SysTools.Option "-no-pie"] else []) @@ -2216,11 +2185,6 @@ joinObjectFiles dflags o_files output_fn = do && ldIsGnuLd then [SysTools.Option "-Wl,-no-relax"] else []) - -- See Note [Produce big objects on Windows] - ++ [ SysTools.Option "-Wl,--oformat,pe-bigobj-x86-64" - | OSMinGW32 == osInfo - , not $ target32Bit (targetPlatform dflags) - ] ++ map SysTools.Option ld_build_id ++ [ SysTools.Option "-o", SysTools.FileOption "" output_fn ] |