続 C++ と libc の関係など
ちと深入りしすぎでは。と忠告を受けたので冷静に考えなおしていくつか検証をして結論を出した。
時間が多くあるならばやるべき正攻法
Mingw ではなく純粋なクロスコンパイラ i586-pe または i586-elf を作り開発する。そうすれば多くの問題は自動的に解決される。例えば libgcc や libsupc++ の libc への依存や _alloca 自動挿入問題など。
でもこれは 「Mona を一から開発するなら次はこうやろう」的な話であまり現実的ではない。少なくとも WebKit 移植よりは優先度が低い
今回試みて失敗したこと
C++ の RTTI と例外をサポートするには libgcc.a と libsupc++ とそれに含まれるヘッダが必要である。これは真。ところが使おうとしているのは Mingw の libgcc なので Windows 関数への依存や、libc への依存が問題になる。クロスコンパイラをきちんとつくっていればこれらの問題は起きなかったりそれ以前に解決されている。ただ Mona は歴史的経由により Mingw のコンパイラ・リンカに -nostdinc などをつけてだましだましクロスコンパイラとして利用しているので深いところにツッコむと問題にぶち当たる。
Mingw gcc のソースコード一式は手元にあるのでソースに手を入れて一つ一つ依存を切っていくことも可能に見えたのだが、やはり色々難しくて断念した。Mona 用の純粋クロスコンパイラを作らない限りは C++ RTTI/例外 サポートは難しいというのが今のところの結論。
今回試みて得たこと
今回の失敗から得られたもは以下のとおり。