また、随分と開いてしまった。
忙しいながらもぼちぼちと進めているが・・・
本家gccでMicroBlazeのlittle endian化できないかとやってたんだけど、binutilsもいぢらなければいけないのと結果的にlwをlwr化するだけでは出来なかったので断念した。
Xilinxのgccは4.6.2で、本家は4.7.2です。
Xilinxのgccはlittle endian対応なので-mlittle-endianをgccの引数につければ、little endian化されるが本家にはこの引数はない。
つまり、big endianでコンパイルされる。
何が問題かというと、本家gccだとconstant値が逆に読み込まれてしまう現象が発生する。
まぁ、 constant値を読むところの読み込むアドレスを"^3"すればいいだけなんだけど・・・
もちろん、全部で・・・
あと、ELFバイナリがXilinxが little endianで本家はbig endianだった。
出来上がったELFデータがおかしいなぁと、思ったのはこのせいだった。
(もしかしたら、ELFデータがlittle endianされているからかもしれないが・・・)
本家gccをコンパイルするスクリプトを下記に貼り付けておく。
このスクリプトをそのまま実行するといつものようにダウンロードからインストールまで全自動です。
ーーーーここからーーーー
export PREFIX=/usr/microblaze
export BINUTILS_VERSION=2.22
export GMP_VERSION=5.0.5
export MPFR_VERSION=3.1.1
export MPC_VERSION=1.0.1
export GCC_VERSION=4.7.2
export NEWLIB_VERSION=1.20.0
mkdir $PREFIX
mkdir $PREFIX/src
mkdir $PREFIX/tmp
mkdir $PREFIX/tmp/binutils-build
mkdir $PREFIX/tmp/gcc-build
cd $PREFIX/src
wget http://ftp.gnu.org/gnu/binutils/binutils-$BINUTILS_VERSION.tar.bz2
wget ftp://ftp.gmplib.org/pub/gmp-$GMP_VERSION/gmp-$GMP_VERSION.tar.bz2
wget http://www.mpfr.org/mpfr-current/mpfr-$MPFR_VERSION.tar.bz2
wget http://www.multiprecision.org/mpc/download/mpc-$MPC_VERSION.tar.gz
wget ftp://ftp.dti.ad.jp/pub/lang/gcc/releases/gcc-$GCC_VERSION/gcc-$GCC_VERSION.tar.bz2
wget ftp://sources.redhat.com/pub/newlib/newlib-$NEWLIB_VERSION.tar.gz
tar xjvf binutils-$BINUTILS_VERSION.tar.bz2
tar xjvf gmp-$GMP_VERSION.tar.bz2
tar xjvf mpfr-$MPFR_VERSION.tar.bz2
tar xzvf mpc-$MPC_VERSION.tar.gz
tar xjvf gcc-$GCC_VERSION.tar.bz2
tar xzvf newlib-$NEWLIB_VERSION.tar.gz
cd $PREFIX/tmp/binutils-build
$PREFIX/src/binutils-$BINUTILS_VERSION/configure --prefix=$PREFIX --target=microblaze
make
make install
export PATH=$PREFIX/bin/:$PATH
export LD_LIBRARY_PATH=$PREFIX/lib:$LD_LIBRARY_PATH
cd $PREFIX/src/gmp-$GMP_VERSION
./configure --prefix=$PREFIX
make
make install
cd $PREFIX/src/mpfr-$MPFR_VERSION
./configure --prefix=$PREFIX --with-gmp=$PREFIX
make
make install
cd $PREFIX/src/mpc-$MPC_VERSION
./configure --prefix=$PREFIX --with-gmp=$PREFIX
make
make install
cd $PREFIX/src/gcc-$GCC_VERSION
ln -s $PREFIX/src/newlib-$NEWLIB_VERSION/newlib .
ln -s $PREFIX/src/newlib-$NEWLIB_VERSION/libgloss .
cd $PREFIX/tmp/gcc-build
$PREFIX/src/gcc-$GCC_VERSION/configure --prefix=$PREFIX --target=microblaze --disable-nls --with-gnu-as --with-gnu-ld --enable-languages="c,c++" --with-headers=$PREFIX/src/newlib-$NEWLIB_VERSION/newlib/libc/include --with-newlib --with-libgloss --with-gmp=$PREFIX --with-mpfr=$PREFIX --with-mpc=$PREFIX
make all
make install
ln -s $PREFIX/microblaze/lib/libnosys.a $PREFIX/microblaze/lib/libxil.a
ーーーーここまでーーーー