From: Arnaud Giersch Date: Wed, 6 Mar 2019 16:51:30 +0000 (+0100) Subject: [sonar] Use unsigned char* for context stacks. X-Git-Tag: v3_22~159 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/038fd3c4a495508204a7b9c2e9745426a0bfadf1 [sonar] Use unsigned char* for context stacks. --- diff --git a/src/kernel/context/Context.hpp b/src/kernel/context/Context.hpp index 97b99e22ac..c02dd39ea4 100644 --- a/src/kernel/context/Context.hpp +++ b/src/kernel/context/Context.hpp @@ -104,7 +104,7 @@ XBT_PRIVATE void SIMIX_context_mod_init(); XBT_PRIVATE void SIMIX_context_mod_exit(); #ifndef WIN32 -XBT_PUBLIC_DATA char sigsegv_stack[SIGSTKSZ]; +XBT_PUBLIC_DATA unsigned char sigsegv_stack[SIGSTKSZ]; #endif /** @brief Executes all the processes to run (in parallel if possible). */ diff --git a/src/kernel/context/ContextBoost.cpp b/src/kernel/context/ContextBoost.cpp index 4298641e5c..95743c6f2b 100644 --- a/src/kernel/context/ContextBoost.cpp +++ b/src/kernel/context/ContextBoost.cpp @@ -31,9 +31,9 @@ BoostContext::BoostContext(std::function code, smx_actor_t actor, Swappe /* We need to pass the bottom of the stack to make_fcontext, depending on the stack direction it may be the lower or higher address: */ #if PTH_STACKGROWTH == -1 - void* stack = static_cast(get_stack()) + smx_context_usable_stack_size; + unsigned char* stack = get_stack() + smx_context_usable_stack_size; #else - void* stack = get_stack(); + unsigned char* stack = get_stack(); #endif #if BOOST_VERSION < 106100 this->fc_ = boost::context::make_fcontext(stack, smx_context_usable_stack_size, BoostContext::wrapper); diff --git a/src/kernel/context/ContextSwapped.cpp b/src/kernel/context/ContextSwapped.cpp index 9f402179b9..9aabd63108 100644 --- a/src/kernel/context/ContextSwapped.cpp +++ b/src/kernel/context/ContextSwapped.cpp @@ -71,14 +71,16 @@ SwappedContext::SwappedContext(std::function 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(xbt_malloc0(size + xbt_pagesize)); + stack_ = alloc - (reinterpret_cast(alloc) & (xbt_pagesize - 1)) + xbt_pagesize; + reinterpret_cast(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(alloc); #else - this->stack_ = _aligned_malloc(size, xbt_pagesize); + this->stack_ = static_cast(_aligned_malloc(size, xbt_pagesize)); #endif #ifndef _WIN32 @@ -93,20 +95,19 @@ SwappedContext::SwappedContext(std::function 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(xbt_malloc0(smx_context_stack_size)); } #if PTH_STACKGROWTH == -1 - ASAN_ONLY(this->asan_stack_ = static_cast(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(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_; } diff --git a/src/kernel/context/ContextSwapped.hpp b/src/kernel/context/ContextSwapped.hpp index 0195e1b7c0..f7eedcd0ff 100644 --- a/src/kernel/context/ContextSwapped.hpp +++ b/src/kernel/context/ContextSwapped.hpp @@ -48,7 +48,7 @@ public: virtual void swap_into(SwappedContext* to) = 0; // Defined in Raw, Boost and UContext subclasses - void* get_stack(); + unsigned char* get_stack(); static thread_local uintptr_t worker_id_; @@ -60,7 +60,7 @@ public: #endif private: - void* stack_ = nullptr; /* the thread stack */ + unsigned char* stack_ = nullptr; /* the thread stack */ SwappedContextFactory* const factory_; // for sequential and parallel run_all() }; diff --git a/src/simix/smx_global.cpp b/src/simix/smx_global.cpp index 82d46abb4f..2686185031 100644 --- a/src/simix/smx_global.cpp +++ b/src/simix/smx_global.cpp @@ -77,7 +77,7 @@ static void segvhandler(int signum, siginfo_t* siginfo, void* /*context*/) std::raise(signum); } -char sigsegv_stack[SIGSTKSZ]; /* alternate stack for SIGSEGV handler */ +unsigned char sigsegv_stack[SIGSTKSZ]; /* alternate stack for SIGSEGV handler */ /** * Install signal handler for SIGSEGV. Check that nobody has already installed