Updating rix output to new standard.
[ghc-hetmet.git] / includes / RtsExternal.h
1 /* -----------------------------------------------------------------------------
2  *
3  * (c) The GHC Team, 1998-2004
4  *
5  * Things visible externally to the RTS
6  *
7  * -------------------------------------------------------------------------- */
8
9 #ifndef RTSEXTERNAL_H
10 #define RTSEXTERNAL_H
11
12 /* The RTS public interface. */
13 #include "RtsAPI.h"
14
15 /* The standard FFI interface */
16 #include "HsFFI.h"
17
18 /* -----------------------------------------------------------------------------
19    Functions exported by the RTS for use in Stg code
20    -------------------------------------------------------------------------- */
21
22 #if IN_STG_CODE
23 extern void newCAF(void*);
24 #else
25 extern void newCAF(StgClosure*);
26 #endif
27
28 /* ToDo: remove? */
29 extern I_ genSymZh(void);
30 extern I_ resetGenSymZh(void);
31
32 /* Alternate to raise(3) for threaded rts, for OpenBSD */
33 extern int genericRaise(int sig);
34
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);
41 extern StgInt newSpark (StgRegTable *reg, StgClosure *p);
42
43 /* grimy low-level support functions defined in StgPrimFloat.c */
44 extern StgDouble __encodeDouble (I_ size, StgByteArray arr, I_ e);
45 extern StgDouble __int_encodeDouble (I_ j, I_ e);
46 extern StgFloat  __encodeFloat (I_ size, StgByteArray arr, I_ e);
47 extern StgFloat  __int_encodeFloat (I_ j, I_ e);
48 extern StgInt    isDoubleNaN(StgDouble d);
49 extern StgInt    isDoubleInfinite(StgDouble d);
50 extern StgInt    isDoubleDenormalized(StgDouble d);
51 extern StgInt    isDoubleNegativeZero(StgDouble d);
52 extern StgInt    isFloatNaN(StgFloat f);
53 extern StgInt    isFloatInfinite(StgFloat f);
54 extern StgInt    isFloatDenormalized(StgFloat f);
55 extern StgInt    isFloatNegativeZero(StgFloat f);
56
57 /* Suspending/resuming threads around foreign calls */
58 extern void *        suspendThread ( StgRegTable * );
59 extern StgRegTable * resumeThread  ( void * );
60
61 /* scheduler stuff */
62 extern void stg_scheduleThread (StgRegTable *reg, struct StgTSO_ *tso);
63
64 /* Creating and destroying an adjustor thunk */
65 extern void*  createAdjustor(int cconv, StgStablePtr hptr, StgFunPtr wptr,
66                              char *typeString);
67 extern void   freeHaskellFunctionPtr(void* ptr);
68
69 /* Hpc stuff */
70 extern int hs_hpc_module(char *modName,int modCount,StgWord64 *tixArr);
71 extern void hs_hpc_tick(int globIx,struct StgTSO_ *current_tso);
72 extern void hs_hpc_event(char *msg,struct StgTSO_ *current_tso);
73
74
75 #if defined(mingw32_HOST_OS)
76 extern int  rts_InstallConsoleEvent ( int action, StgStablePtr *handler );
77 extern void rts_ConsoleHandlerDone  ( int ev );
78 #else
79 extern int stg_sig_install (int, int, StgStablePtr *, void *);
80 #endif
81
82 #if defined(mingw32_HOST_OS)
83 extern StgInt console_handler;
84 #else
85 extern StgInt *signal_handlers;
86 #endif
87
88 #if defined(mingw32_HOST_OS)
89 void *getIOManagerEvent (void);
90 StgWord32 readIOManagerEvent (void);
91 void sendIOManagerEvent (StgWord32 event);
92 #else
93 extern void setIOManagerPipe (int fd);
94 #endif
95
96 extern void* allocateExec(unsigned int len);
97
98 /* -----------------------------------------------------------------------------
99    Storage manager stuff exported
100    -------------------------------------------------------------------------- */
101
102 extern void performGC(void);
103 extern void performMajorGC(void);
104 extern HsInt64 getAllocations( void );
105 extern void revertCAFs( void );
106 extern void dirty_MUT_VAR(StgRegTable *reg, StgClosure *p);
107
108 #endif /*  RTSEXTERNAL_H */