X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/82e2aa78964d9150810411ce80fa62ab3aa4aaa9..8d35ce927dd5951b952d5baa2c898db31b8fcb4c:/src/kernel/context/ContextUnix.cpp diff --git a/src/kernel/context/ContextUnix.cpp b/src/kernel/context/ContextUnix.cpp index 2ebe3da45a..264b603318 100644 --- a/src/kernel/context/ContextUnix.cpp +++ b/src/kernel/context/ContextUnix.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2009-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2009-2020. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -25,12 +25,12 @@ static_assert(sizeof(simgrid::kernel::context::UContext*) <= CTX_ADDR_LEN * size /* Make sure that this symbol is easy to recognize by name, even on exotic platforms */ extern "C" { -static void smx_ctx_wrapper(int i1, int i2); +XBT_ATTRIB_NORETURN void smx_ctx_wrapper(int i1, int i2); } // The name of this function is currently hardcoded in MC (as string). // Do not change it without fixing those references as well. -static void smx_ctx_wrapper(int i1, int i2) +void smx_ctx_wrapper(int i1, int i2) { // Rebuild the Context* pointer from the integers: int ctx_addr[CTX_ADDR_LEN] = {i1, i2}; @@ -44,11 +44,12 @@ static void smx_ctx_wrapper(int i1, int i2) } catch (simgrid::ForcefulKillException const&) { XBT_DEBUG("Caught a ForcefulKillException"); } catch (simgrid::Exception const& e) { - XBT_INFO("Actor killed by an uncatched exception %s", simgrid::xbt::demangle(typeid(e).name()).get()); + 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; } namespace simgrid { @@ -74,7 +75,7 @@ UContext::UContext(std::function&& code, actor::ActorImpl* actor, Swappe this->uc_.uc_stack.ss_sp = sg_makecontext_stack_addr(get_stack()); this->uc_.uc_stack.ss_size = sg_makecontext_stack_size(smx_context_stack_size); // Makecontext expects integer arguments; we want to pass a pointer. - // This context address is decomposed into a serie of integers, which are passed as arguments to makecontext. + // This context address is decomposed into a series of integers, which are passed as arguments to makecontext. int ctx_addr[CTX_ADDR_LEN]{}; UContext* arg = this; @@ -83,7 +84,7 @@ UContext::UContext(std::function&& code, actor::ActorImpl* actor, Swappe #if SIMGRID_HAVE_MC if (MC_is_active()) { - MC_register_stack_area(get_stack(), actor, &(this->uc_), smx_context_stack_size); + MC_register_stack_area(get_stack(), &(this->uc_), smx_context_stack_size); } #endif } @@ -91,10 +92,10 @@ UContext::UContext(std::function&& code, actor::ActorImpl* actor, Swappe void UContext::swap_into(SwappedContext* to_) { - UContext* to = static_cast(to_); + const UContext* to = static_cast(to_); ASAN_ONLY(void* fake_stack = nullptr); - ASAN_ONLY(to->asan_ctx_ = this); - ASAN_START_SWITCH(this->asan_stop_ ? nullptr : &fake_stack, to->asan_stack_, to->asan_stack_size_); + ASAN_ONLY(to_->asan_ctx_ = this); + ASAN_START_SWITCH(this->asan_stop_ ? nullptr : &fake_stack, to_->asan_stack_, to_->asan_stack_size_); swapcontext(&this->uc_, &to->uc_); ASAN_FINISH_SWITCH(fake_stack, &this->asan_ctx_->asan_stack_, &this->asan_ctx_->asan_stack_size_); }