今日は実験用のプログラムをARMのLinux上で動かそうと思ったのですが、i386 Linuxだと何ともないことが arm Linuxでは引っかかったりして、つまずきまくりです。
プロセスがexecveを発行すると、出口でシステムコール番号が取れなくなってしまって困りました。原因は下の通りなので、明日改善します。ああ、論文書く時間がねえなあ…。
現在のLinuxの実装だとarmでシステムコール番号を取得する方法として、swi命令を解析する方法があるのですが、これをやるにはpcがシステムコールを発行するためのソフトウェア割り込み命令(swi命令)の位置を指している必要があります。
しかしexecveの出口ではpcの値が変わってしまってswi命令を指さなくなっているため、システムコール番号を取得できなくなるのです。
アーキテクチャ違えば別のOSになって当然なんだから、違いがあるのは本来自然なことなんです。
しかしLinuxはかなり頑張っていて、どのアーキテクチャでも同じように使えます。故に、Linuxなら同じように動くのが当然だろ?とかえ?何で同じように動かないの?なんてムチャクチャな期待をする方が多いと思います。
これはソフトウェアが良くできているという事実の裏返しなので、制作者側としては嬉しい状況ではありますが、正直作るのはしんどいでしょうねえ。OS書いている方々は尊敬しますね。
< | 2007 | > | ||||
<< | < | 01 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 | - | - | - |
合計:
本日: