From 249d6a490d0bf91258829e358d48bcb2c50faa27 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 29 Aug 2021 12:26:40 +0200 Subject: [PATCH] Kernel: Add read_gs_value() and write_gs_value() Co-authored-by: Tom --- Kernel/Arch/x86/ASM_wrapper.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Kernel/Arch/x86/ASM_wrapper.h b/Kernel/Arch/x86/ASM_wrapper.h index 9bb508d515..187a1649d7 100644 --- a/Kernel/Arch/x86/ASM_wrapper.h +++ b/Kernel/Arch/x86/ASM_wrapper.h @@ -62,6 +62,25 @@ ALWAYS_INLINE u16 get_gs() } #endif +template +ALWAYS_INLINE T read_gs_value(FlatPtr offset) +{ + T val; + asm volatile( + "mov %%gs:%a[off], %[val]" + : [val] "=r"(val) + : [off] "ir"(offset)); + return val; +} + +template +ALWAYS_INLINE void write_gs_value(FlatPtr offset, T val) +{ + asm volatile( + "mov %[val], %%gs:%a[off]" ::[off] "ir"(offset), [val] "r"(val) + : "memory"); +} + ALWAYS_INLINE FlatPtr read_gs_ptr(FlatPtr offset) { FlatPtr val;