関数 address

;; ついてる comment について
うひ、本当だ。-Os だと align 出力してないよ。

jun@debian /tmp
$ gcc --version
gcc (GCC) 4.0.2 (Debian 4.0.2-2)
Copyright (C) 2005 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

jun@debian /tmp
$ gcc -O3 -o - -S tmp.c
.file "tmp.c"
.text
.p2align 4,,15
.globl func
.type func, @function
func:
pushl %ebp
movl %esp, %ebp
popl %ebp
ret
.size func, .-func
.ident "GCC: (GNU) 4.0.2 (Debian 4.0.2-2)"
.section .note.GNU-stack,"",@progbits
jun@debian /tmp
$ gcc -Os -o - -S tmp.c
.file "tmp.c"
.text
.globl func
.type func, @function
func:
pushl %ebp
movl %esp, %ebp
popl %ebp
ret
.size func, .-func
.ident "GCC: (GNU) 4.0.2 (Debian 4.0.2-2)"
.section .note.GNU-stack,"",@progbits

こいつは予想外。どうしようか。GC か user code が複雑化するのは避けられなさそうだから、closure を others に押し込むか。そうすると symbol の name の alignment と競合するが。Others だけ GC bit の位置を変えるとか。GC が 2〜3 倍遅くなりそうだ。忘れてください。
とりあえず後で考えよう。
Shift については反応が無いけど、何かまずかったかな?

[uim]error 処理

# jun0『<要約>write/ss 内で inconsistency が起きたら core 吐くか uim disable するしかないよん
# YamaKenZ 『あらそんな罠が。確かに言われてみればそうだ。でもそんな場合でもfatal_error()の呼び出しに留めてlibuimでsetjmpした地点に脱出とかでアプリは生き残らせたいです。debugなuimが日常環境な人やディストリもいるんで、いきなり吐いて死んでされると辛すぎる。』

うーん、"debug mode" に対する考え方が違いすぎる。uim の policy を踏まえて、ヤマケンさんの方針にはとりあえず賛成。
その上で私が「何で自分の project ならそうしないか」をちょろっと説明。積極的に賛成してもらうつもりは別にありませんが。その前に "--enable-debug と連動させる" というのは撤回しておきます。何か別の switch を作るべき。
私にとって "debug mode" というのは即ち (release mode と対比して) "test mode"、またの名は "人柱 mode" です。assert(3) の想定している環境の如く、内部を知っている or 覗く気がある人が、test suite を走らせたり bug を追跡したりするため *だけ* の build mode です。
この mode に於いて、致命的な内部不整合 (=bug) を検出したときの最善の動作は内部状態を解析するための情報を提供することであって、編集中の data を残すことではありません。*1Core file はほぼ必ず残すものですし、即座に落ちてくれると「何をしたときに落ちたのか」がわかりやすくなります。高 level の backtrace を残すかどうかはバグった layer を見て決めます。今回の write/ss については backtrace は実質実現不可能な努力目標です。
めも: [anthy]正着が出ない。ていうかこんな単語無かったっけか?
したがって、assert(3) は致命的な欠陥の check に積極的に使うものです。これには intended invariants が簡潔に記述できるので下手な comment より読みやすい (としばしば思う) という副作用があります。
そんな debug build を常用しておきながら「落ちた」の何のと騒ぐ奴は自業自得です。そういう人は大人しく (safety net が働く) release mode で build したものを使っておきなさい、と。
そんなわけで私は debian sid が --enable-debug + strip == --disable-debug と仮定しているのは bug だと思ってました。が、周りを見る限り autoconf の convention としては --enable-debug は symbol 情報をつけるだけ、という事のようなので、assert(3) を有効化したりして aggressive というか自虐的な debug 機能を有効にするのは別 option で提供すればいいかと。

*1:Core 吐いたらそっから復帰できなくもないという話も(w Binary 2.0 人でこんなん挑戦してる人いないのかな。Core を binary editor で弄って session 復活とか。あ、言葉にしてみるとすごく無理そう。