Expand description
raw_syscall — trappe de sortie (escape hatch) syscall générique.
§⚠️ EXCEPTION ASSUMÉE — À RETIRER (cf. docs/EXCEPTIONS.md, ADR-087)
Cette fonction est une entorse délibérée et temporaire à deux règles :
- ADR-021 conv. 3 (« pas de wrapper générique pour syscalls multiplexés ; chaque opération = une fonction dédiée typée ») ;
- la règle « la libc binde la couche 1, jamais la couche 0 » (le seul
consommateur, le shim libc
syscall, tape ici directement).
Raison d’être : la libc C-ABI d’Air doit fournir la fonction POSIX/Linux
long syscall(long number, ...), que le pal unix de Rust std appelle en
direct pour deux services sans fonction libc typée : futex (aucune fonction
libc n’a jamais existé — base des Mutex/Condvar/park de std) et gettid
(pas de wrapper garanti avant glibc 2.30). syscall(2) est, par nature, une
trappe non typée — on ne peut pas la rendre typée sans la dénaturer.
Plan de retrait (action item amont) : faire que le pal std n’ait pas
besoin d’un syscall générique sur *-linux-air (router futex/gettid vers
des fonctions typées, ou pal Air dédié) — avec l’équipe Rust. Cette fonction
disparaît dès que l’amont est résolu.
Périmètre exercé par M5 : hello-std étant mono-thread, futex n’est jamais
appelé au runtime (invoqué uniquement sur contention de verrou) ; seul gettid
l’est éventuellement au démarrage. Le symbole doit néanmoins exister pour lier.
Functions§
- raw_
syscall ⚠ - Exécute un syscall arbitraire :
numberdans le registre de numéro,a1..a6dans les six registres d’arguments (ABI System V Linux). Rend la valeur brute du noyau (une erreur est un-errnodans[-4095, -1]— la conversion en-1/errnoest laissée à l’appelant libc, comme le__syscall_retde musl).