[commit: ghc] master: Fix #9047 (b847481)
Simon Peyton Jones
simonpj at microsoft.com
Mon Jun 23 07:06:39 UTC 2014
Something clever/important is going on here, but no `Note` explains what, or even references the ticket :-(.
I know I'm obsessive about this, but I've spent too long staring at code wondering why it is the way it is, when a pointer to the relevant ticket and a few remarks would have made it all clear.
Simon
| -----Original Message-----
| From: ghc-commits [mailto:ghc-commits-bounces at haskell.org] On Behalf Of
| git at git.haskell.org
| Sent: 23 June 2014 07:28
| To: ghc-commits at haskell.org
| Subject: [commit: ghc] master: Fix #9047 (b847481)
|
| Repository : ssh://git@git.haskell.org/ghc
|
| On branch : master
| Link :
| http://ghc.haskell.org/trac/ghc/changeset/b84748121e777d098198f2583d11a9
| 424c1b1650/ghc
|
| >---------------------------------------------------------------
|
| commit b84748121e777d098198f2583d11a9424c1b1650
| Author: Austin Seipp <austin at well-typed.com>
| Date: Mon Jun 23 00:07:10 2014 -0500
|
| Fix #9047
|
| Signed-off-by: Austin Seipp <austin at well-typed.com>
|
|
| >---------------------------------------------------------------
|
| b84748121e777d098198f2583d11a9424c1b1650
| compiler/main/DriverPipeline.hs | 46 ++++++++++++++++++++++------------
| -------
| compiler/main/DynFlags.hs | 2 ++
| compiler/main/SysTools.lhs | 7 +++++--
| 3 files changed, 32 insertions(+), 23 deletions(-)
|
| diff --git a/compiler/main/DriverPipeline.hs
| b/compiler/main/DriverPipeline.hs index 39df2a1..b90a821 100644
| --- a/compiler/main/DriverPipeline.hs
| +++ b/compiler/main/DriverPipeline.hs
| @@ -1206,6 +1206,7 @@ runPhase (RealPhase (As with_cpp)) input_fn dflags
| -- might be a hierarchical module.
| liftIO $ createDirectoryIfMissing True (takeDirectory
| output_fn)
|
| + ccInfo <- liftIO $ getCompilerInfo dflags
| let runAssembler inputFilename outputFilename
| = liftIO $ as_prog dflags
| ([ SysTools.Option ("-I" ++ p) | p <-
| cmdline_include_paths ] @@ -1220,7 +1221,9 @@ runPhase (RealPhase (As
| with_cpp)) input_fn dflags
| ++ (if platformArch (targetPlatform dflags) ==
| ArchSPARC
| then [SysTools.Option "-mcpu=v9"]
| else [])
| -
| + ++ (if ccInfo == AppleClang51
| + then [SysTools.Option "-Qunused-arguments"]
| + else [])
| ++ [ SysTools.Option "-x"
| , if with_cpp
| then SysTools.Option "assembler-with-cpp"
| @@ -2129,26 +2132,27 @@ joinObjectFiles dflags o_files output_fn = do
| let mySettings = settings dflags
| ldIsGnuLd = sLdIsGnuLd mySettings
| osInfo = platformOS (targetPlatform dflags)
| - ld_r args ccInfo = SysTools.runLink dflags ([
| - SysTools.Option "-nostdlib",
| - SysTools.Option "-Wl,-r"
| - ]
| - ++ (if ccInfo == Clang then []
| - else [SysTools.Option "-nodefaultlibs"])
| - ++ (if osInfo == OSFreeBSD
| - then [SysTools.Option "-L/usr/lib"]
| - else [])
| - -- gcc on sparc sets -Wl,--relax
| implicitly, but
| - -- -r and --relax are incompatible for ld,
| so
| - -- disable --relax explicitly.
| - ++ (if platformArch (targetPlatform dflags) ==
| ArchSPARC
| - && ldIsGnuLd
| - then [SysTools.Option "-Wl,-no-relax"]
| - else [])
| - ++ map SysTools.Option ld_build_id
| - ++ [ SysTools.Option "-o",
| - SysTools.FileOption "" output_fn ]
| - ++ args)
| + ld_r args cc = SysTools.runLink dflags ([
| + SysTools.Option "-nostdlib",
| + SysTools.Option "-Wl,-r"
| + ]
| + ++ (if any (cc ==) [Clang, AppleClang,
| AppleClang51]
| + then []
| + else [SysTools.Option "-nodefaultlibs"])
| + ++ (if osInfo == OSFreeBSD
| + then [SysTools.Option "-L/usr/lib"]
| + else [])
| + -- gcc on sparc sets -Wl,--relax implicitly,
| but
| + -- -r and --relax are incompatible for ld, so
| + -- disable --relax explicitly.
| + ++ (if platformArch (targetPlatform dflags) ==
| ArchSPARC
| + && ldIsGnuLd
| + then [SysTools.Option "-Wl,-no-relax"]
| + else [])
| + ++ map SysTools.Option ld_build_id
| + ++ [ SysTools.Option "-o",
| + SysTools.FileOption "" output_fn ]
| + ++ args)
|
| -- suppress the generation of the .note.gnu.build-id section,
| -- which we don't need and sometimes causes ld to emit a diff --
| git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index
| 7222af3..f82c404 100644
| --- a/compiler/main/DynFlags.hs
| +++ b/compiler/main/DynFlags.hs
| @@ -3757,6 +3757,8 @@ data LinkerInfo
| data CompilerInfo
| = GCC
| | Clang
| + | AppleClang
| + | AppleClang51
| | UnknownCC
| deriving Eq
|
| diff --git a/compiler/main/SysTools.lhs b/compiler/main/SysTools.lhs
| index dc9642d..51d5af1 100644
| --- a/compiler/main/SysTools.lhs
| +++ b/compiler/main/SysTools.lhs
| @@ -788,12 +788,15 @@ getCompilerInfo' dflags = do
| -- Regular clang
| | any ("clang version" `isPrefixOf`) stde =
| return Clang
| + -- XCode 5.1 clang
| + | any ("Apple LLVM version 5.1" `isPrefixOf`) stde =
| + return AppleClang51
| -- XCode 5 clang
| | any ("Apple LLVM version" `isPrefixOf`) stde =
| - return Clang
| + return AppleClang
| -- XCode 4.1 clang
| | any ("Apple clang version" `isPrefixOf`) stde =
| - return Clang
| + return AppleClang
| -- Unknown linker.
| | otherwise = fail "invalid -v output, or compiler is
| unsupported"
|
|
| _______________________________________________
| ghc-commits mailing list
| ghc-commits at haskell.org
| http://www.haskell.org/mailman/listinfo/ghc-commits
More information about the ghc-devs
mailing list