私はそれがLinuxでシステムコールを実装する関数に使用されていると読んでいます。たとえば :'asmlinkage'修飾語は何の意味ですか?
asmlinkage long sys_getjiffies(void)
{
return (long)get_jiffies_64();
}
、それがスタック上のすべての関数の引数を渡すようにコンパイラに指示しますということ。しかし、それはすでにケースですか?関数の引数は、一般的にスタック上にプッシュするだけで渡されます。あるいは、ここで関数の引数をレジスタに渡すことについて言及していますか?
Linuxカーネル関数の最初のパラメータは、デフォルトでx86のレジスタに渡されることに注意してください。 x86-32では、最初の3つのパラメータは '%eax'、'%edx'、 '%ecx'の順に渡され、残りはスタックに入れられます。可変引数リストを持つ関数は例外です。引数はすべてx86-32のスタックにあります。 x86-64では、最初の6つのパラメータは '%rdi'、'%rsi'、 '%rdx'、'%rcx'、 '%r8'、'%r9'(varargsを持つ関数の場合でも)に渡されます。その順序で、残りはスタックに置かれます。システムコールは異なる慣習に従います。 – Eugene
(続き)@dirkgentlyで指摘されているように、 'asmlinkage'はパラメータ渡しに関するデフォルトの規約を変更する方法です。 [Agner Fogのマニュアル](http://www.agner.org/optimize/calling_conventions.pdf)のさまざまな呼び出し規約の詳細な説明も参照してください。 – Eugene
Quoraには良い説明があります:[https://www.quora.com/Linux-Kernel/What-does-asmlinkage-mean-in-the-definition-of-system-calls](https://www .quora.com/Linux-Kernel/what-does-asmlink-in-the-system-of-the-system-callsを意味します)。 –