Ensure SS and RSP are saved in trap frame
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 32s
Builds / ExectOS (amd64, release) (push) Successful in 34s
Builds / ExectOS (amd64, debug) (push) Successful in 46s
Builds / ExectOS (i686, release) (push) Successful in 43s

This commit is contained in:
2026-03-15 17:32:01 +01:00
parent 6cdb66cbb3
commit 0fed593147
2 changed files with 11 additions and 1 deletions

View File

@@ -104,12 +104,20 @@ ArTrap\Vector:
/* Test previous mode and swap GS if needed */ /* Test previous mode and swap GS if needed */
movl $0, TrapPreviousMode(%rbp) movl $0, TrapPreviousMode(%rbp)
mov %cs, %ax mov %cs, %ax
and $1, %al and $3, %al
mov %al, TrapPreviousMode(%rbp) mov %al, TrapPreviousMode(%rbp)
jz KernelMode$\Vector jz KernelMode$\Vector
swapgs swapgs
jmp UserMode$\Vector
KernelMode$\Vector: KernelMode$\Vector:
/* Save kernel stack pointer (SS:RSP) */
movl %ss, %eax
mov %eax, TrapSegSs(%rbp)
lea TRAP_FRAME_SIZE(%rbp), %rax
mov %rax, TrapRsp(%rbp)
UserMode$\Vector:
/* Push Frame Pointer, clear direction flag and pass to trap dispatcher */ /* Push Frame Pointer, clear direction flag and pass to trap dispatcher */
mov %rsp, %rcx mov %rsp, %rcx
cld cld

View File

@@ -56,6 +56,8 @@
#define TrapSegEs 330 #define TrapSegEs 330
#define TrapSegFs 332 #define TrapSegFs 332
#define TrapSegGs 334 #define TrapSegGs 334
#define TrapRsp 496
#define TrapSegSs 504
/* KTRAP_FRAME length related definitions */ /* KTRAP_FRAME length related definitions */
#define TRAP_FRAME_SIZE 512 #define TRAP_FRAME_SIZE 512