cvs commit: fptools/ghc/docs/comm/the-beast driver.html
Reuben Thomas
rrt@dcs.gla.ac.uk
Thu, 23 Aug 2001 09:13:45 +0100 (BST)
> Now, the cycle between the two could have been resolved the
> other way around, so that the RTS would have to appear
> before HSstd, but I assume HSstd is using many more symbols
> from the RTS than the RTS from HSstd. So, resolving the
> cycle the other way would require many more -u options.
That's what we assume, but we haven't checked.
> This does, however, lead to a complication. Normal
> Haskell programs do not have a main function, so this is
> supplied by the RTS. It calls startupHaskell, which
> itself calls __init_PrelMain, which is therefore, since
> it occurs in the standard library, one of the symbols
> passed to the linker. However, when the main function is
> provided by the programmer (e.g. when there is no main
> module, but a C module instead), __init_PrelMain had
> better not be linked in, because it tries to call
> __init_Main, which won't exist.
>
> This reads to me as if the complication arises only because
> of the business of breaking the cycle between the RTS and
> HSstd. However, I think, this is not true. The RTS has to
> be linked in anyway. So, it will include a `main()', which
> overall leads to `__init_Main' being linked in (with or
> without cycle).
>
> Have I misunderstood you or do I misunderstand the setup
> itself?
Well, there's extra complication owing to the -u's, but basically I think
you're right. The main() stuff leads to even more complications under
DLLized systems on Windows, after all. Perhaps I should write something
about that too...
--
http://sc3d.org/rrt/ | Careful Cyclists Approaching From Right