[GHC] #11072: Runtime linker doesn't search for DLLs referenced in import libraries on Windows

GHC ghc-devs at haskell.org
Tue Nov 17 03:46:57 UTC 2015


#11072: Runtime linker doesn't search for DLLs referenced in import libraries on
Windows
-------------------------------------+-------------------------------------
        Reporter:  RyanGlScott       |                Owner:  Phyx-
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:  8.0.1
       Component:  Compiler          |              Version:  7.10.2-rc2
  (Linking)                          |
      Resolution:                    |             Keywords:
Operating System:  Windows           |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  Runtime crash     |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by Phyx-):

 Hi Matt,

 Thanks for the patch!, I will look at it more closely in the weekend. But
 a few things:

 1) This does not look for `.lib` files which are just import libs as well

 2) I'm a bit weary of having to look for a specific section group.
    In particular the `.lib` from from `icuuc.lib` does not have an
 `.idata$7`.


 {{{
 Dump of file icuuc.lib

 File Type: LIBRARY

   Summary

           C3 .debug$S
           14 .idata$2
           14 .idata$3
            8 .idata$4
            8 .idata$5
            C .idata$6
 }}}

 I think it should just be running through the `.idata` sections to find
 it.

 3) We already have code to read in COFF files in `Linker.c`, we probably
 don't want to maintain this at two points. So I would have expected most
 of the logic here to be done on the C side.

 ---

 I have also been wondering, these import libs also contain large symbol
 tables. Presumably because import libraries contain stubs for calling into
 the dll.

 GHCi supports dynamic loading of archives, would it not be possible to
 just simply satisfy the linker by just satisfying the symbol resolution
 with these stubs? Sure we have an extra layer of indirection, but it would
 be robust and it wouldn't really matter much for the repl.

 What I am asking is, have you considered just correctly locating these
 import libs and then not returning a `DLL` but an `Archive`? In theory
 this should still work, but you wouldn't have to read the COFF files.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11072#comment:4>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list