[project @ 1998-02-25 16:03:04 by simonm]
[ghc-hetmet.git] / ghc / includes / stgdefs.h
index e04ebee..7170d42 100644 (file)
@@ -5,7 +5,7 @@
 #define STGDEFS_H
 
 /* machine/compiler/system dependencies :-(  Must be first! */
-#include "platform.h" /* generated by configure */
+/* OLD: #include "platform.h"  generated by configure */
 #include "config.h"   /* generated by configure */
 #include "error.h"
 #include "StgMachDeps.h"
@@ -33,12 +33,51 @@ void _stgAssert PROTO((char *, unsigned int));
 #define NON_POSIX_SOURCE
 #endif
 
+/* If _NEXT_SOURCE is defined, certain header files make more 
+ * constants visible to us.
+ * Perhaps it would have been wise, also to define NON_POSIX_SOURCE.
+ * Things seemed to work better without it however, so I have not
+ * done it. Nevertheless we do the signal stuff in a NON_POSIX way,
+ * see StgMacros.lh.
+ * CaS
+ */
+#ifdef nextstep3_TARGET_OS
+#define _NEXT_SOURCE
+#endif
+
+#ifdef aix_TARGET_OS
+/* for fd_set */
+#include <sys/select.h>
+#endif
+
 #ifdef NON_POSIX_SOURCE
 #undef _POSIX_SOURCE
 #undef _POSIX_C_SOURCE
 #else
+# ifndef aix_TARGET_OS
+/* already defined on aix */
 #define _POSIX_SOURCE 1
+# endif
+#ifndef irix_TARGET_OS
 #define _POSIX_C_SOURCE 199301L
+#else
+/* defines contributed by Tomasz Cholewo <tjchol01@mecca.spd.louisville.edu>
+   ( this is with gcc-2.7.2 for irix-6.{2.3} ) .. hopefully they will not
+   upset anything under irix5 ..
+   */
+#define _POSIX_C_SOURCE 199309L
+#define __EXTENSIONS__
+#endif
+/* Bogus use of non-existent variable POSIX_C_SOURCE in the supplied header files
+   for gcc-2.7.1 on Solaris forces us to define it: (this strikes when using st_atime
+   and friends in <sys/stat.h> )
+*/
+
+#if (__GNUC__ == 2) && (__GNUC_MINOR__ == 7) 
+/* sigh, not possible to get at bugfix release number (fixed in 2.7.2) */
+#define POSIX_C_SOURCE _POSIX_C_SOURCE
+#endif
+
 #include <unistd.h>
 #include <signal.h>
 #endif
@@ -57,28 +96,26 @@ void _stgAssert PROTO((char *, unsigned int));
     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 */
 
@@ -121,6 +158,21 @@ yikes! no register map defined!
 /* 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"
 
@@ -129,12 +181,11 @@ yikes! no register map defined!
 #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));
@@ -149,39 +200,40 @@ 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);
-
-extern StgFunPtr evaluateMain(STG_NO_ARGS);
-extern StgFunPtr returnMain(STG_NO_ARGS);
-extern StgFunPtr impossible_jump_after_switch(STG_NO_ARGS);
+void miniInterpret PROTO((StgFunPtr));
+void miniInterpret_debug PROTO(( StgFunPtr, void(*)(STG_NO_ARGS) ));
+void miniInterpretEnd(STG_NO_ARGS);
+
+/* UNUSED   -- SOF 9/97
+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
+int 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
@@ -191,15 +243,17 @@ EXTFUN(resumeThread);
 #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"
@@ -216,4 +270,25 @@ extern I_  _stg_rem PROTO((I_, I_));
 /* Saving and restoring registers */
 #include "StgRegs.h"
 
+
+/*
+ * 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
+# ifdef __FD_SETSIZE
+#  define FD_SETSIZE __FD_SETSIZE
+# else /* cop out */
+#  define FD_SETSIZE 1024
+# endif
+#endif
+
 #endif /* ! STGDEFS_H */