summaryrefslogtreecommitdiffstats
path: root/arch/x86_64/usermode.c
blob: 0285e7d7f91daa06c911c7c6c30e2ab937a49e40 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "jove.h"

__attribute__((noreturn))
void usermode(void *ip, void *sp)
{
    __asm__ volatile("mov %0, %%rsp; \
                      movq %1, %%rcx; \
                      movq $0x202, %%r11; \
                      swapgs; \
                      sysretq"::
                      "r"(sp), "r"(ip): "memory");
    hcf();
}