HN 日本語サマリー

← 一覧へ戻る
プログラミング

GCC 1.27 (2019) のビルド

Building GCC 1.27 (2019) (kristerw.blogspot.com)

6 pointsby ciponi1 コメント

要約

この記事は、1988年にリリースされた古いコンパイラGCC 1.27を、現代の64ビットUbuntuシステム上でビルドし、動作させるプロセスを詳述しています。筆者は、64ビット環境への対応や、古いGCCと現代のシステムヘッダーとの互換性の問題に対処し、DBXデバッグフォーマットを有効化しました。記事では、Ubuntu上でGCC 1.27をビルドするための詳細な手順(前提条件、ソースコードのダウンロードとパッチ適用、設定、段階的なビルド、インストール)も提供されています。

全文翻訳

2019年1月26日土曜日 GCC 1.27のビルド GCC 1.27は1988年にリリースされ、x86 CPUをサポートする最初のGCCバージョンです。これを私のデスクトップコンピュータで動作させるのは面白いだろうと思いました。Mikhail Maltsevは以前、「Building and using a 29-year-old compiler on a modern system」という素晴らしいブログ記事を書きました。私はMikhailの作業を出発点としましたが、64ビットUbuntuシステム上でビルドしていたため、64ビットOSで実行するためにパスとas/ldオプションを更新する必要がありました。また、古いGCCがシステムヘッダーを理解しないという、より大きな問題もありました。GDBが理解できないUNIX/32V SDBフォーマットの代わりにDBXデバッグフォーマットも有効にしました。しかし、Mikhailのパッチに大きな変更を加える必要はありませんでした。驚くほどうまく動作します。現代のアセンブラ、リンカ、デバッガは、GCC 1.27が生成したコードを問題なく扱います。また、-O、-E、-S、-c、-g、-W、-pedantic、-fomit-frame-pointerのようなコマンドオプションは、現代のGCCを使用する際に期待する通りの動作をします。すべてのオプションはマニュアルページに記載されています。manコマンドにgcc.1ファイルを渡すことでテキストをフォーマットできます。man -l gcc.1 Ubuntu上でGCC 1.27をビルドする方法 以下に説明するように、64ビットUbuntu Desktop 16.04上でコンパイラをビルドしました。 前提条件 GCC 1.27は32ビットプログラムなので、32ビットコンパイラとランタイムサポートをインストールする必要があります。 sudo apt install gcc-multilib ソースコードのダウンロードと準備 ソースコードとパッチをダウンロードし、パッチを適用します。 wget https://gcc.gnu.org/pub/gcc/old-releases/gcc-1/gcc-1.27.tar.bz2 wget https://gist.github.com/kristerw/b854b6d285e678452a44a6bcbf7ef86f/raw/gcc-1.27.patch tar xf gcc-1.27.tar.bz2 cd gcc-1.27 patch -p1 < ../gcc-1.27.patch ソースコードの設定 コンパイラは、正しい設定ファイルへのシンボリックリンクを作成することで設定します。 ln -s config-i386v.h config.h ln -s tm-i386v.h tm.h ln -s i386.md md ln -s output-i386.c aux-output.c Makefileのbindirとlibdirを更新することで、コンパイラのインストール場所を変更したい場合があります。私はそれらを以下のように設定しました。 bindir = /home/kristerw/compilers/gcc-1.27/bin libdir = /home/kristerw/compilers/gcc-1.27/lib ビルドとインストール コンパイラは2段階(または3段階)でビルドされます。まず、システムコンパイラを使用してビルドを開始します。 make 次に、新しくビルドされたコンパイラを使用して再度ビルドします。 make stage1 make CC=stage1/gcc CFLAGS="-O -Bstage1/ -Iinclude" 3番目のオプションのステップとして、2番目のコンパイラを使用して再度ビルドし、生成されたバイナリが2番目のコンパイラと同一であることを確認します(そうでない場合、コンパイラは自身を誤ってコンパイルしたことになります)。 make stage2 make CC=stage2/gcc CFLAGS="-O -Bstage2/ -Iinclude" diff cpp stage2/cpp diff gcc stage2/gcc diff cc1 stage2/cc1 これでコンパイラをインストールする準備ができました。 make install Krister Walfridssonによって投稿 2019年1月26日土曜日 メールで送信 このブログに投稿 Facebookに共有 Pinterestに共有 ラベル: C, GCC コメント1件: Jason Stevens 2019年5月5日 4:06 AM 私は何よりもまずDoomをビルドするためにgcc 1.27を使用しています。固定小数点演算のためにASMバージョンを使用する必要がありました。なぜなら、long long型がないからです。いずれにせよ、64ビットバージョンのためにgcc 1.27を32ビット命令とレジスタにコンパイルするように変換するのはどれくらい難しいだろうかと疑問に思っています。ただし、ライブラリとインターフェースするにはシンキングが必要になります。 返信削除返信コメントを追加 さらに読み込む... 注: このブログのメンバーのみコメントを投稿できます。 新しい投稿古い投稿ホーム購読:コメントを投稿 (Atom)