未来のいつか/hyoshiokの日記

hyoshiokの日々思うことをあれやこれや

asmlinkageとは

会社でカーネル勉強会を夕方やっていたので、ふらっと参加してみた。エライ人がでると自由な議論ができなくなるとか、若手がやりにくいとかいろいろ言われそうではあるが、楽しそうだから、そーゆー雑音は聞かなかったことにしてお話を聞く。セマフォがどうだとか共有メモリがどうだとかいう話をしていてプロジェクタにはsem.cだかなんだかのソースコードがうつされていたりする。
質疑応答で、「ところで、このasmlinkageってなんですか」というのが出る。ソースコード上、お馴染みなフレーズであるが、まあこんなものだろうということで深くは追求したことがなかった。
疑問はGoogleに聞け。
まづ、「asmlinkageとは」では、所望の回答はみつからない。*1
そこで、「asmlinkageというのは」で、検索したところ、
https://www.codeblog.org/blog/gniibe/20060221.html#p07というのを発見する。

_ asmlinkage ってなぁに?

asmlinkage というのは、最初のころはありませんでした。 0.99.1x のころから system call など entry.S とかのアセンブラの実装から呼ばれるところに付けるようになりました。

当初の目的は、C++ コンパイラでも Linuxコンパイルできるように、ということだったと思います。たしか。

最近では、x86 などではアセンブラとの calling convention を普通のと変えることもあるようになってます。M32R とかでは asmlinkage というのはなんの効果もない、コメントのようなものです。

軽くスルーという感じだ。

http://www.google.co.jp/search?q=asmlinkage%E3%81%A8%E3%81%84%E3%81%86%E3%81%AE%E3%81%AF&hl=ja&lr=&start=10&sa=N で「asmlinkageの意味は」というフレーズが見え隠れするので、それで検索する。そうすると、fj.os.linuxの記事が引っかかってくる。

http://groups.google.co.jp/groups?q=asmlinkage%E3%81%AE%E6%84%8F%E5%91%B3&btnG=Google+%E6%A4%9C%E7%B4%A2&hl=ja&sa=N&tab=wg

で、http://groups.google.co.jp/group/fj.os.linux/browse_thread/thread/c7e88a62c1a7a64d/bdeb0bf84f43d6f1?lnk=st&q=asmlinkage%E3%81%AE%E6%84%8F%E5%91%B3&rnum=1&hl=ja#bdeb0bf84f43d6f1 を発見した。

ただ、どうも見ているとアセンブラコードからリンクされている (または
呼び出されている) 関数にこの単語がつけられている例が多いようなので
開発者 (あるいは保守担当者) がコードを読む際に、
「この関数はアセンブラコードからリンクされている」ということが
すぐにわかるようにする、という意味でつけられているのではないかと
思います。

まあ、今日はこのくらいの理解にしておこうと思った。

で、家に帰ってからもう一度Googleしてみるとそのものずばりを発見してしまったのである。http://www.nk.rim.or.jp/~jun/lxasm/int80.htmlをじっくり読んでください。

*1:いまもう一度検索したら、そのものずばりが発見できた。http://www.nk.rim.or.jp/~jun/lxasm/int80.htmlである。