似非スマートリンク、あるいはHello Worldのビルド時間世界一への挑戦

皆さんご存知の通り、ldは、ELFフォーマットでしかスマートリンクのための--gc-sectionsが動いてくれません。WindowsはCOFF/PEですのでとても悲しいです。
そこで、FreePascalのスマートリンクの方法が使えます。.section毎に別々の.oにするだけです。力技です。
個々のグローバルシンボルを別々の.sectionに分けるのは、gccのオプション-ffunction-sectionsと-fdata-sectionsでいけます。
後は.oを細切れにするだけですが……最初、objdump -hして得たセクション名ごとにobjcopy -jでバラせると思ったのですが、そうして.exeまで持っていっても動きませんでした。ひとつの.o内で相互参照していたローカルシンボルが、指すところが無くなったためか自身を指していて、コードを書き換えようとして落ちてました。
というわけで力技に力技をもうひとつ重ねます。
gccに-Sで吐かせたアセンブリソースを、.sectionを目印に切っていって、各シンボルについて.global宣言も付加します。ローカルシンボルも、元ファイル名からハッシュ付けて無理やり公開します。
そうやって分割した.oを全部コマンドラインで渡そうとすると実行できませんでしたのでarでまとめてranlib。色々調整して結局こんな感じで。
こうして……Hello Worldが、82,432バイトから59,904バイト(現行の4.1.1無修正)、または、85,504バイトから60,416バイト(4.3.0&改造RTL)になりました。結構効くなあ。びっくりです。コンパイルオプションも若干違うんですけどね。ビルド所要時間は約15分です。
約15分では甘すぎる気がする。RISCに向けてランタイム含めて広域最適化するとかそんな条件ならもっと時間かかるのありそう。でもまあ時間対効果比なら世界一かもしれん。
いずれにしろやってられねーので、勝手に同じことをしてくれるスーパーasください。ついでにリードオンリーのセクション同士で内容が被っていればまとめてくれるようなスーパーなやつ。

……。
ツール自体も288256→223232と劇的だなあ……。
これはこれでありな気がしてきた……。

追記
時間については、俺の改造RTLがバカやってただけだった。