SESC用クロスコンパイラ/アセンブラ環境


概要

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

SESCシミュレータは、実行するプログラムとして、 MIPS用Linux OSの実行可能バイナリファイル(ELFフォーマットファイル)を 入力することを想定しているため、 本クロスコンパイラは基本的にはLinux用のコンパイラと同様のものと なっている。

導入方法

GitHubで64bit版Cygwin用にビルド済みのファイルも配布しているので、 本演習ではこれを使用する。
本クロスコンパイルはCygwin上で以下のコマンドを実行することで 導入できる。
tar xvfj ~/SESC/bindist/sesc-tools-cygwin64-20190702.tar.bz2 -C /usr/local
※tar.bz2ファイル名は GitHubからのファイルの取得を行った場所によって 異なるので適宜変更すること。
ファイル名の入力時に、ある程度入力したところでTabキーを押すと残りを補完して くれる機能があるので活用するとよい。

使用前の設定

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

export PATH=/usr/local/sesc-tools/bin:$PATH

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

. setup-sesc.sh   # ←ピリオドに続けて空白の後にファイル名
※あるいは、.bashrc (通常は /homeの下のユーザ毎に作成されている ディレクトリ直下にある)に 上記のPATH設定を記述しておくと、 コマンドラインシェル(bash)の起動時に自動的に設定を行ってくれる。

※cygwin環境自体の使い方については Google等で検索

構成

クロスコンパイル/アセンブラ環境は以下のプログラムにより構成される。
※mipsel-linux-gccでアセンブリソースコードもアセンブルすることができるので、 通常は mipsel-linux-asを直接使うことはない。 (gccが内部でアセンブラ他を呼び出してくれる)

本演習では、C言語のソースプログラムしかコンパイルしないので、 mipsel-linux-gccのみを使用する。

使い方

Cygwinのシェル(bash)から以下のコマンドを実行する。
# Cソースファイルから実行可能バイナリファイルを生成
mipsel-linux-gcc -O ファイル名.c -static -Tmint.x -o ファイル名.bin

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

逆アセンブルファイルについて、上記の方法ではレジスタ名がソフトウェア レジスタ名となり、具体的なレジスタ番号が分かりにくい。
以下の通りに、"-M reg-names=numeric" オプションを 付けることで、(物理)レジスタ番号で表示してくれる。

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


文責:大津