EventLog: Factor out ensureRoomFor*Event
[ghc.git] / rts / RtsUtils.c
index 4d6d362..ddf5a1f 100644 (file)
@@ -13,6 +13,7 @@
 #include "RtsUtils.h"
 #include "Ticky.h"
 #include "Schedule.h"
+#include "RtsFlags.h"
 
 #ifdef HAVE_TIME_H
 #include <time.h>
@@ -64,7 +65,7 @@ stgMallocBytes (int n, char *msg)
     n2 = (size_t) n;
     if ((space = (char *) malloc(n2)) == NULL) {
       /* don't fflush(stdout); WORKAROUND bug in Linux glibc */
-      MallocFailHook((W_) n, msg); /*msg*/
+      rtsConfig.mallocFailHook((W_) n, msg); /*msg*/
       stg_exit(EXIT_INTERNAL_ERROR);
     }
     return space;
@@ -79,7 +80,7 @@ stgReallocBytes (void *p, int n, char *msg)
     n2 = (size_t) n;
     if ((space = (char *) realloc(p, (size_t) n2)) == NULL) {
       /* don't fflush(stdout); WORKAROUND bug in Linux glibc */
-      MallocFailHook((W_) n, msg); /*msg*/
+      rtsConfig.mallocFailHook((W_) n, msg); /*msg*/
       stg_exit(EXIT_INTERNAL_ERROR);
     }
     return space;
@@ -92,7 +93,7 @@ stgCallocBytes (int n, int m, char *msg)
 
     if ((space = (char *) calloc((size_t) n, (size_t) m)) == NULL) {
       /* don't fflush(stdout); WORKAROUND bug in Linux glibc */
-      MallocFailHook((W_) n*m, msg); /*msg*/
+      rtsConfig.mallocFailHook((W_) n*m, msg); /*msg*/
       stg_exit(EXIT_INTERNAL_ERROR);
     }
     return space;
@@ -109,17 +110,17 @@ stgFree(void* p)
 
 /* -----------------------------------------------------------------------------
    Stack overflow
-   
+
    Not sure if this belongs here.
    -------------------------------------------------------------------------- */
 
 void
-stackOverflow(void)
+stackOverflow(StgTSO* tso)
 {
-  StackOverflowHook(RtsFlags.GcFlags.maxStkSize * sizeof(W_));
+    rtsConfig.stackOverflowHook(tso->tot_stack_size * sizeof(W_));
 
 #if defined(TICKY_TICKY)
-  if (RtsFlags.TickyFlags.showTickyStats) PrintTickyInfo();
+    if (RtsFlags.TickyFlags.showTickyStats) PrintTickyInfo();
 #endif
 }
 
@@ -129,34 +130,14 @@ heapOverflow(void)
     if (!heap_overflow)
     {
         /* don't fflush(stdout); WORKAROUND bug in Linux glibc */
-        OutOfHeapHook(0/*unknown request size*/,
-                      (W_)RtsFlags.GcFlags.maxHeapSize * BLOCK_SIZE);
+        rtsConfig.outOfHeapHook(0/*unknown request size*/,
+                                (W_)RtsFlags.GcFlags.maxHeapSize * BLOCK_SIZE);
 
         heap_overflow = rtsTrue;
     }
 }
 
 /* -----------------------------------------------------------------------------
-   genSym stuff, used by GHC itself for its splitting unique supply.
-
-   ToDo: put this somewhere sensible.
-   -------------------------------------------------------------------------  */
-
-static HsInt __GenSymCounter = 0;
-
-HsInt
-genSymZh(void)
-{
-    return(__GenSymCounter++);
-}
-HsInt
-resetGenSymZh(void) /* it's your funeral */
-{
-    __GenSymCounter=0;
-    return(__GenSymCounter);
-}
-
-/* -----------------------------------------------------------------------------
    Get the current time as a string.  Used in profiling reports.
    -------------------------------------------------------------------------- */
 
@@ -167,14 +148,14 @@ time_str(void)
     static char nowstr[26];
 
     if (now == 0) {
-       time(&now);
+        time(&now);
 #if HAVE_CTIME_R
-       ctime_r(&now, nowstr);
+        ctime_r(&now, nowstr);
 #else
-       strcpy(nowstr, ctime(&now));
+        strcpy(nowstr, ctime(&now));
 #endif
-       memmove(nowstr+16,nowstr+19,7);
-       nowstr[21] = '\0';  // removes the \n
+        memmove(nowstr+16,nowstr+19,7);
+        nowstr[21] = '\0';  // removes the \n
     }
     return nowstr;
 }
@@ -264,7 +245,7 @@ heapCheckFail( void )
 }
 #endif
 
-/* 
+/*
  * It seems that pthreads and signals interact oddly in OpenBSD & FreeBSD
  * pthreads (and possibly others). When linking with -lpthreads, we
  * have to use pthread_kill to send blockable signals. So use that
@@ -272,7 +253,7 @@ heapCheckFail( void )
  * genericRaise(), rather than raise(3).
  */
 int genericRaise(int sig) {
-#if defined(THREADED_RTS) && (defined(openbsd_HOST_OS) || defined(freebsd_HOST_OS) || defined(dragonfly_HOST_OS) || defined(netbsd_HOST_OS))
+#if defined(THREADED_RTS) && (defined(openbsd_HOST_OS) || defined(freebsd_HOST_OS) || defined(dragonfly_HOST_OS) || defined(netbsd_HOST_OS) || defined(darwin_HOST_OS))
         return pthread_kill(pthread_self(), sig);
 #else
         return raise(sig);
@@ -324,6 +305,17 @@ int rts_isProfiled(void)
 #endif
 }
 
+// Provides a way for Haskell programs to tell whether they're
+// dynamically-linked or not.
+int rts_isDynamic(void)
+{
+#ifdef DYNAMIC
+    return 1;
+#else
+    return 0;
+#endif
+}
+
 // Used for detecting a non-empty FPU stack on x86 (see #4914)
 void checkFPUStack(void)
 {