大体場所が決まっていて、そこを入れ換えることが多い。64kbtye のz80とか、640kbye の8086時代には必須でした。
Cell SPUのgccには、overlay のコードが入っていて、ちゃんと動く。そこをcallしたり、そこにreturnしたりすると、自動的に入れ換えてくれる。
なんだが、複数のコードを入れ換えた方が良いので、一ヶ所だとダメなんだよな。で、結局、手動でCache/LRUとか、いろいろ書いていたんですが... overlay ダメなんじゃないかな。
外部への参照を排除して、スタンダローンのa.outにして自分でloadするのが良いような気がしてきた。そうすれば、collect2 とかと格闘しないですむ。ライブラリ呼び出しとかはテーブルで間接参照すりゃ良いし。
gdb で、symbolic debug 出来なくなるが、今でも、出来ない部分は出来ないし。
でも、そこまでしなくてもギリギリ動くような気もするんだけどね。
Intel系だと、別空間ではなくてキャッシュなので、こういう心配は要らないんですが、その代わり、キャッシュを意識したプログラミングが必要。こういうキャッシュを「変な命令」じゃなくて、もっと、きれいに扱う方法ってないのかな。
No comments:
Post a Comment