/* The standard FFI interface */
#include "HsFFI.h"
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
/* -----------------------------------------------------------------------------
Functions exported by the RTS for use in Stg code
-------------------------------------------------------------------------- */
#endif
/* ToDo: remove? */
-extern I_ genSymZh(void);
-extern I_ resetGenSymZh(void);
+extern HsInt genSymZh(void);
+extern HsInt resetGenSymZh(void);
/* Alternate to raise(3) for threaded rts, for OpenBSD */
extern int genericRaise(int sig);
extern int cmp_thread(StgPtr tso1, StgPtr tso2);
extern int rts_getThreadId(StgPtr tso);
extern int forkOS_createThread ( HsStablePtr entry );
-extern StgInt forkProcess(HsStablePtr *entry);
-extern StgBool rtsSupportsBoundThreads(void);
+extern pid_t forkProcess(HsStablePtr *entry);
+extern HsBool rtsSupportsBoundThreads(void);
extern StgInt newSpark (StgRegTable *reg, StgClosure *p);
+extern void stopTimer(void);
+extern unsigned int n_capabilities;
/* grimy low-level support functions defined in StgPrimFloat.c */
extern StgDouble __encodeDouble (I_ size, StgByteArray arr, I_ e);
+extern StgDouble __2Int_encodeDouble (I_ j_high, I_ j_low, I_ e);
extern StgDouble __int_encodeDouble (I_ j, I_ e);
+extern StgDouble __word_encodeDouble (W_ j, I_ e);
extern StgFloat __encodeFloat (I_ size, StgByteArray arr, I_ e);
extern StgFloat __int_encodeFloat (I_ j, I_ e);
+extern StgFloat __word_encodeFloat (W_ j, I_ e);
extern StgInt isDoubleNaN(StgDouble d);
extern StgInt isDoubleInfinite(StgDouble d);
extern StgInt isDoubleDenormalized(StgDouble d);
extern void freeHaskellFunctionPtr(void* ptr);
/* Hpc stuff */
-extern int hs_hpc_module(char *modName,int modCount,StgWord64 *tixArr);
-extern void hs_hpc_tick(int globIx,struct StgTSO_ *current_tso);
-extern void hs_hpc_raise_event(struct StgTSO_ *current_tso);
-extern void hs_hpc_thread_finished_event(struct StgTSO_ *current_tso);
+extern int hs_hpc_module(char *modName, StgWord32 modCount, StgWord32 modHashNo,StgWord64 *tixArr);
+// Simple linked list of modules
+typedef struct _HpcModuleInfo {
+ char *modName; // name of module
+ StgWord32 tickCount; // number of ticks
+ StgWord32 tickOffset; // offset into a single large .tix Array
+ StgWord32 hashNo; // Hash number for this module's mix info
+ StgWord64 *tixArr; // tix Array; local for this module
+ struct _HpcModuleInfo *next;
+} HpcModuleInfo;
+
+extern HpcModuleInfo *hs_hpc_rootModule(void);
+
#if defined(mingw32_HOST_OS)
extern int rts_InstallConsoleEvent ( int action, StgStablePtr *handler );
#if defined(mingw32_HOST_OS)
void *getIOManagerEvent (void);
-StgWord32 readIOManagerEvent (void);
-void sendIOManagerEvent (StgWord32 event);
+HsWord32 readIOManagerEvent (void);
+void sendIOManagerEvent (HsWord32 event);
#else
extern void setIOManagerPipe (int fd);
#endif
-extern void* allocateExec(unsigned int len);
+extern void* allocateExec(unsigned int len, void **exec_addr);
+
+// Breakpoint stuff
/* -----------------------------------------------------------------------------
Storage manager stuff exported
extern HsInt64 getAllocations( void );
extern void revertCAFs( void );
extern void dirty_MUT_VAR(StgRegTable *reg, StgClosure *p);
+extern void dirty_MVAR(StgRegTable *reg, StgClosure *p);
#endif /* RTSEXTERNAL_H */