[Mona] カーネルバグフィックス スレッド情報保存にバグ

ページフォルトハンドラで使用していた、スレッド情報保存の仕組みにバグがあった。
というか、スタックに保存された情報のオフセットを間違っていて、DS=0x80000000とかなっていた。


今のMonaは、ページフォルトの後、必ずページフォルトが発生したスレッドにiretdしているのでカーネルスタックに保存された情報で復帰していたから問題が発覚しなかったのだ。(これはこれで問題がある再スケジュールするべきだし、再スケジュールできる仕組みもある)。


ところがMonaのコードを流用しようとした(もちろんそれは歓迎すべきことである)オーストリア人の方がこの問題に気づきメールで連絡してきてくれたのだ。
この人はかなり優秀な方なようで、もうひとつバグを指摘してくれていてこれも現在対応中である。


海外の人からのメールは開発を始めて3回目くらいだがダントツの優秀さだと思う。というか、カーネルに関して突っ込みを入れてくれたのは日本でもかなり少ないと思う。


また彼の指摘により、ネイティブな日本人でないと公式ページから僕に連絡をとる方法がとても分かりづらいということが分かったので http://monaos.orgのトップページだけ英語化しました。
Accept Languageが us のクライアントは、http://www.monaos.org/index.html.en を自動で表示するようにしました。


英語でのメールのやり取り、公式ページの英語化をすると英語力のなさが浮き彫りになりますね。


デバッグに使った表。久々にインテルのマニュアル開いたよ

handler突入時 pushALL arch_save_thread_registers2(from kernel mode) offset
ss ss ss 64
esp esp esp 60
eflags eflags eflags 56
cs cs cs 52
eip eip eip 48
error cd error cd error cd 44
pushad eax 40
ds ecx 36
es edx 32
ebx 28
esp 24
ebp 20
esi 16
edi 12
ds 8
es 4
handlerへの戻り 0