2

Linux/MIPSで、 syscall (関数呼び出しではなく、命令を介したカーネル空間への実際のラウンドトリップ) で保存されるレジスタはどれですか?syscall

RESTORE_SOMEヘッダーのマクロから判断すると、arch/mips/include/asm/stackframe.hr2-r7、r25、r28、および r31 が復元されているように見えます。もちろん、呼び出し先で保存されたレジスタは、カーネル空間 (それらを使用するカーネル空間関数) でも呼び出し規則によって自動的に保持されます。それらを上書きする前にそれら自体を保存します)。これは正しいです?

もちろん、少なくともいくつか (r2 と r7) の値は、syscall の結果で上書きされます。

4

3 に答える 3

2

Linux/MIPS システム コールでのレジスタの使用方法の説明 (カーネル ソース自体以外に私が知っている唯一のもの) については、このリンクを参照してください。

于 2012-09-11T12:00:02.827 に答える
2

「呼び出し規約に従って、syscall は、o32 が存続する関数呼び出しとして定義するレジスタの値を保持します。」( MIPS 実行、379 ページを参照)

于 2012-09-11T11:21:37.920 に答える
2

MIPS ABI規約は、syscall の前に syscall 番号と引数を含むレジスタと、syscall の後に結果 (エラー コードを含む) を含むレジスタを正確に定義する必要があると思います。多くの場合、システムコールはスタックを使用せず、レジスタのみを使用します。

于 2012-09-09T06:20:04.467 に答える