2023年5月18日木曜日

insn-attrtab.cが巨大化するbugに遭遇(gccビルド)

gcc 4.0.0をビルドしたのだが、メモリ不足で失敗した。

エラーメッセージは、"cc1: out of memory allocating 44516032 bytes after a total of 3880512 bytes"、つまり「44Mバイト確保しようとしたが、3Mバイトしかないよ」だった。
DEC Hinote Ultra 475CTはメインメモリ24Mバイト、スワップ56Mバイトあるのだが、44Mバイトはメインメモリ上に確保できないとまずいらしい。

調べるとgcc 4系にはbugがあって、ビルド中に生成されるinsn-attrtab.cが巨大化してしまう。そのファイルをコンパイルしようとするとメモリを十分に積んでないPCではメモリ不足エラーになる。

搭載メモリが1Gバイト以上あると、このbugは顕在化しない。そのため、ネット上でbugを報告する人が数人いたのだが、ほとんどの回答者はbugだと理解できずに頓珍漢な回答をしていた。知ったかぶりして回答するのは恥ずかしい。

このbugをfixするパッチが出たときは、bugが報告されてから5年が過ぎていた。メモリが1Gバイト未満のPCなど激減した後なのでパッチはほぼ意味がなかった。

私のPCはメモリが24Mなのでこのバグに遭遇したわけだが、あまりにメモリが少なすぎてパッチを当ててもどうしようもない。このPCでセルフコンパイルするのを止めて、クロスコンパイルに移行すべきときだろう。

insn-attrtab.cを覗いてみたが、機械語のコードを吐き出すプログラムだった。configureでtargetにi486を指定しているのに、pentium/pentiumMMX/ppro/K6/athlonなどの条件分岐が入っていることが問題だ。このためにプログラムが巨大化してしまう。条件分岐はtargetのcpuを限定してもなくならない作りになっている。この作りを変えればbugは直るが、いまさら直す人はいないだろう。私もわざわざ直す気はしない。

0 件のコメント:

コメントを投稿