+thread_local Context* Context::current_context_ = nullptr;
+
+#ifndef WIN32
+/* Install or disable alternate signal stack, for SIGSEGV handler. */
+int Context::install_sigsegv_stack(stack_t* old_stack, bool enable)
+{
+ static std::array<unsigned char, SIGSTKSZ> sigsegv_stack;
+ stack_t stack;
+ stack.ss_sp = sigsegv_stack.data();
+ stack.ss_size = sigsegv_stack.size();
+ stack.ss_flags = enable ? 0 : SS_DISABLE;
+ return sigaltstack(&stack, old_stack);
+}
+#endif
+
+Context* Context::self()
+{
+ return current_context_;
+}
+void Context::set_current(Context* self)