summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/main/DriverPipeline.hs10
-rw-r--r--compiler/main/DynFlags.hs2
2 files changed, 10 insertions, 2 deletions
diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs
index b378cfe673..9851ce1d75 100644
--- a/compiler/main/DriverPipeline.hs
+++ b/compiler/main/DriverPipeline.hs
@@ -1338,7 +1338,13 @@ runPhase LlvmLlc input_fn dflags
| not opt_Static = "dynamic-no-pic"
| otherwise = "static"
- output_fn <- phaseOutputFilename LlvmMangle
+ -- hidden debugging flag '-dno-llvm-mangler' to skip mangling
+ let next_phase = case dopt Opt_NoLlvmMangler dflags of
+ False -> LlvmMangle
+ True | dopt Opt_SplitObjs dflags -> Splitter
+ True -> As
+
+ output_fn <- phaseOutputFilename next_phase
io $ SysTools.runLlvmLlc dflags
([ SysTools.Option (llvmOpts !! opt_lvl),
@@ -1348,7 +1354,7 @@ runPhase LlvmLlc input_fn dflags
++ map SysTools.Option lc_opts
++ map SysTools.Option fpOpts)
- return (LlvmMangle, output_fn)
+ return (next_phase, output_fn)
where
-- Bug in LLVM at O3 on OSX.
llvmOpts = if platformOS (targetPlatform dflags) == OSDarwin
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index c6f886e0d3..4eb6dc9bcb 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -220,6 +220,7 @@ data DynFlag
| Opt_DoStgLinting
| Opt_DoCmmLinting
| Opt_DoAsmLinting
+ | Opt_NoLlvmMangler
| Opt_WarnIsError -- -Werror; makes warnings fatal
@@ -1573,6 +1574,7 @@ dynamic_flags = [
, Flag "dshow-passes" (NoArg (do forceRecompile
setVerbosity $ Just 2))
, Flag "dfaststring-stats" (NoArg (setDynFlag Opt_D_faststring_stats))
+ , Flag "dno-llvm-mangler" (NoArg (setDynFlag Opt_NoLlvmMangler))
------ Machine dependant (-m<blah>) stuff ---------------------------