Commit 55361b38 authored by Ben Gamari's avatar Ben Gamari Committed by Ben Gamari

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
parent 1e5b7d70
......@@ -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"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment