O que o SYSENTER faz no modo Longo de 64 bits no Linux?

1

Existe uma instrução x86 sysenter . Esse parece ser o método de chamada rápida do sistema da Intel. SYSENTER parece ser válido no modo LONG (64 bits) nos processadores Intel. Isso parece ter caído em desuso devido ao syscall fornecido pela AMD. Pelo que entendi, essa instrução é como um syscall , mas o ônus está no usuário para configurá-lo com EIP / ESP, etc.

Você pode ver a lista de argumentos sysenter 32-bit . Com foco mínimo absoluto em syscall e int 0x80 , o que a instrução sysenter faz no Linux quando o chip está no modo Longo? Pode ser de alguma utilidade como está?

    
por Evan Carroll 03.10.2018 / 02:26

1 resposta

3

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.

    
por 03.10.2018 / 11:06