mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 09:07:45 +00:00
Kernel: Fix retreiving frame pointer from a thread
If we're trying to walk the stack for another thread, we can no longer retreive the EBP register from Thread::m_tss. Instead, we need to look at the top of the kernel stack, because all threads not currently running were last in kernel mode. Context switches now always trigger a brief switch to kernel mode, and Thread::m_tss only is used to save ESP and EIP. Fixes #2678
This commit is contained in:
parent
6d5bd8c76b
commit
bb84fad0bf
4 changed files with 67 additions and 28 deletions
|
@ -775,6 +775,7 @@ public:
|
|||
void switch_context(Thread* from_thread, Thread* to_thread);
|
||||
[[noreturn]] static void assume_context(Thread& thread, u32 flags);
|
||||
u32 init_context(Thread& thread, bool leave_crit);
|
||||
static bool get_context_frame_ptr(Thread& thread, u32& frame_ptr, u32& eip);
|
||||
|
||||
void set_thread_specific(u8* data, size_t len);
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue