Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix format string.
[simgrid.git] / tools / cmake / test_prog / prog_stacksetup.c
index f2a4461..5664e1b 100644 (file)
@@ -1,35 +1,17 @@
-/* Copyright (c) 2010, 2014-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2010, 2014-2018. The SimGrid Team. All rights reserved.    */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#if defined OSX
+#ifdef __APPLE__
 #define _XOPEN_SOURCE 700
 #endif
 
-#ifdef _XBT_WIN32
-#include "xbt/win32_ucontext.h"
-#include "win32_ucontext.c"
-#endif
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#if defined(TEST_sigstack) || defined(TEST_sigaltstack)
-#include <sys/types.h>
-#include <signal.h>
-#include <unistd.h>
-#endif
-
-#if defined(TEST_makecontext)
-#ifdef _XBT_WIN32
-#include "xbt/win32_ucontext.h"
-#else
 #include <ucontext.h>
-#endif
 
-#endif
 union alltypes {
   long l;
   double d;
@@ -37,115 +19,53 @@ union alltypes {
   void (*fp) (void);
   char *cp;
 };
-static volatile char *handler_addr = (char *) 0xDEAD;
-#if defined(TEST_sigstack) || defined(TEST_sigaltstack)
-static volatile int handler_done = 0;
-void handler(int sig)
-{
-  char garbage[1024];
-  int i;
-  auto int dummy;
-  for (i = 0; i < 1024; i++)
-    garbage[i] = 'X';
-  handler_addr = (char *) &dummy;
-  handler_done = 1;
-  return;
-}
-#endif
-#if defined(TEST_makecontext)
+static char *handler_addr = (char *) 0xDEAD;
 static ucontext_t uc_handler;
 static ucontext_t uc_main;
 void handler(void)
 {
   char garbage[1024];
-  int i;
   auto int dummy;
-  for (i = 0; i < 1024; i++)
+  for (int i = 0; i < 1024; i++)
     garbage[i] = 'X';
   handler_addr = (char *) &dummy;
   swapcontext(&uc_handler, &uc_main);
   return;
 }
-#endif
+
 int main(int argc, char *argv[])
 {
-  FILE *f;
-  char *skaddr;
-  char *skbuf;
-  int sksize;
-  char result[1024];
-  int i;
-  sksize = 32768;
-  skbuf = (char *) malloc(sksize * 2 + 2 * sizeof(union alltypes));
+  int sksize = 32768;
+  char *skbuf = (char *) malloc(sksize * 2 + 2 * sizeof(union alltypes));
   if (skbuf == NULL)
     exit(1);
-  for (i = 0; i < sksize * 2 + 2 * sizeof(union alltypes); i++)
+  for (int i = 0; i < sksize * 2 + 2 * sizeof(union alltypes); i++)
     skbuf[i] = 'A';
-  skaddr = skbuf + sizeof(union alltypes);
-#if defined(TEST_sigstack) || defined(TEST_sigaltstack)
-  {
-    struct sigaction sa;
-#if defined(TEST_sigstack)
-    struct sigstack ss;
-#elif defined(TEST_sigaltstack) && defined(HAVE_STACK_T)
-    stack_t ss;
-#else
-    struct sigaltstack ss;
-#endif
-#if defined(TEST_sigstack)
-    ss.ss_sp = (void *) (skaddr + sksize);
-    ss.ss_onstack = 0;
-    if (sigstack(&ss, NULL) < 0)
-      exit(1);
-#elif defined(TEST_sigaltstack)
-    ss.ss_sp = (void *) (skaddr + sksize);
-    ss.ss_size = sksize;
-    ss.ss_flags = 0;
-    if (sigaltstack(&ss, NULL) < 0)
-      exit(1);
-#endif
-    memset((void *) &sa, 0, sizeof(struct sigaction));
-    sa.sa_handler = handler;
-    sa.sa_flags = SA_ONSTACK;
-    sigemptyset(&sa.sa_mask);
-    sigaction(SIGUSR1, &sa, NULL);
-    kill(getpid(), SIGUSR1);
-    while (!handler_done)
-      /*nop */ ;
-  }
-#endif
-#if defined(TEST_makecontext)
-  {
-    if (getcontext(&uc_handler) != 0)
-      exit(1);
-    uc_handler.uc_link = NULL;
-    uc_handler.uc_stack.ss_sp = (void *) (skaddr + sksize);
-    uc_handler.uc_stack.ss_size = sksize;
-    uc_handler.uc_stack.ss_flags = 0;
-    makecontext(&uc_handler, handler, 0);
-    swapcontext(&uc_main, &uc_handler);
-  }
-#endif
+  char *skaddr = skbuf + sizeof(union alltypes);
+
+  if (getcontext(&uc_handler) != 0)
+    exit(1);
+  uc_handler.uc_link = NULL;
+  uc_handler.uc_stack.ss_sp = (void *) (skaddr + sksize);
+  uc_handler.uc_stack.ss_size = sksize;
+  uc_handler.uc_stack.ss_flags = 0;
+  makecontext(&uc_handler, handler, 0);
+  swapcontext(&uc_main, &uc_handler);
+
   if (handler_addr == (char *) 0xDEAD)
     exit(1);
   if (handler_addr < skaddr + sksize) {
     /* stack was placed into lower area */
     if (*(skaddr + sksize) != 'A')
-      sprintf(result, "(skaddr)+(sksize)-%d,(sksize)-%d",
-              sizeof(union alltypes), sizeof(union alltypes));
+      printf("(skaddr)+(sksize)-%zu;(sksize)-%zu", sizeof(union alltypes), sizeof(union alltypes));
     else
-      strcpy(result, "(skaddr)+(sksize),(sksize)");
+      printf("(skaddr)+(sksize);(sksize)");
   } else {
     /* stack was placed into higher area */
     if (*(skaddr + sksize * 2) != 'A')
-      sprintf(result, "(skaddr),(sksize)-%d", sizeof(union alltypes));
+      printf("(skaddr);(sksize)-%zu", sizeof(union alltypes));
     else
-      strcpy(result, "(skaddr),(sksize)");
+      printf("(skaddr);(sksize)");
   }
-  if ((f = fopen("conftestval", "w")) == NULL)
-    exit(1);
-  fprintf(f, "%s\n", result);
-  fclose(f);
-  exit(0);
-  return 1;
+  return 0;
 }