1 /* -----------------------------------------------------------------------------
3 * (c) The GHC Team, 1998-2004
5 * Things visible externally to the RTS
7 * -------------------------------------------------------------------------- */
12 /* The RTS public interface. */
15 /* The standard FFI interface */
18 /* -----------------------------------------------------------------------------
19 Functions exported by the RTS for use in Stg code
20 -------------------------------------------------------------------------- */
23 extern void newCAF(void*);
25 extern void newCAF(StgClosure*);
29 extern I_ genSymZh(void);
30 extern I_ resetGenSymZh(void);
32 /* Alternate to raise(3) for threaded rts, for OpenBSD */
33 extern int genericRaise(int sig);
35 /* Concurrency/Exception PrimOps. */
36 extern int cmp_thread(StgPtr tso1, StgPtr tso2);
37 extern int rts_getThreadId(StgPtr tso);
38 extern int forkOS_createThread ( HsStablePtr entry );
39 extern StgInt forkProcess(HsStablePtr *entry);
40 extern StgBool rtsSupportsBoundThreads(void);
42 /* grimy low-level support functions defined in StgPrimFloat.c */
43 extern StgDouble __encodeDouble (I_ size, StgByteArray arr, I_ e);
44 extern StgDouble __int_encodeDouble (I_ j, I_ e);
45 extern StgFloat __encodeFloat (I_ size, StgByteArray arr, I_ e);
46 extern StgFloat __int_encodeFloat (I_ j, I_ e);
47 extern StgInt isDoubleNaN(StgDouble d);
48 extern StgInt isDoubleInfinite(StgDouble d);
49 extern StgInt isDoubleDenormalized(StgDouble d);
50 extern StgInt isDoubleNegativeZero(StgDouble d);
51 extern StgInt isFloatNaN(StgFloat f);
52 extern StgInt isFloatInfinite(StgFloat f);
53 extern StgInt isFloatDenormalized(StgFloat f);
54 extern StgInt isFloatNegativeZero(StgFloat f);
56 /* Suspending/resuming threads around foreign calls */
57 extern void * suspendThread ( StgRegTable * );
58 extern StgRegTable * resumeThread ( void * );
61 extern void stg_scheduleThread (StgRegTable *reg, struct StgTSO_ *tso);
63 /* Creating and destroying an adjustor thunk */
64 extern void* createAdjustor(int cconv, StgStablePtr hptr, StgFunPtr wptr,
66 extern void freeHaskellFunctionPtr(void* ptr);
68 #if defined(mingw32_HOST_OS)
69 extern int rts_InstallConsoleEvent ( int action, StgStablePtr *handler );
70 extern void rts_ConsoleHandlerDone ( int ev );
72 extern int stg_sig_install (int, int, StgStablePtr *, void *);
75 #if !defined(mingw32_HOST_OS)
76 extern StgInt *signal_handlers;
78 extern void setIOManagerPipe (int fd);
80 extern void* stgMallocBytesRWX(int len);
82 /* -----------------------------------------------------------------------------
83 Storage manager stuff exported
84 -------------------------------------------------------------------------- */
86 /* Prototype for an evacuate-like function */
87 typedef void (*evac_fn)(StgClosure **);
89 extern void performGC(void);
90 extern void performMajorGC(void);
91 extern void performGCWithRoots(void (*get_roots)(evac_fn));
92 extern HsInt64 getAllocations( void );
93 extern void revertCAFs( void );
95 #endif /* RTSEXTERNAL_H */