Herja
ツールチェインを構成するリンカ
オブジェクトファイルを入力として、実行可能ファイルを出力する
雑記
なかなか納得のいくコードがかけず3、4回ほど書き直した
最初から複数のオブジェクトファイルをリンクしようとしていたのが原因である説が濃厚
インクリメンタル開発をすべきだったか
シンボルと再配置シンボルの管理が大変だった
それぞれのオブジェクトファイル内で、インデックスによりその関係が指定されている
一つのファイルにまとめる過程で、それらの移動元と移動先をきちんと管理しなければいけない
セクションもそうだったかもしれない
シンボルの読み込みが大変
毎回.symtabと.strtabを読み込んで名前を解決してというのをする必要がある
所有権がめんどい
これはRustの話
ほとんどの処理でオブジェクトファイルをforループで回すので、参照として保持するとすぐ怒られる
std::mem::takeやstd::mem::replaceが活躍した
herjaに限らないが、所有権を理解していなくてその場その場の対応をしている気がしてならない
clone祭りが実際に発生している
レイアウトが意外と厄介
うろ覚えなので違うかもしれない
再配置を解決するため、alignを考慮したレイアウトを先にしなければいけない
しかしレイアウトでシンボルの位置がずれるので、他の情報も更新しなければいけない
そのあたりが面倒だったみたいな話だったと思う