summaryrefslogtreecommitdiff
path: root/compiler/main/SysTools.lhs
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2014-11-18 12:40:20 -0600
committerAustin Seipp <austin@well-typed.com>2014-11-18 12:40:24 -0600
commite7b414a3cc0e27049f2608f5e0a00c47146cc46d (patch)
tree80eed7446a44533257924f88f55dd373a35d5043 /compiler/main/SysTools.lhs
parentc557f991a9fa6f6afad4850e4f5db6a08fa1cb6c (diff)
downloadhaskell-e7b414a3cc0e27049f2608f5e0a00c47146cc46d.tar.gz
Fix detection of GNU gold linker if invoked via gcc with parameters
Previously the linker was called without any commandline parameters to detect whether bfd or gold is used. However the -fuse-ld parameter can be used to switch between gold and bfd and should be taken into account here. Trac #9336 Signed-off-by: Austin Seipp <austin@well-typed.com>
Diffstat (limited to 'compiler/main/SysTools.lhs')
-rw-r--r--compiler/main/SysTools.lhs7
1 files changed, 5 insertions, 2 deletions
diff --git a/compiler/main/SysTools.lhs b/compiler/main/SysTools.lhs
index 67926f5576..c13790a4ff 100644
--- a/compiler/main/SysTools.lhs
+++ b/compiler/main/SysTools.lhs
@@ -741,7 +741,10 @@ getLinkerInfo' :: DynFlags -> IO LinkerInfo
getLinkerInfo' dflags = do
let platform = targetPlatform dflags
os = platformOS platform
- (pgm,_) = pgm_l dflags
+ (pgm,args0) = pgm_l dflags
+ args1 = map Option (getOpts dflags opt_l)
+ args2 = args0 ++ args1
+ args3 = filter notNull (map showOpt args2)
-- Try to grab the info from the process output.
parseLinkerInfo stdo _stde _exitc
@@ -792,7 +795,7 @@ getLinkerInfo' dflags = do
-- In practice, we use the compiler as the linker here. Pass
-- -Wl,--version to get linker version info.
(exitc, stdo, stde) <- readProcessEnvWithExitCode pgm
- ["-Wl,--version"]
+ (["-Wl,--version"] ++ args3)
en_locale_env
-- Split the output by lines to make certain kinds
-- of processing easier. In particular, 'clang' and 'gcc'