Skip to main content

Module syscall

Module syscall 

Source
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.Ssvc_handler_entry から呼び出されます。 引数はトラップフレームのレジスタ値として渡されます。