summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorBen Gamari <bgamari.foss@gmail.com>2016-12-08 16:33:42 -0500
committerBen Gamari <ben@smart-cactus.org>2016-12-08 18:44:55 -0500
commit55361b381d14d8752f00d90868fcbe82f86c6b2d (patch)
treee0487a759369e8db308d9ea2dfa7b7d78fa9276c /compiler
parent1e5b7d701149dc20c9f92e722c32912c86d53081 (diff)
downloadhaskell-55361b381d14d8752f00d90868fcbe82f86c6b2d.tar.gz
nativeGen: Fix string merging on Windows
D1290 places string constants in the `.rodata.str` section with `aMS` section flags so that the linker can merge them. However, it seems that ld doesn't understand these flags. It appears that `gcc -fmerge-constants` uses the `dr` flags on Windows. Make GHC do the same. Test Plan: Validate on Windows Reviewers: xnyhps, austin, Phyx Reviewed By: Phyx Subscribers: thomie, trommler Differential Revision: https://phabricator.haskell.org/D2797 GHC Trac Issues: #9577
Diffstat (limited to 'compiler')
-rw-r--r--compiler/nativeGen/PprBase.hs9
1 files changed, 6 insertions, 3 deletions
diff --git a/compiler/nativeGen/PprBase.hs b/compiler/nativeGen/PprBase.hs
index e7feb8a977..10ed2fb65d 100644
--- a/compiler/nativeGen/PprBase.hs
+++ b/compiler/nativeGen/PprBase.hs
@@ -98,16 +98,19 @@ pprGNUSectionHeader t suffix = sdocWithDynFlags $ \dflags ->
let splitSections = gopt Opt_SplitSections dflags
subsection | splitSections = char '.' <> ppr suffix
| otherwise = empty
- in text ".section " <> ptext header <> subsection
+ in text ".section " <> ptext (header dflags) <> subsection
where
- header = case t of
+ header dflags = case t of
Text -> sLit ".text"
Data -> sLit ".data"
ReadOnlyData -> sLit ".rodata"
RelocatableReadOnlyData -> sLit ".data.rel.ro"
UninitialisedData -> sLit ".bss"
ReadOnlyData16 -> sLit ".rodata.cst16"
- CString -> sLit ".rodata.str1.1,\"aMS\",@progbits,1"
+ CString
+ | OSMinGW32 <- platformOS (targetPlatform dflags)
+ -> sLit ".rdata,\"dr\""
+ | otherwise -> sLit ".rodata.str1.1,\"aMS\",@progbits,1"
OtherSection _ ->
panic "PprBase.pprGNUSectionHeader: unknown section type"