Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix the fix that fixes parameter passing through makecontext.
authorpini <pini@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Sat, 18 Dec 2010 09:09:17 +0000 (09:09 +0000)
committerpini <pini@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Sat, 18 Dec 2010 09:09:17 +0000 (09:09 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@9295 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/simix/smx_context_sysv.c

index b81509a..0248f28 100644 (file)
@@ -161,13 +161,17 @@ void smx_ctx_sysv_wrapper(int count, ...)
   uintptr_t ctx_addr = 0;
   va_list ap;
   smx_ctx_sysv_t context;
   uintptr_t ctx_addr = 0;
   va_list ap;
   smx_ctx_sysv_t context;
-  int i;
 
   va_start(ap, count);
 
   va_start(ap, count);
+#if (SIZEOF_VOIDP <= SIZEOF_INT)
+  ctx_addr = (uintptr_t)va_arg(ap, int);
+#else
+  int i;
   for(i = 0; i < count; i++) {
      ctx_addr <<= 8*sizeof(int);
      ctx_addr |= (uintptr_t)va_arg(ap, int);
   }
   for(i = 0; i < count; i++) {
      ctx_addr <<= 8*sizeof(int);
      ctx_addr |= (uintptr_t)va_arg(ap, int);
   }
+#endif
   va_end(ap);
   context = (smx_ctx_sysv_t)ctx_addr;
   (context->super.code) (context->super.argc, context->super.argv);
   va_end(ap);
   context = (smx_ctx_sysv_t)ctx_addr;
   (context->super.code) (context->super.argc, context->super.argv);