Skip to main content

Module raw_syscall

Module raw_syscall 

Source
Expand description

raw_syscalltrappe 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 : number dans le registre de numéro, a1..a6 dans les six registres d’arguments (ABI System V Linux). Rend la valeur brute du noyau (une erreur est un -errno dans [-4095, -1] — la conversion en -1/errno est laissée à l’appelant libc, comme le __syscall_ret de musl).