Make list of deprecated symbols on Windows weak.
authorTamar Christina <tamar@zhox.com>
Thu, 23 Feb 2017 23:33:15 +0000 (18:33 -0500)
committerBen Gamari <ben@smart-cactus.org>
Sun, 26 Feb 2017 15:54:07 +0000 (10:54 -0500)
commit9968502d075e3a714913e14cd96a7d6b7ac7b5e7
tree3fcd4536554af3028a083995affe2510d92ca700
parent41e54b4b1a2934364759edcf77ba1f5b03a4098f
Make list of deprecated symbols on Windows weak.

We have a unfortunate workaround in place for the fact that most
packages out there use POSIX names for symbols even on Windows.  This
means that we have to recognize e.g. both `_ungetch` and `ungetch`.

The former is the actual symbol name on windows and the latter is the
POSIX variant. The problem is that on normal windows programs `ungetch`
should not be in the global namespace.

To work around this, we now mark the deprecated symbols as weak symbols
in the global namespace. This provides the flexibility we need:

* If you use the symbol without defining it, we assume you meant to use
  the POSIX variant.
* If you actually define the symbol, we'll hence forth use that
  definition and assume you didn't mean to use POSIX code. This is how
  MingW64's wrapper also works.

This requires D3028.

Fixes #13210.

Test Plan: ./validate

Reviewers: austin, bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: thomie, #ghc_windows_task_force

Differential Revision: https://phabricator.haskell.org/D3154
rts/Linker.c
rts/RtsSymbols.c
rts/RtsSymbols.h