Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Prefer check size of void* against write 4 or 8
[simgrid.git] / src / xbt / win32_ucontext.c
index 757eb43..c91c39e 100644 (file)
@@ -21,6 +21,7 @@
  */  \r
     \r
 #include "win32_ucontext.h"\r
+\r
 int getcontext(ucontext_t * ucp) \r
 {\r
   int ret;\r
@@ -45,12 +46,12 @@ int makecontext(ucontext_t * ucp, void (*func) (), int argc, ...)
   int i;\r
   va_list ap;\r
   char *sp;\r
-  \r
-      /* Stack grows down */ \r
+\r
+   /* Stack grows down */\r
       sp = (char *) (size_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size;\r
   \r
       /* Reserve stack space for the arguments (maximum possible: argc*(8 bytes per argument)) */ \r
-      sp -= argc * 8;\r
+      sp -= argc * sizeof(void*);\r
   if (sp < (char *) ucp->uc_stack.ss_sp) {\r
     \r
         /* errno = ENOMEM; */ \r
@@ -59,15 +60,15 @@ int makecontext(ucontext_t * ucp, void (*func) (), int argc, ...)
   \r
       /* Set the instruction and the stack pointer */\r
   #ifdef I_X86_\r
-  ucp->uc_mcontext.Eip = (unsigned long) func;\r
-  ucp->uc_mcontext.Esp = (unsigned long) sp - 4;\r
+  ucp->uc_mcontext.Eip = (DWORD) func;\r
+  ucp->uc_mcontext.Esp = (DWORD) sp - sizeof(void*);\r
   #endif\r
   #ifdef _IA64_\r
   #  error "_IA64_"\r
   #endif\r
   #ifdef _AMD64_\r
-  ucp->uc_mcontext.Rip = (unsigned long long) func;\r
-  ucp->uc_mcontext.Rsp = (unsigned long long) sp - 8;\r
+  ucp->uc_mcontext.Rip = (DWORD64) func;\r
+  ucp->uc_mcontext.Rsp = (DWORD64) sp - sizeof(void*);\r
   #endif\r
 \r
       /* Save/Restore the full machine context */ \r
@@ -76,9 +77,9 @@ int makecontext(ucontext_t * ucp, void (*func) (), int argc, ...)
       /* Copy the arguments */ \r
       va_start(ap, argc);\r
   for (i = 0; i < argc; i++) {\r
-    memcpy(sp, ap, 8);\r
-    ap += 8;\r
-    sp += 8;\r
+    memcpy(sp, ap, sizeof(void*));\r
+    ap += sizeof(void*);\r
+    sp += sizeof(void*);\r
   }\r
   va_end(ap);\r
   return 0;\r