MIPSアーキテクチャ用クロスコンパイラ/アセンブラ環境


注意!
本クロスコンパイラ/アセンブラ環境は 2Fネットワーク実験室のPCのうち baby22〜baby36でのみ利用可能である。

概要

MIPSシミュレータで実行可能なプログラムファイルを作成するための クロスコンパイラおよびアセンブラである。
GCC (GNU Compiler Collection)をベースとしており、C言語や MIPSアセンブリ言語で記述されたプログラムソースコードをコンパイル およびアセンブルすることができる。

newlibをベースとした標準Cライブラリ(libc)を使用可能であり、 それらを使用して記述されたCソースコードをコンパイルすることができる。
(ただし、現時点ではライブラリを使うために必要なシステムコールを シミュレータに実装していないため、実行はできない)

cygwin環境(windowsで動くUNIX模倣環境)で 動作するため、(cygwinが導入してあれば)学科2F以外の環境でも利用可能である。

構成

クロスコンパイル/アセンブラ環境は以下のプログラムにより構成される。
※mipsel-elf-gccでアセンブリソースコードをアセンブルできるので、 通常は mipsel-elf-asを直接使うことはない。

Cソースプログラム(.cファイル)やMIPSアセンブリソースプログラム(.Sファイル)を mipsel-elf-gccによりコンパイルおよびアセンブルを行い、 (リロケータブル)オブジェクトファイル(.oファイル)を生成する。
オブジェクトファイル(.oファイル)を mipsel-elf-ldによりランタイムライブラリ等とリンクして、 実行可能バイナリコードファイル(ELF形式ファイル)を生成する。

シミュレータで読み込み可能な形式(モトローラSレコード形式)の ダンプテキストファイル(.srecファイル)に変換するために mipsel-elf-objcopyを使用する。
また、デバッグを行う際に参考になる逆アセンブルリスト(.asmファイル)を 生成するために mipsel-elf-objdumpを使用する。

開発フロー

使用前の設定

本クロス環境を使う前にcygwinのコマンドラインシェル(bash)で以下のコマンドを 実行する。
※シェル(bash)を終了すると設定内容が失われるため、 この操作は新規にシェルを起動するごとに行うこと。

export PATH=/usr/local/mips-tools/bin:$PATH
export PATH=/usr/local/mips-tools/mipsel-elf/bin:bin:$PATH
export PATH=/usr/local/mips-tools/libexec/gcc/mipsel-elf/3.4.6:$PATH

作業を省力化するため、 このファイル(setup.sh)を 作業ディレクトリにコピー後、以下のコマンドを実行しても良い。

. setup.sh   # ←ピリオドに続けて空白の後にファイル名

次に作業ディレクトリに このファイル(mipsy.ld)をダウンロードして置く。 この作業は最初に一度だけ行えばよい。
(新しく作業ディレクトリを作った場合は、同様にダウンロードしてファイルを置く)

補足:
サービスコールの記述を簡略化するためのマクロを定義したヘッダファイル mipsy.hを使う場合は、これも作業ディレクトリに 置くこと。

使い方

cygwinのシェル(bash)から以下のコマンドを実行する。
# Cソースファイルからオブジェクトファイルを生成
mipsel-elf-gcc -O $file.c -c

# オブジェクトファイルをリンクして実行可能バイナリファイルを生成
mipsel-elf-ld $file.o -Tmipsy.ld -o $file.bin

# 実行可能バイナリファイルをシミュレータに読み込み可能な形式に変換
mipsel-elf-objcopy -Osrec $file.bin $file.srec

# 実行可能バイナリファイルを逆アセンブル
mipsel-elf-objdump -d $file.bin > $file.asm

シミュレータに入力するプログラムファイルは$file.srecを使用する。
また、逆アセンブルファイルである$file.asmはデバッグ作業の際に 有用な情報を提供してくれる。

2010年8月6日追記:
逆アセンブルファイルについて、上記の方法ではレジスタ名がソフトウェアレジスタ名となり、 デバッグの際に使いづらい。 以下の通りに、-M reg-names=numeric オプションを付けることで、(物理)レジスタ番号で 表示してくれる。

# 実行可能バイナリファイルを逆アセンブル (物理レジスタ番号で表示)
mipsel-elf-objdump -M reg-names=numeric -d $file.bin > $file.asm

自分のPC環境で使いたい人向け情報

MIPSクロスコンパイラ/アセンブラ環境をまとめたものを ここ(23.5MB)に置いておくので、自由に利用して構わない。

本クロス環境を導入する前に cygwin環境を整えておく必要がある。
cygwinについてはここから ダウンロードできる。

cygwinの環境が整えた後、cygwinのシェル(bash)から以下のコマンドを 実行して、 上記のファイル(mips-tools.tar.bz2)を展開するだけでクロス環境の導入は 完了である。

tar xvfj mips-tools.tar.bz2 -C /usr/local

※cygwin環境自体の使い方については Google等で検索するとよい。

注意:
新規にcygwinを導入した場合は最新版(バージョン1.7系列)を使うことになるが、 この場合には上記「使用前の設定」で行っているPATHの設定のうち、 2番目と3番目は不要である。(むしろ設定しない方が望ましい)
つまり、以下の設定だけ行えばよい。

export PATH=/usr/local/mips-tools/bin:$PATH
設定を省力化するための setup.shはcygwinのバージョンを判定して 自動的に最適な設定を行うようになっている。


文責:大津