Skip to content

Glossary

Instruction SVC

Le Supervisor Call arm64 — l'unique instruction vers laquelle chaque syscall macOS sur Apple Silicon finit par compiler.

SVC (Supervisor Call) est l'instruction arm64 qui trappe du mode utilisateur (EL0) vers le mode noyau (EL1). Sur macOS, chaque syscall sur Apple Silicon — BSD ou Mach — utilise la même :

svc #0x80

L'immédiat #0x80 est conventionnel ; le vecteur d'exception XNU regarde la classe de l'instruction, pas l'immédiat, donc tout SVC vers le noyau marche. Le 0x80 est un clin d'œil à l'ascendance BSD de Darwin, où int 0x80 Intel était historiquement utilisé au même titre.

Ce qui distingue un syscall d'un autre, c'est le registre x16 :

  • x16 > 0syscall BSD. Le noyau dispatch via unix_syscall64().
  • x16 < 0Mach trap. Le noyau dispatch via mach_call_munger64().

Les arguments restent dans x0x7 au passage. Le noyau les lit directement depuis la frame de trap. La valeur de retour revient dans x0 (et x1 pour les types plus larges).

Sur macOS x86_64 (Intel et Rosetta 2), l'équivalent est l'instruction syscall avec un (class << 24) | numéro packed dans eax.

Les wrappers utilisateur autour de SVC vivent dans libsystem_kernel.dylib.