- 2010/08/06 Fri
-
自分よりちょっと上の歳の人かなと思っていた人が、話をしてみたら自分の2.5倍以上社会人やってる人だったので思わず「この業界て年齢不詳の人が多いですよねー」と本人に向かってのたまう@地下の飯屋。
man syscalls にシステムコールは失敗を示すのに負のエラー番号を呼び出し元に返す。失敗が起こった際には、ラッパー関数は返されたエラー番号を反転して (正の値に変換し)、それを errno にコピーし、ラッパー関数の呼び出し元に -1 を返す。
とあったので、とりあえず.text .globl _read .type _read, @function _read: li 0, 3 sc blr
としてみたら、反転するまでもなくエラー番号が正の値で返ってきたので成否はどうするのさそれと思っていたら、Understanding Linux System Calls (Linux-Unix Kernel)
http://havefunwhileulearn.blogspot.com/2010/03/systems-calls.html// read (fd, buf, numBytes) .read: li r0, 3 // pass system call number to r0 // arguments have already been passed // in r3, r4, r5 by the caller. sc // invoke system call bnslr // if no error return (Summary // Overflow bit not set) lis r4, errno@ha // copy error code to errno variable stw r3, errno@l(r4) li r3, -1 // return -1 to user application blr
てことでした。
というか、PowerPCアセンブリの日本語情報が少なすぎる。
基本的なところは押さえたので、システムコール一覧からラッパーライブラリをでっちあげるスクリプトを書いてみたり実機で挙動を見てみたり、Assembly Programming on KURO-BOX A
http://www.mztn.org/ppcasm/ppcasm_A.htmlネットワーク関連のシステムコールは sys_socketcall (102) の第1引数に以下の表の先頭列に示す番号 (10進) を設定して呼び出します。 引数はメモリに格納して先頭アドレスを sys_socketcall の第2引数に設定します。
にも対応してみたり実機で挙動を見てみたりなんだりで一日が終わる。
あと、コーヒーを飲んだりとかコーヒーを飲んだりとか最上階の埃臭い無人フロアで地べたにはいずったりとか。
今日もいつもの予定調和。