Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
arch_prctl.c
Go to the documentation of this file.
1#include "hal/cpu/core.h"
2#include "hal/cpu/msr.h"
3#include "libk/serial.h"
4#include "procc/thread.h"
5#include <sys/syscall.h>
6
7#define ARCH_SET_GS 0x1001
8#define ARCH_SET_FS 0x1002
9#define ARCH_GET_FS 0x1003
10#define ARCH_GET_GS 0x1004
11#define ARCH_GET_CPUID 0x1011
12#define ARCH_SET_CPUID 0x1012
13
14int syscall_arch_prctl(int code, unsigned long addr) {
15 auto thr = get_current_core_data()->active_thread;
16 switch (code) {
17 case ARCH_SET_FS: {
18 serial2_printf("arch_prctl: set fs into 0x%x\n", addr);
19 thr->fs_base = addr;
21 break;
22 }
23 case ARCH_SET_GS: {
24 serial2_printf("arch_prctl: set gs into 0x%x\n", addr);
25 thr->gs_base = addr;
27 break;
28 }
29 case ARCH_GET_FS: {
30 serial2_printf("arch_prctl: get fs into 0x%x\n", addr);
31 *(unsigned long*)addr = thr->fs_base;
32 break;
33 }
34 case ARCH_GET_GS: {
35 serial2_printf("arch_prctl: get gs into 0x%x\n", addr);
36 *(unsigned long*)addr = thr->gs_base;
37 break;
38 }
39 default:
40 return -1;
41 }
42 return 0;
43}
#define ARCH_GET_GS
Definition arch_prctl.c:10
#define ARCH_SET_GS
Definition arch_prctl.c:7
int syscall_arch_prctl(int code, unsigned long addr)
Definition arch_prctl.c:14
#define ARCH_GET_FS
Definition arch_prctl.c:9
#define ARCH_SET_FS
Definition arch_prctl.c:8
each_core_data * get_current_core_data(void)
Definition core.c:54
volatile uint64_t addr
Definition e1000.hpp:0
void serial2_printf(const char *fmt,...)
void msrSetFSBase(uint64_t base)
Definition msr.c:19
void msrSetKernelGSBase(uint64_t base)
Definition msr.c:40
uint8_t code
Definition icmp.h:1