Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Revert the sem_open 'fix'
[simgrid.git] / buildtools / Cmake / test_prog / prog_stacksetup.c
index 8bad94a..8039927 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010. The SimGrid Team.
+/* Copyright (c) 2010, 2014. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
@@ -8,9 +8,9 @@
 #define _XOPEN_SOURCE
 #endif
 
-#ifdef WIN32
-       #include "ucontext.h"
-       #include "ucontext.c"
+#ifdef _XBT_WIN32
+#include "xbt/win32_ucontext.h"
+#include "win32_ucontext.c"
 #endif
 
 #include <stdio.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;
-    void  *vp;
-    void (*fp)(void);
-    char  *cp;
+  long l;
+  double d;
+  void *vp;
+  void (*fp) (void);
+  char *cp;
 };
-static volatile char *handler_addr = (char *)0xDEAD;
+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;
+  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)
@@ -51,96 +57,95 @@ 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++)
-        garbage[i] = 'X';
-    handler_addr = (char *)&dummy;
-    swapcontext(&uc_handler, &uc_main);
-    return;
+  char garbage[1024];
+  int i;
+  auto int dummy;
+  for (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));
-    if (skbuf == NULL)
-        exit(1);
-    for (i = 0; i < sksize*2+2*sizeof(union alltypes); i++)
-        skbuf[i] = 'A';
-    skaddr = skbuf+sizeof(union alltypes);
+  FILE *f;
+  char *skaddr;
+  char *skbuf;
+  int sksize;
+  char result[1024];
+  int i;
+  sksize = 32768;
+  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++)
+    skbuf[i] = 'A';
+  skaddr = skbuf + sizeof(union alltypes);
 #if defined(TEST_sigstack) || defined(TEST_sigaltstack)
-    {
-        struct sigaction sa;
+  {
+    struct sigaction sa;
 #if defined(TEST_sigstack)
-        struct sigstack ss;
+    struct sigstack ss;
 #elif defined(TEST_sigaltstack) && defined(HAVE_STACK_T)
-        stack_t ss;
+    stack_t ss;
 #else
-        struct sigaltstack ss;
+    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);
+    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);
+    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*/;
-    }
+    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);
-    }
+  {
+    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
-    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));
-        else
-             strcpy(result, "(skaddr)+(sksize),(sksize)");
-    }
-    else {
-        /* stack was placed into higher area */
-        if (*(skaddr+sksize*2) != 'A')
-            sprintf(result, "(skaddr),(sksize)-%d", sizeof(union alltypes));
-        else
-            strcpy(result, "(skaddr),(sksize)");
-    }
-    if ((f = fopen("conftestval", "w")) == NULL)
-        exit(1);
-    fprintf(f, "%s\n", result);
-    fclose(f);
-    exit(0);
-       return 1;
+  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));
+    else
+      strcpy(result, "(skaddr)+(sksize),(sksize)");
+  } else {
+    /* stack was placed into higher area */
+    if (*(skaddr + sksize * 2) != 'A')
+      sprintf(result, "(skaddr),(sksize)-%d", sizeof(union alltypes));
+    else
+      strcpy(result, "(skaddr),(sksize)");
+  }
+  if ((f = fopen("conftestval", "w")) == NULL)
+    exit(1);
+  fprintf(f, "%s\n", result);
+  fclose(f);
+  exit(0);
+  return 1;
 }