[GHC] #5987: Too many symbols in ghc package DLL

GHC ghc-devs at haskell.org
Mon Jan 18 20:03:18 UTC 2016


#5987: Too many symbols in ghc package DLL
---------------------------------+----------------------------------------
        Reporter:  igloo         |                Owner:
            Type:  bug           |               Status:  new
        Priority:  normal        |            Milestone:  8.0.1
       Component:  Compiler      |              Version:  7.5
      Resolution:                |             Keywords:
Operating System:  Windows       |         Architecture:  Unknown/Multiple
 Type of failure:  None/Unknown  |            Test Case:
      Blocked By:                |             Blocking:  5355
 Related Tickets:                |  Differential Rev(s):
       Wiki Page:                |
---------------------------------+----------------------------------------

Comment (by rassilon):

 Replying to [comment:49 thomie]:
 > rassilon: you seem to know stuff. How to fix dynamic linking on Windows?
 Some more problems here: #4824 #5620 #7665 #8228.

 The "easiest" way of fixing this issue is by refactoring the GHC internals
 in such a way as to minimize the dependencies between the partitions of
 the GHC base DLL. (in short, removing all need for Haskell source level
 cyclic imports could help a bunch here)

 Either that, or come up with an automatic partitioning scheme that could
 handle cyclic references between the partition DLLs.

 The PE/COFF limitation of only being able to export 16bits worth of APIs
 from a dynamic library is the biggest problem of all of these issues.
 #5620 would only be worth addressing when we have a solution to this issue
 one way or another.

 Given that the root of the 16bit exported API problem stems from the
 PE/COFF specification, it would seem that any alternatives we come up
 would be conceptually equivalent to our current usages of non-dlopen(or
 equivalent) dynamic loading/linking that RTS/GHCi do today. In fact the
 code necessary to fix this issue would probably make that logic even more
 convoluted and difficult to understand/maintain. (Since the code would
 need to understand whatever additional sections/per-DLL API
 functions/etc.. that would allow the code to be relocated and linked
 properly.)

 Such a scheme would have additional downsides as well:
 * It would be (by necessity) be Windows specific.
 * It would probably completely shatter the mechanism for calling Haskell
 functions from C/C++ either in the same DLL or another DLL.

 Of the possible above approaches, I would think an automatic partitioning
 approach that handled cyclic references between the partitions would be
 the approach that had the best long term chances of successfully being
 maintained.

 Having said that of course, even automatic partitioning is still a non
 trivial amount of work. Since ideally, Cabal would know about DLL
 partitioning as well so that when anyone referenced a Haskell package with
 partitions, Cabal would help (or direct) GHC to link against all of the
 partition DLLs of that package.

 Ugh. Maybe it'll be easier once Microsoft lets us push a pull request to
 Window's dynamic linker to support more than 16bits of ordinals for
 Windows 20. ;)

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


More information about the ghc-tickets mailing list