Right - the IO manager is only used in the threaded RTS, and it is
started by hs_init(). So by using your own main() you can arrange that
things happen before the IO manager starts.
Cheers,
Simon
On 27/04/2012 17:25, Mark Lentczner wrote:
Follow up - Oh! FFI exporting your function outputs a stub that does all
that extra stuff... mostly (just misses returning the exit status from
the capability, but that's cool, I don't really need those particular
messages at the end of real_main()... )
Thanks, Gregory!
- Mark
On Fri, Apr 27, 2012 at 8:15 AM, Mark Lentczner <[email protected]
<mailto:[email protected]>> wrote:
Aha - I realize now that my program is linked -threaded, which is
why the IO manager gets started before main: (from rts/RtsStartup.c)
#if defined(THREADED_RTS)
ioManagerStart();
#endif
On Fri, Apr 27, 2012 at 6:57 AM, Gregory Collins
<[email protected] <mailto:[email protected]>> wrote:
Have you thought about calling hs_init() from your own C main()
function? You can set up the file descriptors however you like
if you do this. See ยง8.2.1.1 here:
http://www.haskell.org/ghc/docs/7.4.1/html/users_guide/ffi-ghc.html .
That's a good idea - Though I don't see how to call exactly to get
my original main function invoked. Reading the rts, looks like I
want to call hs_main, but pass in the magic top closure... not sure
how to find that (will do linker spelunking later). I see in
haskeline source there is an example of calling hs_init() in an
alternative main. And there it just calls some haskell function
directly. But I notice that there is a whole bunch of initialization
and work done in hs_main() and real_main() in the rts that would be
missed by this approach.
- Mark
_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc
_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc