つづき

結局昨日の目論見は外れた。
完全に再コンパイルしても結局うまく動いてくれなかった。
いや、問題となっているところはパスしてくれるのだが、
もうちょっと進んだところで死んでしまう。
今度落ちているところは結構実行が進んだところで、
Haskellコードを多少実行した後なので、
もはやどこで落ちているのかさっぱり分からない。
EIPが0になって落ちているのは分かったが、
その原因なんかさっぱり分からない。
どうやって追跡したら良いのかも良く分からない。
オブジェクトのメモリ配置を換えてしまうのはやはり
どこに影響が出るのか分からないもので、
原因を探るのは並大抵のことではない。
と困窮したところで、Uさんに別の策を頂く。
フォワーディングポインタを後ろに置くのではなく、前に置くと。
こうすれば普段は変更前と変わらないメモリ配置なので、
問題なく動作可能なはずだ。
さらに考えると、実はフォワーディングポインタは
最古世代にしか必要ないので、
最若世代からのアロケーションは完全に前と同じに行えることがわかった。
つまり、この方法では完全に変更がGC内に閉じている。
というわけで、これならなんとかいけそうな感じだ。
なんで落ちてしまうのか、原因が分からないのは気持ち悪いが、
もはや時間がないので仕方がない。
とにかく動くものを作ってしまわねばなるまい。