// 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)
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;
}
: 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<RawContext*>(to_);