diff options
author | Ben Gamari <bgamari.foss@gmail.com> | 2016-12-08 16:33:42 -0500 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2016-12-08 18:44:55 -0500 |
commit | 55361b381d14d8752f00d90868fcbe82f86c6b2d (patch) | |
tree | e0487a759369e8db308d9ea2dfa7b7d78fa9276c /compiler | |
parent | 1e5b7d701149dc20c9f92e722c32912c86d53081 (diff) | |
download | haskell-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.hs | 9 |
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" |