[GHC] #10726: Upgrade MingW-w64 distributions for windows
GHC
ghc-devs at haskell.org
Sat Nov 21 19:19:16 UTC 2015
#10726: Upgrade MingW-w64 distributions for windows
-------------------------------------+-------------------------------------
Reporter: Phyx- | Owner:
Type: task | Status: new
Priority: normal | Milestone: 7.10.3
Component: Build System | Version: 7.11
Resolution: | Keywords:
Operating System: Windows | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: #9218 #9014 | Differential Rev(s): Phab:D1123
#10435 |
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by Phyx-):
@lukexi thanks, can reproduce it now :)
@Elieux unfortunately it seems it's not that easy. The `rts` seems to be a
special case again. The linker seems to ignore the `extra-libraries` from
the `package.conf`, which explains why you can put anything you want in
there and it'll still compile.
{{{
128 emptyPLS :: DynFlags -> PersistentLinkerState
129 emptyPLS _ = PersistentLinkerState {
130 closure_env = emptyNameEnv,
131 itbl_env = emptyNameEnv,
132 pkgs_loaded = init_pkgs,
133 bcos_loaded = [],
134 objs_loaded = [],
135 temp_sos = [] }
136
137 -- Packages that don't need loading, because the compiler
138 -- shares them with the interpreted program.
139 --
140 -- The linker's symbol table is populated with RTS symbols using an
141 -- explicit list. See rts/Linker.c for details.
142 where init_pkgs = [rtsUnitId]
}}}
> Therefore i believe proper solution should be linking `libmingwex.a`as a
whole archive when building ghc.exe, instead of just letting GCC to link
only used symbols as it does by default.
Hence the temporary solution. The package.conf for the `rts` ignores the
`extra-libraries` section in the linker. Windows isn't alone here, Mac
also re-exports some symbols. And before ripping this out I want to know
why. Also I think it's riskier then just adding some extra symbols. **As**
it is right now, there is no way to use `libmingwex.a` on Windows.
> Reexporting those symbols seems like a bad idea, because, if I'm not
mistaken, RTS gets linked into ever executable produced by GHC, so this
way we are actually forcing possibly unnecessary symbols into every
executable?
Yes, I don't know why it was done this way. However we are already re-
exporting some of the symbols. Quite a few in fact. Yes the proper
solution is to rip the symbols out and just link against `libmingwex.a`
which may get in to `8.0`, but for `7.10.3` I doubt it. It's already at
`RC3`.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10726#comment:47>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list