xolatilization/xanual/syscall.md

28 lines
2.0 KiB
Markdown
Executable File

# SYSCALL — Fast System Call
## Description
SYSCALL invokes an OS system-call handler at privilege level 0. It does so by loading RIP from the IA32_LSTAR MSR (after saving the address of
the instruction following SYSCALL into RCX). The WRMSR instruction ensures that the IA32_LSTAR MSR always contain a canonical address.
## Instruction
| Opcode | Assembly | Op/En | Modern Mode | Legacy Mode | Description |
|--------|----------|-------|-------------|-------------|--------------------------------------------------------------------------------------|
| 0F 05 | SYSCALL | NP | Valid | Invalid | Fast call to privilege level 0 system procedures. |
## Information
SYSCALL also saves RFLAGS into R11 and then masks RFLAGS using the IA32_FMASK MSR (MSR address C0000084H); specifically, the processor clears
in RFLAGS every bit corresponding to a bit that is set in the IA32_FMASK MSR.
SYSCALL loads the CS and SS selectors with values derived from bits 47:32 of the IA32_STAR MSR. However, the CS and SS descriptor caches are
not loaded from the descriptors (in GDT or LDT) referenced by those selectors. Instead, the descriptor caches are loaded with fixed values. See
the Operation section for details. It is the responsibility of OS software to ensure that the descriptors (in GDT or LDT) referenced by those
selector values correspond to the fixed values loaded into the descriptor caches; the SYSCALL instruction does not ensure this correspondence.
The SYSCALL instruction does not save the stack pointer (RSP). If the OS system-call handler will change the stack pointer, it is the
responsibility of software to save the previous value of the stack pointer. This might be done prior to executing SYSCALL, with software
restoring the stack pointer with the instruction following SYSCALL (which will be executed after SYSRET). Alternatively, the OS system-call
handler may save the stack pointer and restore it before executing SYSRET.