As instruções da CPU que fornecem acesso às chamadas do sistema não existem no vácuo: elas são úteis apenas conforme determinado no contexto da ABI do sistema operacional. A ABI Linux x86 de 64 bits suporta os seguintes pontos de entrada (detalhados em LWN ):
-
SYSCALL
do código de 64 bits; - interromper 0x80 do código de 32 e 64 bits;
-
SYSENTER
do código de 32 bits.
(O SYSCALL
extra de 32 bits documentado no kernel é potencialmente confuso - é a interface de chamada do sistema x32, que usa ponteiros de 32 bits do código de 64 bits.)
Do userspace, as coisas ainda são mais simples:
-
i386
code (código de 32 bits com ponteiros de 32 bits) deve usar__kernel_vsyscall
no vDSO (isso determina qual mecanismo de chamada usar); - qualquer outra coisa deve usar
SYSCALL
.
Eu não tentei emitir um SYSENTER
do código de 64 bits no modo longo, mas não tenho certeza se isso será útil.