Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Cosmetics: XBT_PUBLIC is not needed here.
[simgrid.git] / src / xbt / xbt_main.c
index 30c1a84..615ad8d 100644 (file)
@@ -22,6 +22,9 @@
 #include "simgrid/sg_config.h"
 
 #include <stdio.h>
+#ifdef _XBT_WIN32
+#include <signal.h>
+#endif
 
 XBT_LOG_NEW_CATEGORY(xbt, "All XBT categories (simgrid toolbox)");
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(module, xbt, "module handling");
@@ -85,9 +88,13 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
 
 static void xbt_preinit(void) {
   unsigned int seed = 2147483647;
-
+#ifndef WIN32
   xbt_pagesize = sysconf(_SC_PAGESIZE);
-
+#else
+  SYSTEM_INFO si;
+  GetSystemInfo(&si);
+  xbt_pagesize = si.dwPageSize;
+#endif
 #ifdef MMALLOC_WANT_OVERRIDE_LEGACY
   mmalloc_preinit();
 #endif
@@ -152,13 +159,31 @@ void xbt_exit()
 
 /* these two functions belong to xbt/sysdep.h, which have no corresponding .c file */
 /** @brief like free, but you can be sure that it is a function  */
-XBT_PUBLIC(void) xbt_free_f(void *p)
+void xbt_free_f(void *p)
 {
   free(p);
 }
 
 /** @brief should be given a pointer to pointer, and frees the second one */
-XBT_PUBLIC(void) xbt_free_ref(void *d)
+void xbt_free_ref(void *d)
 {
   free(*(void **) d);
 }
+
+/** @brief Kill the program in silence */
+void xbt_abort(void)
+{
+#ifdef COVERAGE
+  /* Call __gcov_flush on abort when compiling with coverage options. */
+  extern void __gcov_flush(void);
+  __gcov_flush();
+#endif
+#ifdef _XBT_WIN32
+  /* It was said *in silence*.  We don't want to see the error message printed
+   * by the Microsoft's implementation of abort(). */
+  raise(SIGABRT);
+  signal(SIGABRT, SIG_DFL);
+  raise(SIGABRT);
+#endif
+  abort();
+}