Explorar el Código

Kernel: Add read_gs_value() and write_gs_value()

Co-authored-by: Tom <tomut@yahoo.com>
Andreas Kling hace 3 años
padre
commit
249d6a490d
Se han modificado 1 ficheros con 19 adiciones y 0 borrados
  1. 19 0
      Kernel/Arch/x86/ASM_wrapper.h

+ 19 - 0
Kernel/Arch/x86/ASM_wrapper.h

@@ -62,6 +62,25 @@ ALWAYS_INLINE u16 get_gs()
 }
 #endif
 
+template<typename T>
+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<typename T>
+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;