From 5550874386c0bb559bfb8583390d7536df67b804 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Thu, 16 Jan 2020 14:22:56 +0100 Subject: [PATCH] Use smx_ctx_wrapper for boost and raw contexts. --- src/kernel/context/ContextBoost.cpp | 14 +------------- src/kernel/context/ContextRaw.cpp | 25 ++++--------------------- src/kernel/context/ContextRaw.hpp | 2 -- 3 files changed, 5 insertions(+), 36 deletions(-) diff --git a/src/kernel/context/ContextBoost.cpp b/src/kernel/context/ContextBoost.cpp index 759837a4e1..9e5e486466 100644 --- a/src/kernel/context/ContextBoost.cpp +++ b/src/kernel/context/ContextBoost.cpp @@ -44,21 +44,9 @@ void BoostContext::wrapper(BoostContext::arg_type arg) #else BoostContext* context = static_cast(arg.data)[1]; context->verify_previous_context(static_cast(arg.data)[0]); - ASAN_FINISH_SWITCH(nullptr, &context->asan_ctx_->asan_stack_, &context->asan_ctx_->asan_stack_size_); static_cast(arg.data)[0]->fc_ = arg.fctx; #endif - try { - (*context)(); - context->Context::stop(); - } catch (ForcefulKillException const&) { - XBT_DEBUG("Caught a ForcefulKillException"); - } catch (simgrid::Exception const& e) { - XBT_INFO("Actor killed by an uncaught exception %s", simgrid::xbt::demangle(typeid(e).name()).get()); - throw; - } - ASAN_ONLY(context->asan_stop_ = true); - context->suspend(); - THROW_IMPOSSIBLE; + smx_ctx_wrapper(context); } void BoostContext::swap_into(SwappedContext* to_) diff --git a/src/kernel/context/ContextRaw.cpp b/src/kernel/context/ContextRaw.cpp index 1d39323aa5..4ac3c90fc3 100644 --- a/src/kernel/context/ContextRaw.cpp +++ b/src/kernel/context/ContextRaw.cpp @@ -13,11 +13,11 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context); // Raw context routines -typedef void (*rawctx_entry_point_t)(simgrid::kernel::context::RawContext*); +typedef void (*rawctx_entry_point_t)(simgrid::kernel::context::SwappedContext*); typedef void* raw_stack_t; extern "C" raw_stack_t raw_makecontext(void* malloced_stack, int stack_size, rawctx_entry_point_t entry_point, - simgrid::kernel::context::RawContext* arg); + simgrid::kernel::context::SwappedContext* arg); extern "C" void raw_swapcontext(raw_stack_t* old, raw_stack_t new_context); // TODO, we should handle FP, MMX and the x87 control-word (for x86 and x86_64) @@ -168,7 +168,7 @@ __asm__ ( update the definition of HAVE_RAW_CONTEXTS in tools/cmake/CompleteInFiles.cmake */ raw_stack_t raw_makecontext(void* malloced_stack, int stack_size, rawctx_entry_point_t entry_point, - simgrid::kernel::context::RawContext* arg) + simgrid::kernel::context::SwappedContext* arg) { THROW_UNIMPLEMENTED; } @@ -199,30 +199,13 @@ RawContext::RawContext(std::function&& code, actor::ActorImpl* actor, Sw : SwappedContext(std::move(code), actor, factory) { if (has_code()) { - this->stack_top_ = raw_makecontext(get_stack(), smx_context_stack_size, RawContext::wrapper, this); + this->stack_top_ = raw_makecontext(get_stack(), smx_context_stack_size, smx_ctx_wrapper, this); } else { if (MC_is_active()) MC_ignore_heap(&stack_top_, sizeof(stack_top_)); } } -void RawContext::wrapper(RawContext* context) -{ - ASAN_FINISH_SWITCH(nullptr, &context->asan_ctx_->asan_stack_, &context->asan_ctx_->asan_stack_size_); - try { - (*context)(); - context->Context::stop(); - } catch (ForcefulKillException const&) { - XBT_DEBUG("Caught a ForcefulKillException"); - } catch (simgrid::Exception const& e) { - XBT_INFO("Actor killed by an uncaught exception %s", simgrid::xbt::demangle(typeid(e).name()).get()); - throw; - } - ASAN_ONLY(context->asan_stop_ = true); - context->suspend(); - THROW_IMPOSSIBLE; -} - void RawContext::swap_into(SwappedContext* to_) { const RawContext* to = static_cast(to_); diff --git a/src/kernel/context/ContextRaw.hpp b/src/kernel/context/ContextRaw.hpp index 2d975e70ea..7e364730c6 100644 --- a/src/kernel/context/ContextRaw.hpp +++ b/src/kernel/context/ContextRaw.hpp @@ -33,8 +33,6 @@ public: private: /** pointer to top the stack stack */ void* stack_top_ = nullptr; - - XBT_ATTRIB_NORETURN static void wrapper(RawContext* context); }; class RawContextFactory : public SwappedContextFactory { -- 2.20.1