Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[cmake] simplify the detection of the ucontext stack setup
authorMartin Quinson <martin.quinson@loria.fr>
Mon, 7 Mar 2016 00:55:14 +0000 (01:55 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Mon, 7 Mar 2016 00:55:14 +0000 (01:55 +0100)
.gitignore
CMakeLists.txt
src/context_sysv_config.h.in [deleted file]
src/simix/UContext.cpp
tools/cmake/DefinePackages.cmake
tools/cmake/src/internal_config.h.in
tools/cmake/test_prog/prog_stacksetup.c

index 7362d13..5ea3ec4 100644 (file)
@@ -42,13 +42,10 @@ src/*_unit.c
 _*.c
 include/simgrid_config.h
 include/xbt/version.h
-include/instr/tracing_config.h
 include/smpi/smpif.h
-src/context_sysv_config.h
 src/internal_config.h
 src/smpi/smpicc
 src/smpi/smpirun
-simgrid-*.tar.gz
 testprog
 ### Cmake files
 CPackConfig.cmake
@@ -61,7 +58,6 @@ install_manifest.txt
 _CPack_Packages/
 CMakeCache.txt
 DartConfiguration.tcl
-simgrid.nsi
 TAGS
 Testing/
 Makefile
index a659417..fa02918 100644 (file)
@@ -579,23 +579,18 @@ if(GIT_DATE)
 endif()
 #--------------------------------------------------------------------------------------------------
 
-set(makecontext_CPPFLAGS_2 "")
 if(HAVE_UCONTEXT_H)
-  set(makecontext_CPPFLAGS "-DTEST_makecontext")
   if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
-    set(makecontext_CPPFLAGS_2 "-D_XOPEN_SOURCE=700")
+    set(makecontext_CPPFLAGS "${makecontext_CPPFLAGS} -D_XOPEN_SOURCE=700")
   endif()
 
   file(REMOVE ${CMAKE_BINARY_DIR}/conftestval)
 
-  if(CMAKE_CROSSCOMPILING)
-    set(RUN_makecontext_VAR "cross")
-    set(COMPILE_makecontext_VAR "cross")
-  else()
+  if(NOT CMAKE_CROSSCOMPILING)
     try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
       ${CMAKE_BINARY_DIR}
       ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
-      COMPILE_DEFINITIONS "${makecontext_CPPFLAGS} ${makecontext_CPPFLAGS_2}"
+      COMPILE_DEFINITIONS "${makecontext_CPPFLAGS}"
       )
   endif()
 
@@ -650,9 +645,6 @@ endif()
 
 ### File to create
 
-configure_file("${CMAKE_HOME_DIRECTORY}/src/context_sysv_config.h.in"
-  "${CMAKE_BINARY_DIR}/src/context_sysv_config.h" @ONLY IMMEDIATE)
-
 SET( CMAKEDEFINE "#cmakedefine" )
 configure_file("${CMAKE_HOME_DIRECTORY}/tools/cmake/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h" @ONLY IMMEDIATE)
 configure_file("${CMAKE_BINARY_DIR}/src/internal_config.h" "${CMAKE_BINARY_DIR}/src/internal_config.h" @ONLY IMMEDIATE)
@@ -720,7 +712,6 @@ set(generated_headers_to_install
   )
 
 set(generated_headers
-  ${CMAKE_CURRENT_BINARY_DIR}/src/context_sysv_config.h
   ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h
   )
 
diff --git a/src/context_sysv_config.h.in b/src/context_sysv_config.h.in
deleted file mode 100644 (file)
index 6643fd9..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Copyright (c) 2008, 2011, 2014. 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. */
-
-#ifndef _UCONTEXT_STACK_H
-#define _UCONTEXT_STACK_H
-
-/* stack setup macros */
-@pth_skaddr_makecontext@
-@pth_sksize_makecontext@
-
-#endif              /* _UCONTEXT_STACK_H */
index 7cb720a..f3ff9bb 100644 (file)
@@ -15,7 +15,6 @@
 #include "src/simix/smx_private.h"
 #include "src/simix/smx_private.hpp"
 #include "src/internal_config.h"
-#include "src/context_sysv_config.h"        /* loads context system definitions */
 #include "mc/mc.h"
 
 /** Many integers are needed to store a pointer
index 4f190d9..295dcb7 100644 (file)
@@ -703,8 +703,7 @@ set(headers_to_install
   )
 set(source_of_generated_headers
   include/simgrid_config.h.in
-  include/smpi/mpif.h.in
-  src/context_sysv_config.h.in)
+  include/smpi/mpif.h.in)
 
 ### depend of some variables setted upper
 # -->HAVE_THREAD_CONTEXTS HAVE_UCONTEXT_CONTEXTS
index 753c6e1..3ba5aaf 100644 (file)
 #cmakedefine PROCESSOR_x86_64 @PROCESSOR_x86_64@
 #cmakedefine CMAKE_SYSTEM_PROCESSOR @CMAKE_SYSTEM_PROCESSOR@
 
+/* Variables for the ucontexts */
+@pth_skaddr_makecontext@
+@pth_sksize_makecontext@
+
 /* MC variables */
 #cmakedefine HAVE_GETDTABLESIZE    @HAVE_GETDTABLESIZE@    /* getdtablesize: get descriptor table size */
 #cmakedefine HAVE_MMALLOC          @HAVE_MMALLOC@          /* Did we compile mmalloc in? */
index 0ae3568..46f0563 100644 (file)
@@ -1,25 +1,16 @@
-/* Copyright (c) 2010, 2014-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2010, 2014-2016. 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
 
 #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)
 #include <ucontext.h>
-#endif
 
 union alltypes {
   long l;
@@ -29,101 +20,46 @@ union alltypes {
   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 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));
+      sprintf(result, "(skaddr)+(sksize)-%d,(sksize)-%d", sizeof(union alltypes), sizeof(union alltypes));
     else
       strcpy(result, "(skaddr)+(sksize),(sksize)");
   } else {