2004-06-20

_GRUB

というわけでやりました。 一日仕事だと推測したのは大体当たり。 実装は土曜日にほとんど済ませて、 日曜日はドキュメントの整備やメーリングリストへのアナウンスなど。 後はテストですね。

どう使うかは結構頑張ってマニュアル書いたので、 マニュアル見て下さい。

_GCC

GCC 3.4だと、 GRUBがでかくなり過ぎる とJeroenが言っていたので、 GCC 3.3.2から生成されたオブジェクト・ファイルをしこしこ読んだり、 こういうええ加減なRubyスクリプト

name = nil
count = 0

while l = gets
  if /^[0-9a-f]+\s+<(.+)>:/ =~ l
    name = $1
    count = 0
  elsif name and /^\s+[0-9a-f]+:\s*((\s[a-f0-9]{2})+)/ =~ l
    code = $1
    count += code.split(/\s/).size()
  elsif /^\s*$/ =~ l
    print name, "\t", count, "\n" if name
    name = nil
  end
end

print name, "\t", count, "\n" if name

で、objdumpの出力から関数毎のコードサイズを一覧にしたりして、 比較しました。 要するに、どこがどう大きくなっているのか調べたわけです。

結局本当に一部の関数(特にnext_partition)だけが やたら大きいことに気づいて、 GCCのバグだと確信できました。 レポート用に再現可能な小さいソースを作ったりして、 報告しました

でも、一応これ、もう本家では直っていて、3.5.0で対応するのだと。 何で単なるバグ潰しなのに、次のメジャーリリース待ちなの? かなり大きな変更を必要とするのかなあ? いまいちGCCのポリシーが私にはよう分かりません。 私の場合、相当量の変更が必要でも、 バグ潰しならどんどん適用しちゃうんで。

これでGCC 3.4.xは捨てだな。悪いけど。 サイズが増大すると致命的なプロジェクトもあるって、 認識してないのかねえ。

[]