Files
Astral/src/arch/x86_64/arch_ctl.c
T
2022-08-19 22:53:08 -03:00

33 lines
483 B
C

#include <kernel/syscalls.h>
#include <arch/msr.h>
#include <errno.h>
#define ARCH_CTL_GSBASE 0
#define ARCH_CTL_FSBASE 1
syscallret syscall_arch_ctl(int func, void* arg){
syscallret retv;
retv.errno = 0;
retv.ret = 0;
switch(func){
case ARCH_CTL_GSBASE:
wrmsr(MSR_KERNELGSBASE, (uint64_t)arg);
break;
case ARCH_CTL_FSBASE:
wrmsr(MSR_FSBASE, (uint64_t)arg);
break;
default:
retv.errno = EINVAL;
}
if(retv.errno)
retv.ret = -1;
return retv;
}