X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2Fstgdefs.h;h=7170d42490524ffde46e6a85b1f391b89d3c81bc;hb=e29ba33d544f481d12440bca6e97fab992e8ee40;hp=e04ebee44803a38b1e636f2fd60d81a0d8b5f854;hpb=e7d21ee4f8ac907665a7e170c71d59e13a01da09;p=ghc-hetmet.git diff --git a/ghc/includes/stgdefs.h b/ghc/includes/stgdefs.h index e04ebee..7170d42 100644 --- a/ghc/includes/stgdefs.h +++ b/ghc/includes/stgdefs.h @@ -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 +#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 + ( 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 ) +*/ + +#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 #include #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 , but + * is this the best place to do it? + * (the following has been moved from libposix.h) + */ + +#ifdef HAVE_SYS_TYPES_H +#include +#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 */