2011-07-03 8 views
1

(私はこれに既に答えている;私は自分の質問に答えて、私が学んだことを共有し、将来この問題を他の誰かに保存する)Solaris Sparcのコアダンプで私のerlangビルドが失敗するのはなぜですか?

Erlang Solaris 10ののSparcv9に、ビルドが途中で失敗します。

cd lib && \ 
    ERL_TOP=/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221 PATH=/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221/bootstrap/bin:${PATH} \ 
     make opt SECONDARY_BOOTSTRAP=true 
make[1]: Entering directory `/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221/lib' 
make[2]: Entering directory `/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221/lib/hipe' 
=== Entering application hipe 
make[3]: Entering directory `/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221/lib/hipe/misc' 
erlc -W +debug_info +warn_exported_vars +warn_missing_spec +warn_untyped_record -o../ebin hipe_consttab.erl 
make[3]: *** [../ebin/hipe_consttab.beam] Bus Error (core dumped) 
make[3]: Leaving directory `/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221/lib/hipe/misc' 

なぜこれがあると私は私のErlangの構築完了までに何ができるのでしょうか?

答えて

4

ビルドに失敗した理由は、ビルド環境が壊れているためです。

この特定のケースでは、Sun GCCビルドが使用されています。 GCCのこの特定のバージョンは、GNUアセンブラとSunリンカが混在するようにコンパイルされました。

Sparcプラットフォームは、コードのアラインメントに対して非常に敏感で、アライメントの合っていないコードが実行されると(バスエラーなどで)エラーが発生します。

Sparc Solaris 10のストックGCCビルドで使用されているGNUアセンブラは、コンパイラによって生成された関数を自動的に整列させるためにはあまり動かないので、整列していないコードになります。

解決策は、独自のGCCを構築し、システムアセンブラとリンカを使用することです。あなたはGCCのconfigureスクリプトに次のオプションを使用することによって、これを達成することができます:

--with-as=/usr/ccs/bin/as \ 
    --without-gnu-as \ 
    --without-gnu-ld \ 
    --with-ld=/usr/ccs/bin/ld \ 

結果GCCのビルドが正しく整列コードを生成し、あなたが成功しアーランを構築することができます。

関連する問題