5/29 (火)
SPARC V8 ABI の変なルール
とある 32 ビット SPARC/Solaris のオブジェクトコードを見ていると、以下のような機械語パターンが頻繁に出ていることに気づいた。
call address nop unimp 0x0
nop は call 命令の delay-slot なのでいいのだが、次の unimp は illtrap を発生させる未実装命令ではないですか。 これが実行されたら割り込みがあがらない?
しばらく悩んだのだが The SPARC Architecture Manual Version 8
の Appendix D. Software Considerations の章に D.3 Functions Returning Aggregate Values という節がある。
Some programming languages, including C, some dialects of Pascal, and Modula-2, allow the user to define a function returning an aggregate value. Examples include a Cstruct
orunion
, or a Pascalrecord
. Since such a value may not fit into the registers, another value-returning protocol must be defined to return the result in memory.
Reentrancy and efficiency considerations require that the memory used to hold such a return value be allocated by the function’s caller. The address of this memory area is passed as the one-word hidden parameter mentioned in the section The Memory Stack above.
Because of the lack of type safety in the C language, a function should not assume that its caller is expecting an aggregate return value and has provided a valid memory address. Thus, some additional handshaking is required.
When a procedure expecting an aggregate return value from a called function is compiled, an UNIMP instruction is placed after the delay-slot instruction following the CALL to the function in question. The immediate field in this UNIMP instruction contains the low-order twelve bits of the size (in bytes) of the area allocated by the caller for the aggregate value expected to be returned.
When the aggregate-returning function is about to store its value in the memory allocated by its caller, it first tests for the presence of this UNIMP instruction in its caller's instruction stream. If it is found, the callee assumes the hidden parameter to be valid, stores its return value at the given address, and returns control to the instruction following the caller’s UNIMP instruction. If the UNIMP instruction is not found, the hidden parameter is assumed not to be valid and no value is returned.
On the other hand, if a scalar-returning function is called when an aggregate return value is expected (which is clearly a software error), the function returns as usual, executing the UNIMP instruction, which causes an unimplementedinstruction trap.
このルールは関数の戻り値が集合型(struct や union)の場合のスタックのチェック強化のためにあるようだ。 集合型を戻り値にする関数は、呼び出し側(caller)の call 命令の delayed-slot の後に UNIMP を置く必要がある。 呼び出される側(callee)は関数のリターンアドレスに UNIMP 命令があることを確認し、UNIMP の次の命令にリターンせよとある。
呼び出される関数の戻り値が非集合型だった場合このようなチェックは行われず、通常通りリターンアドレスにリターンすることになる。 そのため呼び出し側が戻り値が集合型を期待しているのに戻り値が非集合型の関数を呼び出した場合、UNIMP 命令が実行されて割り込みがあがり型チェックできることになる。
ただ実際には、たかが型チェックのためには高コストな方法であろう。
この規則は V9 の ABI からは消えている。
5/26 (土)
第二回x86勉強会
第二回x86勉強会に関する勉強会が目黒のドリコムで開催されたので参加した。
今日見つけた檄文
会場の目黒アルコタワーに着くまでにだいぶ迷走したのだが、その途中にこんな垂れ幕が掛かっている建物を見つけた。
「えん罪に加担した最高裁棄却決定糾弾!」だそうだ。
5/25 (金)
Infiniband Day [5]
Infiniband の勉強会 Infiniband Day [5] に参加。 開催場所は新宿さくらインターネット研究所セミナールーム。
[Food] 中華料理 古月@新宿
Infiniband Day の終了後、中島さんと中華料理 古月の新宿店(公式、食べログ)へ。 ここは麻婆豆腐が美味しいらしい。
麻婆豆腐は美味しいのだが、花椒は控えめであまり辛くない。 なんとなく牛蒡の味がして柳川風麻婆豆腐といった感じ。
炒飯は大変美味。
5/20 (日)
5/19 (土)
[Movie] ダーク・シャドウ
ティム・バートン監督作品ということで観てくる。 鑑賞した劇場はいつもの川崎チネチッタ。 15:50 の字幕。 今日から封切のはずだが客の入りは半分ぐらいか。
同じティム・バートンでもAlice In Wonderlandはディズニー映画ということで最初から期待していなかったのだが今作は多少希望していたのだが、単なる吸血鬼コメディー映画になってしまっていたような。 かつてバートンはシザー・ハンズを撮った監督なんだよなぁ orz
[Food] カレーショップトップス@ラゾーナ川崎
ラゾーナ川崎のカレーショップトップス(公式、食べログ)にタイ風のグリーンカレーが復活していた。 食べて帰る。
トップスは前回は2011年12月25日に来ている。
5/13 (日)
5/12 (土)
タイフェスティバル 2012 代々木
代々木公園で開催されたタイフェスティバル 2012に行ってみた。 タイフェスタは前回は2011年10月9日に靖国神社の参道で開催されたが、今回はそれよりも人出が多い。 NHK から代々木公園に進入すると人人人の人だかり。 ものすごい大混雑。
着グルミはタイ国政府観光庁イメージキャラクター「ハッピーちゃん」だそうです。
タイのタクシーの展示兼販売をやっています。
ドリアン
タイ北部のソーセージのサイコロイサン(米入り)とサイウア(スパイシーハーブ)。 外からは区別がつかない。
フレッシュ ココナッツ アイスクリーム
目玉焼きのレッドカレーソース炒め & ジャスミンライス。
台風焼きそば(バッタイ)とイサーンソーセージとチェンマイソーセージ。
[Movie] ロボット
スーパースターラジニが出演するインド映画「ロボット」(公式サイト)が今日から封切。 渋谷から川崎に移動して109シネマで見る。
ラジニの映画は「ムトゥ」「アルナーチャラム」を見たことがあるが、今回は SFX や 3D の多様された SF 作品になっている。 前半のヒューマンドラマはハリウッド文法とはかなり異なるインド映画、後半はハリウッド作品的なアクションシーン映画になっている。
ミュージカルのように途中にダンスシーンが挿入され踊りまくるのはいつもの通り。 ただラジニカーントはもう随分な齢でダンスやアクションシーンのキレはない。
[Food] ティーヌン 川崎ダイス店@川崎
昼にタイフェスタに行ったというのに夜もタイ料理。 川崎ダイスにあるタイ料理のティーヌンに。 前回は2012年2月4日に来ている。
「おひとり様専用夜定食」でグリーカレーを食べてから帰る。
5/6 (日)
[Food] L'Antica Pizzeria da Michele
ROCKET NEWS24の記事を読んで恵比寿にできたアンティーカ・ピッツェリア・ダ・ミケーレに行ってみた。 私が行ったときは行列が出来ていた。
マルゲリータを注文する。切らずに出てくる。
同じ ROCKET NEWS24 のニュースを見て渋谷のナポリスに行ったときはここまで絶賛するのはどうかと思ったが、ミケーレは普通に美味しい。
[時事] つくばで竜巻が発生
茨城県つくば市や栃木県真岡市で竜巻が発生。 つくば市北条では突風で家屋が破壊されることも。
5/5 (土)
5/4 (金)
[Food] 麻布ラーメン@慶應三田店
「塩ジェノベーゼつけ麺」なるものがあると聞いて麻布ラーメンの慶應三田店に行く(食べログ、ラーメンデータベース、ぐるなび)。 スパゲッティのジェノベーゼのようにバジルが大量に浮いているつけ麺ダレだ。 麻布ラーメンの店舗の中でもこの店でしか食べられないようだ。
バジルはたれの表面に浮いていてたれそのものはつけ麺ラーメンのつけのようだ。 ジェノベーゼパスタとつけ麺の合いの子のような味。