Misc Change Log

`OpenBSD で scheme のアプリ開発' みたいなことをやってます。

2005-01-05

i386 アーキテクチャのコンパイラが gcc3 に変更(その2)

make build して、カーネルの再構築、ports のインストールを試してみる。

いろいろよろしくない。最適化まわりがいまいちである。

以下は愚痴なので読みたい方だけどうぞ。


端的にいえば、カーネルにおいては "-O2 -march=i686" すら筆者の環境では使えない。

というのも、上の最適化オプションを指定したカーネルでは fxp(EtherExpress PRO/100B) や vge(VIA VT6122) でネットワークが使用できない。 ifconfig で up、dhcp でルーチングするところまではいくのだが、なぜかリンクしない。 rl(Realtek 8139) ならば動くというところまでは確認。

デスクトップならネットワークカードをとっかえひっかえすればいいのだが、 手元の環境がノート(fxp)なので泣く泣く COPTS をコメントアウト。

COPTS で思いだした。 ふだんは /etc/mk.conf で、

COPTS=-O2 -march=i686 -fforce-addr -fmove-all-movables -freduce-all-givs -Os -pipe

を指定しているだが、 この COPTS で ports の jless を gcc3 でビルドすると文字の白黒が反転する現象が発生。 これも最適化を切ると正常になる。

gcc -fverbose-asm -S で OpenBSD のデフォルト(-O2)と -march=i686 を指定した場合の比較はこちら。

-O2 -O2 -march=i686
-fdefer-pop -foptimize-sibling-calls -fcse-follow-jumps -fcse-skip-blocks -fexpensive-optimizations -fthread-jumps -fstrength-reduce -fpeephole -fforce-mem -ffunction-cse -fkeep-static-consts -fcaller-saves -freg-struct-return -fgcse -fgcse-lm -fgcse-sm -floop-optimize -fcrossjumping -fif-conversion -fif-conversion2 -frerun-cse-after-loop -frerun-loop-opt -fschedule-insns2 -fsched-interblock -fsched-spec -fbranch-count-reg -freorder-blocks -freorder-functions -fcprop-registers -fcommon -fverbose-asm -fgnu-linker -fregmove -foptimize-register-move -fargument-alias -fmerge-constants -fpeephole2 -fguess-branch-probability -fmath-errno -ftrapping-math -fstack-protector -m80387 -mhard-float -mno-soft-float -mieee-fp -mfp-ret-in-387 -mno-fancy-math-387 -mcpu=i386 -march=i386 -fdefer-pop -foptimize-sibling-calls -fcse-follow-jumps -fcse-skip-blocks -fexpensive-optimizations -fthread-jumps -fstrength-reduce -fpeephole -fforce-mem -ffunction-cse -fkeep-static-consts -fcaller-saves -freg-struct-return -fgcse -fgcse-lm -fgcse-sm -floop-optimize -fcrossjumping -fif-conversion -fif-conversion2 -frerun-cse-after-loop -frerun-loop-opt -fschedule-insns2 -fsched-interblock -fsched-spec -fbranch-count-reg -freorder-blocks -freorder-functions -fcprop-registers -fcommon -fverbose-asm -fgnu-linker -fregmove -foptimize-register-move -fargument-alias -fmerge-constants -fpeephole2 -fguess-branch-probability -fmath-errno -ftrapping-math -fstack-protector -m80387 -mhard-float -mno-soft-float -mieee-fp -mfp-ret-in-387 -maccumulate-outgoing-args -mcpu=i686 -march=i686

ん?オプションの数が減ってる?いっしょか。

それにしても、どれが悪さをしているのか調べるのも面倒な話だ。

と思ったら違いは -mno-fancy-math-387 と -maccumulate-outgoing-args だけ?

というか、いままでコンパイルしたソフトは大丈夫なのだろうか。 なんとなく動いているが心配になってきた。 コンパイラが信用ならないってのはイヤな話である。

参考(になるかどうかわからないが): UNIX板のスレ

Posted at 17:19 | Permalink | Category | Comments