Expand description
syscall.rs - System Call Dispatcher (EL0 → EL1)
SVC #0 命令によるシステムコールを処理します。 レジスタ規約: x8 = システムコール番号, x0〜x5 = 引数, x0 = 戻り値
§安定性ポリシー
アプリケーション (EL0) がどんな引数でシステムコールを発行しても、 カーネルはパニック・クラッシュしてはならない。
- ユーザポインタは必ず
crate::kernel::usercopyの検証関数を通すこと - 不正な引数はエラー値 (
usize::MAXまたは 0) を返して拒否すること - カーネル内で
unwrap()/ 添字アクセスによるパニックを起こさないこと
Constants§
- SYS_
EXIT - プロセスを終了します。
- SYS_
PRINT - デバッグメッセージを出力します。
- SYS_
READ_ FILE - ファイルを読み込みます。
- SYS_
WIN_ BLIT - GUIウィンドウへビットマップ転送を行います。
- SYS_
WIN_ CLOSE - GUIウィンドウを閉じます。
- SYS_
WIN_ CREATE - GUIウィンドウを生成します。
- SYS_
WIN_ POLL - GUIウィンドウのイベントをポーリングします。
- SYS_
WRITE_ FILE - ファイルを書き込みます。
- SYS_
YIELD - システムコール番号の定義 プロセスがCPUを自発的に譲渡します。
Functions§
- rust_
data_ abort_ handler - EL0 (ユーザー空間) からの Data Abort (ページフォルト等) を処理します。 不正なメモリアクセスを行ったユーザープロセスに対して警告を出力した上で、 対象プロセスを終了させます。
- rust_
el1_ ⚠sync_ handler - EL1(特権モード)動作中の同期例外(カーネルパニック等)をデバッグ出力し、CPUを無限ループ(ハングアップ)させます。
- rust_
svc_ handler - Rustレベルのシステムコールディスパッチャ。
vector.Sのsvc_handler_entryから呼び出されます。 引数はトラップフレームのレジスタ値として渡されます。