summaryrefslogtreecommitdiff
path: root/lib/libc/internal/arch/x86_64/tcb.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/internal/arch/x86_64/tcb.c')
-rw-r--r--lib/libc/internal/arch/x86_64/tcb.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/libc/internal/arch/x86_64/tcb.c b/lib/libc/internal/arch/x86_64/tcb.c
new file mode 100644
index 00000000..6e1f0c15
--- /dev/null
+++ b/lib/libc/internal/arch/x86_64/tcb.c
@@ -0,0 +1,13 @@
+#include <libc/tcb.h>
+
+__attribute__((__always_inline__)) void __libc_tcb_set(uint64_t tcb)
+{
+ __asm__ volatile("wrfsbase %0" ::"r"(tcb));
+}
+
+__attribute__((__always_inline__)) void *__libc_tcb_get(void)
+{
+ void *tcb;
+ __asm__ volatile("rdfsbase %0" : "=r"(tcb));
+ return tcb;
+}