mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-26 01:20:25 +00:00
Kernel: Fix {read,write}_gs_ptr() for 64-bit addresses
This commit is contained in:
parent
3ed29895e4
commit
741ca5477c
Notes:
sideshowbarker
2024-07-18 08:49:00 +09:00
Author: https://github.com/gunnarbeutner Commit: https://github.com/SerenityOS/serenity/commit/741ca5477cb Pull-request: https://github.com/SerenityOS/serenity/pull/8795 Reviewed-by: https://github.com/Hendiadyoin1
2 changed files with 7 additions and 12 deletions
|
@ -62,25 +62,20 @@ ALWAYS_INLINE u16 get_gs()
|
|||
}
|
||||
#endif
|
||||
|
||||
ALWAYS_INLINE u32 read_gs_u32(u32 offset)
|
||||
ALWAYS_INLINE FlatPtr read_gs_ptr(FlatPtr offset)
|
||||
{
|
||||
u32 val;
|
||||
FlatPtr val;
|
||||
asm volatile(
|
||||
"movl %%gs:%a[off], %k[val]"
|
||||
"mov %%gs:%a[off], %[val]"
|
||||
: [val] "=r"(val)
|
||||
: [off] "ir"(offset));
|
||||
return val;
|
||||
}
|
||||
|
||||
ALWAYS_INLINE FlatPtr read_gs_ptr(u32 offset)
|
||||
{
|
||||
return read_gs_u32(offset);
|
||||
}
|
||||
|
||||
ALWAYS_INLINE void write_gs_u32(u32 offset, u32 val)
|
||||
ALWAYS_INLINE void write_gs_ptr(u32 offset, FlatPtr val)
|
||||
{
|
||||
asm volatile(
|
||||
"movl %k[val], %%gs:%a[off]" ::[off] "ir"(offset), [val] "ir"(val)
|
||||
"mov %[val], %%gs:%a[off]" ::[off] "ir"(offset), [val] "ir"(val)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
|
|
|
@ -256,7 +256,7 @@ public:
|
|||
#if ARCH(I386)
|
||||
get_gs() == GDT_SELECTOR_PROC &&
|
||||
#endif
|
||||
read_gs_u32(__builtin_offsetof(Processor, m_self)) != 0;
|
||||
read_gs_ptr(__builtin_offsetof(Processor, m_self)) != 0;
|
||||
}
|
||||
|
||||
ALWAYS_INLINE void set_scheduler_data(SchedulerPerProcessorData& scheduler_data)
|
||||
|
@ -298,7 +298,7 @@ public:
|
|||
ALWAYS_INLINE static void set_current_thread(Thread& current_thread)
|
||||
{
|
||||
// See comment in Processor::current_thread
|
||||
write_gs_u32(__builtin_offsetof(Processor, m_current_thread), FlatPtr(¤t_thread));
|
||||
write_gs_ptr(__builtin_offsetof(Processor, m_current_thread), FlatPtr(¤t_thread));
|
||||
}
|
||||
|
||||
ALWAYS_INLINE static Thread* idle_thread()
|
||||
|
|
Loading…
Reference in a new issue