X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=includes%2FRts.h;h=51351fab0d595717926f0fb020ccfd97ce7bdd46;hb=34c8d0312071f7d0f4d221a997d3408c653ef9e5;hp=7358c368c1df72c0ed3ea3c42cb7703b72875794;hpb=a2a67cd520b9841114d69a87a423dabcb3b4368e;p=ghc-hetmet.git diff --git a/includes/Rts.h b/includes/Rts.h index 7358c36..51351fa 100644 --- a/includes/Rts.h +++ b/includes/Rts.h @@ -5,6 +5,9 @@ * RTS external APIs. This file declares everything that the GHC RTS * exposes externally. * + * To understand the structure of the RTS headers, see the wiki: + * http://hackage.haskell.org/trac/ghc/wiki/Commentary/SourceTree/Includes + * * ---------------------------------------------------------------------------*/ #ifndef RTS_H @@ -45,6 +48,21 @@ extern "C" { #define ATTRIBUTE_ALIGNED(n) /*nothing*/ #endif +// Symbols that are extern, but private to the RTS, are declared +// with visibility "hidden" to hide them outside the RTS shared +// library. +#if defined(HAS_VISIBILITY_HIDDEN) +#define RTS_PRIVATE GNUC3_ATTRIBUTE(visibility("hidden")) +#else +#define RTS_PRIVATE /* disabled: RTS_PRIVATE */ +#endif + +#if __GNUC__ >= 4 +#define RTS_UNLIKELY(p) __builtin_expect((p),0) +#else +#define RTS_UNLIKELY(p) p +#endif + /* Fix for mingw stat problem (done here so it's early enough) */ #ifdef mingw32_HOST_OS #define __MSVCRT__ 1 @@ -80,10 +98,18 @@ void _assertFail(const char *filename, unsigned int linenum) else \ _assertFail(__FILE__, __LINE__) +#define CHECKM(predicate, msg, ...) \ + if (predicate) \ + /*null*/; \ + else \ + barf(msg, ##__VA_ARGS__) + #ifndef DEBUG #define ASSERT(predicate) /* nothing */ +#define ASSERTM(predicate,msg,...) /* nothing */ #else #define ASSERT(predicate) CHECK(predicate) +#define ASSERTM(predicate,msg,...) CHECKM(predicate,msg,##__VA_ARGS__) #endif /* DEBUG */ /* @@ -117,9 +143,16 @@ void _assertFail(const char *filename, unsigned int linenum) #define FMT_Word64 "lu" #define FMT_Int64 "ld" #else +#if defined(mingw32_HOST_OS) +/* mingw doesn't understand %llu/%lld - it treats them as 32-bit + rather than 64-bit */ +#define FMT_Word64 "I64u" +#define FMT_Int64 "I64d" +#else #define FMT_Word64 "llu" #define FMT_Int64 "lld" #endif +#endif /* ----------------------------------------------------------------------------- Include everything STG-ish @@ -165,6 +198,7 @@ void _assertFail(const char *filename, unsigned int linenum) #include "rts/Parallel.h" #include "rts/Hooks.h" #include "rts/Signals.h" +#include "rts/BlockSignals.h" #include "rts/Hpc.h" #include "rts/Flags.h" #include "rts/Adjustor.h" @@ -173,8 +207,12 @@ void _assertFail(const char *filename, unsigned int linenum) #include "rts/IOManager.h" #include "rts/Linker.h" #include "rts/Threads.h" +#include "rts/Ticky.h" #include "rts/Timer.h" #include "rts/Stable.h" +#include "rts/TTY.h" +#include "rts/Utils.h" +#include "rts/PrimFloat.h" /* Misc stuff without a home */ DLL_IMPORT_RTS extern char **prog_argv; /* so we can get at these from Haskell */ @@ -263,29 +301,4 @@ TICK_VAR(2) } #endif - -/* krc: I put this here because I don't think - it needs to be visible externally. - It used to be in StgTicky.h, but I got rid - of that. */ - -/* ----------------------------------------------------------------------------- - The StgEntCounter type - needed regardless of TICKY_TICKY - -------------------------------------------------------------------------- */ - -typedef struct _StgEntCounter { - /* Using StgWord for everything, becuase both the C and asm code - generators make trouble if you try to pack things tighter */ - StgWord registeredp; /* 0 == no, 1 == yes */ - StgInt arity; /* arity (static info) */ - StgInt stk_args; /* # of args off stack */ - /* (rest of args are in registers) */ - char *str; /* name of the thing */ - char *arg_kinds; /* info about the args types */ - StgInt entry_count; /* Trips to fast entry code */ - StgInt allocs; /* number of allocations by this fun */ - struct _StgEntCounter *link;/* link to chain them all together */ -} StgEntCounter; - - #endif /* RTS_H */