#else
#define _POSIX_SOURCE 1
#define _POSIX_C_SOURCE 199301L
+/* Alphas set _POSIX_VERSION (unistd.h) */
+/* ditto _POSIX2_C_VERSION
+ _POSIX2_VERSION
+ _POSIX_4SOURCE
+*/
#include <unistd.h>
#include <signal.h>
#endif
GCC is schizophrenic about whether it adds these into its
own headers for you; so we have no choice but to throw them in.
*/
-extern int fclose PROTO((FILE *));
-extern int fflush PROTO((FILE *));
-extern int fgetc PROTO((FILE *));
-/* extern int fgetpos PROTO((FILE *, fpos_t *)); */
-extern int fprintf PROTO((FILE *, const char *, ...));
-extern int fputc PROTO((int, FILE *));
-extern int fputs PROTO((const char *, FILE *));
-extern size_t fread PROTO((void *, size_t, size_t, FILE *));
-extern int fscanf PROTO((FILE *, const char *, ...));
-extern int fseek PROTO((FILE *, long int, int));
-/* extern int fsetpos PROTO((FILE *, const fpos_t *)); */
-extern size_t fwrite PROTO((const void *, size_t, size_t, FILE *));
-extern void perror PROTO((const char *));
-extern int printf PROTO((const char *, ...));
-extern int puts PROTO((const char *));
-extern int remove PROTO((const char *));
-extern int rename PROTO((const char *, const char *));
-extern void rewind PROTO((FILE *));
-extern int scanf PROTO((const char *, ...));
-extern void setbuf PROTO((FILE *, char *));
-extern int setvbuf PROTO((FILE *, char *, int, size_t));
-extern int sscanf PROTO((const char *, const char *, ...));
+int fclose PROTO((FILE *));
+int fflush PROTO((FILE *));
+int fgetc PROTO((FILE *));
+int fprintf PROTO((FILE *, const char *, ...));
+int fputc PROTO((int, FILE *));
+int fputs PROTO((const char *, FILE *));
+size_t fread PROTO((void *, size_t, size_t, FILE *));
+int fscanf PROTO((FILE *, const char *, ...));
+int fseek PROTO((FILE *, long int, int));
+size_t fwrite PROTO((const void *, size_t, size_t, FILE *));
+void perror PROTO((const char *));
+int printf PROTO((const char *, ...));
+int puts PROTO((const char *));
+int remove PROTO((const char *));
+int rename PROTO((const char *, const char *));
+void rewind PROTO((FILE *));
+int scanf PROTO((const char *, ...));
+void setbuf PROTO((FILE *, char *));
+int setvbuf PROTO((FILE *, char *, int, size_t));
+int sscanf PROTO((const char *, const char *, ...));
/* end of hack */
#endif /* STDC_HEADERS */
+/*
+ * threadWaitWrite# uses FD_SETSIZE to distinguish
+ * between read file descriptors and write fd's.
+ * Hence we need to include <sys/types.h>, but
+ * is this the best place to do it?
+ * (the following has been moved from libposix.h)
+ */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif /* HAVE_SYS_TYPES_H */
+
+#ifndef FD_SETSIZE
+#define FD_SETSIZE 1024
+#endif
+
#if ! defined(EXIT_SUCCESS) || ! defined(EXIT_FAILURE)
/* "stdlib.h" should have defined these; but at least
on SunOS 4.1.3, this is not so.
/* macros to deal with stacks (no longer heap) growing in either dirn */
#include "StgDirections.h"
+/* declarations for all the runtime flags for the RTS */
+#ifdef IN_GHC_RTS
+#include "RtsFlags.h"
+#endif
+/* and those that are visible *everywhere* (RTS + Haskell code) */
+struct ALL_FLAGS {
+#ifdef TICKY_TICKY
+ W_ doUpdEntryCounts; /* if true, we cannot short-circuit Inds,
+ common-up {Int,Char}Likes or Consts
+ */
+#endif
+ W_ dummy_entry; /* so there is *something* in it... */
+};
+extern struct ALL_FLAGS AllFlags;
+
/* declarations for garbage collection routines */
#include "SMinterface.h"
#include "COptRegs.h"
#include "COptWraps.h"
-/* these will come into play if you use -DDO_RUNTIME_PROFILING (default: off) */
-#include "RednCounts.h"
+/* these will come into play if you use -DTICKY_TICKY (default: off) */
+#include "Ticky.h"
-extern hash_t hash_str PROTO((char *str));
-extern hash_t hash_fixed PROTO((char *data, I_ len));
-extern I_ decode PROTO((char *s));
+hash_t hash_str PROTO((char *str));
+hash_t hash_fixed PROTO((char *data, I_ len));
/* ullong (64bit) formatting */
char *ullong_format_string PROTO((ullong x, char *s, rtsBool with_commas));
#include "Threads.h"
#include "Parallel.h"
-/* Things will happen in here if the driver does -DUSE_COST_CENTRES */
+/* Things will happen in here if the driver does -DPROFILING */
#include "CostCentre.h"
-/* These will come into play if you use -DLIFE_PROFILE or -DHEAP_PROF_WITH_AGE */
-#include "AgeProfile.h"
-
-/* These will come into play if you use -DFORCE_GC */
-#include "Force_GC.h"
-
/* GRAN and PAR stuff */
#include "GranSim.h"
-#if defined(USE_COST_CENTRES) || defined(CONCURRENT)
+#if defined(PROFILING) || defined(CONCURRENT)
char * time_str(STG_NO_ARGS);
#endif
/* declarations for runtime-system entry points */
-extern void miniInterpret PROTO((StgFunPtr));
-extern void miniInterpret_debug PROTO(( StgFunPtr, void(*)(STG_NO_ARGS) ));
-extern void miniInterpretEnd(STG_NO_ARGS);
+void miniInterpret PROTO((StgFunPtr));
+void miniInterpret_debug PROTO(( StgFunPtr, void(*)(STG_NO_ARGS) ));
+void miniInterpretEnd(STG_NO_ARGS);
-extern StgFunPtr evaluateMain(STG_NO_ARGS);
-extern StgFunPtr returnMain(STG_NO_ARGS);
-extern StgFunPtr impossible_jump_after_switch(STG_NO_ARGS);
+StgFunPtr evaluateMain(STG_NO_ARGS);
+StgFunPtr returnMain(STG_NO_ARGS);
+StgFunPtr impossible_jump_after_switch(STG_NO_ARGS);
/* hooks: user might write some of their own */
-extern void ErrorHdrHook PROTO((FILE *));
-extern void OutOfHeapHook PROTO((W_, W_));
-extern void StackOverflowHook PROTO((I_));
-extern void MallocFailHook PROTO((I_));
-extern void PatErrorHdrHook PROTO((FILE *));
-extern void PreTraceHook PROTO((FILE *));
-extern void PostTraceHook PROTO((FILE *));
+void ErrorHdrHook PROTO((FILE *));
+void OutOfHeapHook PROTO((W_, W_));
+void StackOverflowHook PROTO((I_));
+#ifdef CONCURRENT
+void NoRunnableThreadsHook (STG_NO_ARGS);
+#endif
+void MallocFailHook PROTO((I_, char *));
+void PatErrorHdrHook PROTO((FILE *));
+void PreTraceHook PROTO((FILE *));
+void PostTraceHook PROTO((FILE *));
+void defaultsHook (STG_NO_ARGS);
+void initEachPEHook (STG_NO_ARGS);
EXTFUN(startStgWorld);
#ifdef CONCURRENT
#endif
extern char **prog_argv; /* from runtime/main/main.lc */
-extern I_ prog_argc;
+extern int prog_argc;
extern char **environ; /* we can get this one straight */
EXTDATA(STK_STUB_closure);
/* now these really *DO* need to be somewhere else... */
-extern char *time_str(STG_NO_ARGS);
-extern I_ stg_exit PROTO((I_));
-extern I_ _stg_rem PROTO((I_, I_));
+char *time_str(STG_NO_ARGS);
+I_ stg_exit PROTO((I_));
+I_ _stg_rem PROTO((I_, I_));
+char *stgMallocBytes PROTO((I_, char *));
+char *stgMallocWords PROTO((I_, char *));
/* definitions for closures */
#include "SMClosures.h"