Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[sonar] Use unsigned char* for context stacks.
[simgrid.git] / src / kernel / context / ContextSwapped.cpp
index 9f40217..9aabd63 100644 (file)
@@ -71,14 +71,16 @@ SwappedContext::SwappedContext(std::function<void()> code, smx_actor_t actor, Sw
 #if SIMGRID_HAVE_MC
       /* Cannot use posix_memalign when SIMGRID_HAVE_MC. Align stack by hand, and save the
        * pointer returned by xbt_malloc0. */
-      char* alloc           = (char*)xbt_malloc0(size + xbt_pagesize);
-      stack_                = alloc - ((uintptr_t)alloc & (xbt_pagesize - 1)) + xbt_pagesize;
-      *((void**)stack_ - 1) = alloc;
+      unsigned char* alloc = static_cast<unsigned char*>(xbt_malloc0(size + xbt_pagesize));
+      stack_               = alloc - (reinterpret_cast<uintptr_t>(alloc) & (xbt_pagesize - 1)) + xbt_pagesize;
+      reinterpret_cast<unsigned char**>(stack_)[-1] = alloc;
 #elif !defined(_WIN32)
-      if (posix_memalign(&this->stack_, xbt_pagesize, size) != 0)
+      void* alloc;
+      if (posix_memalign(&alloc, xbt_pagesize, size) != 0)
         xbt_die("Failed to allocate stack.");
+      this->stack_ = static_cast<unsigned char*>(alloc);
 #else
-      this->stack_ = _aligned_malloc(size, xbt_pagesize);
+      this->stack_ = static_cast<unsigned char*>(_aligned_malloc(size, xbt_pagesize));
 #endif
 
 #ifndef _WIN32
@@ -93,20 +95,19 @@ SwappedContext::SwappedContext(std::function<void()> code, smx_actor_t actor, Sw
         /* This is fatal. We are going to fail at some point when we try reusing this. */
       }
 #endif
-      this->stack_ = (char*)this->stack_ + smx_context_guard_size;
+      this->stack_ = this->stack_ + smx_context_guard_size;
     } else {
-      this->stack_ = xbt_malloc0(smx_context_stack_size);
+      this->stack_ = static_cast<unsigned char*>(xbt_malloc0(smx_context_stack_size));
     }
 
 #if PTH_STACKGROWTH == -1
-    ASAN_ONLY(this->asan_stack_ = static_cast<char*>(this->stack_) + smx_context_usable_stack_size);
+    ASAN_ONLY(this->asan_stack_ = this->stack_ + smx_context_usable_stack_size);
 #else
     ASAN_ONLY(this->asan_stack_ = this->stack_);
 #endif
 #if HAVE_VALGRIND_H
-    unsigned int valgrind_stack_id =
-        VALGRIND_STACK_REGISTER(this->stack_, (char*)this->stack_ + smx_context_stack_size);
-    memcpy((char*)this->stack_ + smx_context_usable_stack_size, &valgrind_stack_id, sizeof valgrind_stack_id);
+    unsigned int valgrind_stack_id = VALGRIND_STACK_REGISTER(this->stack_, this->stack_ + smx_context_stack_size);
+    memcpy(this->stack_ + smx_context_usable_stack_size, &valgrind_stack_id, sizeof valgrind_stack_id);
 #endif
   }
 }
@@ -118,20 +119,20 @@ SwappedContext::~SwappedContext()
 
 #if HAVE_VALGRIND_H
   unsigned int valgrind_stack_id;
-  memcpy(&valgrind_stack_id, (char*)stack_ + smx_context_usable_stack_size, sizeof valgrind_stack_id);
+  memcpy(&valgrind_stack_id, stack_ + smx_context_usable_stack_size, sizeof valgrind_stack_id);
   VALGRIND_STACK_DEREGISTER(valgrind_stack_id);
 #endif
 
 #ifndef _WIN32
   if (smx_context_guard_size > 0 && not MC_is_active()) {
-    stack_ = (char*)stack_ - smx_context_guard_size;
+    stack_ = stack_ - smx_context_guard_size;
     if (mprotect(stack_, smx_context_guard_size, PROT_READ | PROT_WRITE) == -1) {
       XBT_WARN("Failed to remove page protection: %s", strerror(errno));
       /* try to pursue anyway */
     }
 #if SIMGRID_HAVE_MC
     /* Retrieve the saved pointer.  See SIMIX_context_stack_new above. */
-    stack_ = *((void**)stack_ - 1);
+    stack_ = reinterpret_cast<unsigned char**>(stack_)[-1];
 #endif
   }
 #endif /* not windows */
@@ -139,7 +140,7 @@ SwappedContext::~SwappedContext()
   xbt_free(stack_);
 }
 
-void* SwappedContext::get_stack()
+unsigned char* SwappedContext::get_stack()
 {
   return stack_;
 }