Improve hierarchical module name handling in MkExternalCore
[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 #ifdef HAVE_SYS_TYPES_H
19 #include <sys/types.h>
20 #endif
21
22 /* -----------------------------------------------------------------------------
23    Functions exported by the RTS for use in Stg code
24    -------------------------------------------------------------------------- */
25
26 #if IN_STG_CODE
27 extern void newCAF(void*);
28 #else
29 extern void newCAF(StgClosure*);
30 #endif
31
32 /* ToDo: remove? */
33 extern HsInt genSymZh(void);
34 extern HsInt resetGenSymZh(void);
35
36 /* Alternate to raise(3) for threaded rts, for OpenBSD */
37 extern int genericRaise(int sig);
38
39 /* Concurrency/Exception PrimOps. */
40 extern int cmp_thread(StgPtr tso1, StgPtr tso2);
41 extern int rts_getThreadId(StgPtr tso);
42 extern int forkOS_createThread ( HsStablePtr entry );
43 extern pid_t forkProcess(HsStablePtr *entry);
44 extern HsBool rtsSupportsBoundThreads(void);
45 extern StgInt newSpark (StgRegTable *reg, StgClosure *p);
46 extern void stopTimer(void);
47 extern unsigned int n_capabilities;
48
49 /* grimy low-level support functions defined in StgPrimFloat.c */
50 extern StgDouble __encodeDouble (I_ size, StgByteArray arr, I_ e);
51 extern StgDouble __int_encodeDouble (I_ j, I_ e);
52 extern StgFloat  __encodeFloat (I_ size, StgByteArray arr, I_ e);
53 extern StgFloat  __int_encodeFloat (I_ j, I_ e);
54 extern StgInt    isDoubleNaN(StgDouble d);
55 extern StgInt    isDoubleInfinite(StgDouble d);
56 extern StgInt    isDoubleDenormalized(StgDouble d);
57 extern StgInt    isDoubleNegativeZero(StgDouble d);
58 extern StgInt    isFloatNaN(StgFloat f);
59 extern StgInt    isFloatInfinite(StgFloat f);
60 extern StgInt    isFloatDenormalized(StgFloat f);
61 extern StgInt    isFloatNegativeZero(StgFloat f);
62
63 /* Suspending/resuming threads around foreign calls */
64 extern void *        suspendThread ( StgRegTable * );
65 extern StgRegTable * resumeThread  ( void * );
66
67 /* scheduler stuff */
68 extern void stg_scheduleThread (StgRegTable *reg, struct StgTSO_ *tso);
69
70 /* Creating and destroying an adjustor thunk */
71 extern void*  createAdjustor(int cconv, StgStablePtr hptr, StgFunPtr wptr,
72                              char *typeString);
73 extern void   freeHaskellFunctionPtr(void* ptr);
74
75 /* Hpc stuff */
76 extern int hs_hpc_module(char *modName, StgWord32 modCount, StgWord32 modHashNo,StgWord64 *tixArr);
77 // Simple linked list of modules
78 typedef struct _HpcModuleInfo {
79   char *modName;                // name of module
80   StgWord32 tickCount;          // number of ticks
81   StgWord32 tickOffset;         // offset into a single large .tix Array
82   StgWord32 hashNo;             // Hash number for this module's mix info
83   StgWord64 *tixArr;            // tix Array; local for this module
84   struct _HpcModuleInfo *next;
85 } HpcModuleInfo;
86
87 extern HpcModuleInfo *hs_hpc_rootModule(void);
88
89
90 #if defined(mingw32_HOST_OS)
91 extern int  rts_InstallConsoleEvent ( int action, StgStablePtr *handler );
92 extern void rts_ConsoleHandlerDone  ( int ev );
93 #else
94 extern int stg_sig_install (int, int, StgStablePtr *, void *);
95 #endif
96
97 #if defined(mingw32_HOST_OS)
98 extern StgInt console_handler;
99 #else
100 extern StgInt *signal_handlers;
101 #endif
102
103 #if defined(mingw32_HOST_OS)
104 void *getIOManagerEvent (void);
105 HsWord32 readIOManagerEvent (void);
106 void sendIOManagerEvent (HsWord32 event);
107 #else
108 extern void setIOManagerPipe (int fd);
109 #endif
110
111 extern void* allocateExec(unsigned int len);
112
113 // Breakpoint stuff
114 extern int rts_stop_next_breakpoint;
115 extern int rts_stop_on_exception;
116 extern HsStablePtr rts_breakpoint_io_action;
117
118 /* -----------------------------------------------------------------------------
119    Storage manager stuff exported
120    -------------------------------------------------------------------------- */
121
122 extern void performGC(void);
123 extern void performMajorGC(void);
124 extern HsInt64 getAllocations( void );
125 extern void revertCAFs( void );
126 extern void dirty_MUT_VAR(StgRegTable *reg, StgClosure *p);
127 extern void dirty_MVAR(StgRegTable *reg, StgClosure *p);
128
129 extern void dirty_TSO(StgClosure *tso);
130
131 #endif /*  RTSEXTERNAL_H */