[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 |