From 7a64f55c0f4f1fbb7d5189e2c3826e42f7e8a506 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 15 Dec 2019 17:58:53 +0100 Subject: [PATCH] Kernel: Fix get_register_dump_from_stack() after IRQ entry changes I had to change the layout of RegisterDump a little bit to make the new IRQ entry points work. This broke get_register_dump_from_stack() which was expecting the RegisterDump to be badly aligned due to a goofy extra 16 bits which are no longer there. --- Kernel/Thread.cpp | 6 +++--- Kernel/Thread.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index 1d82218d35..f0a6a37bd1 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -544,7 +544,7 @@ ShouldUnblockThread Thread::dispatch_signal(u8 signal) // FIXME: This state is such a hack. It avoids trouble if 'current' is the process receiving a signal. set_state(Skip1SchedulerPass); } else { - auto& regs = get_RegisterDump_from_stack(); + auto& regs = get_register_dump_from_stack(); u32* stack = ®s.esp_if_crossRing; setup_stack(regs, stack); regs.eip = g_return_to_ring3_from_signal_trampoline.get(); @@ -571,12 +571,12 @@ void Thread::push_value_on_stack(u32 value) *stack_ptr = value; } -RegisterDump& Thread::get_RegisterDump_from_stack() +RegisterDump& Thread::get_register_dump_from_stack() { // The userspace registers should be stored at the top of the stack // We have to subtract 2 because the processor decrements the kernel // stack before pushing the args. - return *(RegisterDump*)(kernel_stack_top() - sizeof(RegisterDump) - 2); + return *(RegisterDump*)(kernel_stack_top() - sizeof(RegisterDump)); } void Thread::make_userspace_stack_for_main_thread(Vector arguments, Vector environment) diff --git a/Kernel/Thread.h b/Kernel/Thread.h index 6af40eed46..de100a6ab1 100644 --- a/Kernel/Thread.h +++ b/Kernel/Thread.h @@ -241,7 +241,7 @@ public: u32 frame_ptr() const { return m_tss.ebp; } u32 stack_ptr() const { return m_tss.esp; } - RegisterDump& get_RegisterDump_from_stack(); + RegisterDump& get_register_dump_from_stack(); u16 selector() const { return m_far_ptr.selector; } TSS32& tss() { return m_tss; }