Skip to content

Commit

Permalink
remove obsolete saving of DS/ES registers
Browse files Browse the repository at this point in the history
On x86_64, DS/ES are not longer as segmenet registers.
During a system call it isn't reguired to save these registers.

This PR based on feedback from the Heinrich-Heine-Universität
Düsseldorf.
  • Loading branch information
stlankes committed Nov 9, 2023
1 parent 3da24f8 commit f634430
Showing 1 changed file with 2 additions and 15 deletions.
17 changes: 2 additions & 15 deletions src/arch/x86_64/kernel/syscall.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,8 @@ pub unsafe extern "C" fn syscall_handler() {
"push r9",
"push r10",
"push r11",
// save ds/es and set to kernel data descriptor
"mov rcx, ds",
"push rcx",
"mov rcx, es",
"push rcx",
"mov rcx, {kernel_ds}",
"mov ds, rcx",
"mov es, rcx",
"swapgs", // switch to kernel stack
// switch to kernel stack
"swapgs",
"mov rcx, rsp",
"rdgsbase rsp",
"push rcx",
Expand All @@ -43,11 +36,6 @@ pub unsafe extern "C" fn syscall_handler() {
"pop rcx",
"mov rsp, rcx",
"swapgs",
// restore context
"pop rcx",
"mov es, rcx",
"pop rcx",
"mov ds, rcx",
"pop r11",
"pop r10",
"pop r9",
Expand All @@ -58,7 +46,6 @@ pub unsafe extern "C" fn syscall_handler() {
"pop rcx",
"sysretq",
sym SYSHANDLER_TABLE,
kernel_ds = const 0x10,
options(noreturn)
);
}

0 comments on commit f634430

Please sign in to comment.