Better import library support for Windows
authorTamar Christina <tamar@zhox.com>
Fri, 2 Jun 2017 15:47:57 +0000 (11:47 -0400)
committerBen Gamari <ben@smart-cactus.org>
Fri, 2 Jun 2017 16:27:45 +0000 (12:27 -0400)
commit93489cd3b4c1b0d17506a12a9b964c0082ddb7a8
tree3255cbf5caa2c71e094e9e8655c9f38d5da734c5
parent5164cce20bc6f09f55cf5c4d1797b72b7e85b176
Better import library support for Windows

The import library support added for 7.10.3 was only a partial one.
This support was predicated on using file extensions to determine
whether or not a library was an import library. It also couldn't handle
libraries with multiple dll pointers.

This is a rewrite of that patch and fully integrating it into the normal
archive parsing and loading routines. This solves a host of issues,
among others allowing us to finally use `-lgcc_s`.

This also fixes a problem with our previous implementation, where we
just loaded the DLL and moved on. Doing this had the potential of using
the wrong symbol at resolve time. Say a DLL already loaded (A.dll) has
symbol a exported (dependency of another dll perhaps).

We find an import library `B.lib` explicitly defining an export of `a`.
we load `B.dll` but this gets put after `A.dll`, at resolve time we
would use the value from `A` instead of `B` which is what we wanted.

Test Plan: ./valide and make test TEST=13606

Reviewers: austin, bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, RyanGlScott, thomie, #ghc_windows_task_force

GHC Trac Issues: #13606, #12499, #12498

Differential Revision: https://phabricator.haskell.org/D3513
13 files changed:
docs/users_guide/8.4.1-notes.rst
rts/Linker.c
rts/LinkerInternals.h
rts/RtsSymbolInfo.c
rts/RtsSymbolInfo.h
rts/linker/LoadArchive.c
rts/linker/PEi386.c
rts/linker/PEi386.h
testsuite/tests/ghci/linking/dyn/Makefile
testsuite/tests/ghci/linking/dyn/T13606.hs [new file with mode: 0644]
testsuite/tests/ghci/linking/dyn/T13606.stdout [new file with mode: 0644]
testsuite/tests/ghci/linking/dyn/Triangle.fx [new file with mode: 0644]
testsuite/tests/ghci/linking/dyn/all.T