おっ

INLINE void __attribute__((noreturn)) initial_switch_to(tcb_t * tcb) 
{
    asm("movl %0, %%esp\n"
	"ret\n"
	:
	: "r"(tcb->stack));

    while (true)
	/* do nothing */;
}

「なんでも継続」draft にあった「継続を積んでそこに return する code」だ。実物を見るのは初めて。Kernel の一部だけど、kernel mode じゃないから随分生々しい jump をしている。
;; Thread scheduler のうち、default thread を起動する code。

「なんでも継続」の続きも読みたいなー。

[Scheme] TAGS

TAGS が int SECTION(".init") foo() みたいな関数定義を認識できない問題。最初は無視しようかと思ったけど、多すぎて嫌になったのでやっぱり TAGS file を修正する script を作成。
これまでなら Perl で瞬殺 course なんだけど (実際 10 行ぐらいで書けそう)、そこはそれ。Scheme (Gauche) で書いてみました。慣れてないから時間がかかるのなんのって。100+ 行で、3 時間も使っちゃったよ。入出力関数にどれを使うかの選定が一番厄介で、あれを選んだらこういう不都合が出た、これを選んだらこうやってバグった、みたいな。
でもこうやるのが一番言語に慣れるんですよね。一時期 scripting というものを知らなくて、日々の script を全部 C で書いてた時期が 1 年ぐらいありました。Text file の行を数えるとか、行末 code を canonicalize するとか。その次は assembly で書いてました (I/O は libc を利用)。キチガイですね。でもそのときが一番理解の進行が速かった。
何回も使うものを書くと、他人となった自分の code の保守・補修をすることになるので、自然と「ダメな書き方」の pattern を見つける力がつきます。ちょこっとですがね。そうやって苦しむのはオススメ。