
2026/07/23 4:05
GCC 1.27(2019 年)のビルド
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
本文の主な目的は、1988 年の歴史的ツールである GCC 1.27 コンパイラを、現代的な 64 ビット Ubuntu システム上で成功裡に構築・インストールするための読者向けガイドを提供することです。元のバージョンには当時の x86 アーキテクチャへのネイティブサポートはなかったものの、特定の技術的調整によって現在でも動作可能です。手順には、ビルド環境の構成、GDB の互換性問題によりデバッグフォーマットを UNIX/32V SDB から DBX に切り替え、古いコードと新しいハードウェア間の互換性を解決するためにシンボリックリンクを作成するといった内容が含まれます。第 2 段階における重要な検証ステップでは、自己ビルドプロセス中に生成された
cpp, gcc, cc1 などバイナリが同一であることを確認し、歴史的正確性を保持します。設定完了後、インストールフェーズでは make install といった標準コマンドを使用して、必要となるライブラリを /home/kristerw/compilers/gcc-1.27/bin などのユーザー定義ディレクトリに配置します。この取り組みは、GCC の特定のアナログな振る舞いに依存する 29 年分のコードベースをコンパイルする必要があるユーザーにとって不可欠です。また、これはコンパイラの進化を研究している研究者や企業が、現代のマシン上でこの正確なソフトウェアスタックを実行し、アーカイブや教育用プロジェクトを行うことを可能にします。Mikhail Maltsev のブログ投稿に記載された手順に従うことで、誰もが古代のコンピューティング史と現在のオペレーティングシステムの間を架橋できます。本文
GCC 1.27(1988 年リリース)の Ubuntu 64 ビット環境での構築と動作検証
1988 年にリリースされた、x86 CPU をサポートする最初の GCC バージョンである GCC 1.27 を、最新のデスクトップコンピュータで動かすという試みが面白いと感じました。
Mikhail Maltsev 氏による「現代のシステム上で 29 年前のコンパイラを構築し使用する」というブログ記事を参考に、以下の工夫を加えて動作させました。
- アーキテクチャ対応: 64 ビット系の Ubuntu システム上で動作させるため、パスと
/as
のオプションを更新。ld - ヘッダー互換性: 古くなった GCC がシステムヘッダーを理解できない問題を解消。
- デバッグ形式の調整: UNIX/32V SDB 形式ではなく、DBX デバッグ形式を有効化(Mikhail 氏のパッチに対する多大な修正なしで実現)。
動作検証結果
驚くべきことに、すべての手順が正常に完了し問題なく動作しました。 現代のアセンブラー、リンカ、デバッガーは、GCC 1.27 が生成するコードを完全に処理可能です。
以下のようなコマンドオプションは、現代の GCC と同様の振る舞いを示します:
(最適化)-O
(プレプロセッサのみ実行)-E
(アセンブラー出力)-S
(リンカー入力ファイル生成)-c
(デバッグ情報)-g
(警告表示)-W
(厳密な標準準拠)-pedantic-fomit-frame-pointer
すべてのオプションはマニュアルページに文書化されています。以下のコマンドを実行すると、フォーマットされたテキストを閲覧できます:
man -l gcc.1
Ubuntu 上で GCC 1.27 を構築する方法
64 ビットの Ubuntu デスクトップ環境(バージョン 16.04)での構築手順です。
1. 前提条件
GCC 1.27 は32 ビットプログラムであるため、システムに 32 ビットコンパイラーとランタイムサポートをインストールする必要があります。
sudo apt install gcc-multilib
2. ソースコードのダウンロードと準備
ソースコードと必要なパッチを取得し、適用します。
-
ファイルのダウンロード
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
3. ソースコードの構成設定
コンパイラを正しく動作させるためには、以下の設定ファイルへのシンボリックリンクを作成します:
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を更新してください。私の設定例:libdirbindir = /home/kristerw/compilers/gcc-1.27/bin libdir = /home/kristerw/compilers/gcc-1.27/lib
4. ビルドとインストール
GCC の構築は通常、システム上の既存のコンパイラーを使用して段階的に進めます。
第 1 段階:初期ビルド
既存のコンパイラーを使って最初のバイナリを作成します:
make
第 2 段階:自己ビルド(Stage 1)
新しく構築されたコンパイラーを使って再度ビルドし、互換性を確保します:
make stage1 make CC=stage1/gcc CFLAGS="-O -Bstage1/ -Iinclude"
第 3 段階:再確認ビルド(Stage 2)【オプション】
さらに精度を高めるため、Stage 1 で作ったコンパイラーを使ってもう一度ビルドし、生成されたバイナリが正しく再構築されているか検証します。
もし不一致がある場合、コンパイラが自身を誤ってコンパイルしている可能性があります:
make stage2 make CC=stage2/gcc CFLAGS="-O -Bstage2/ -Iinclude" # 差分確認コマンド diff cpp stage2/cpp diff gcc stage2/gcc diff cc1 stage2/cc1
インストール
すべてのビルドが完了したら、システムにインストールします:
make install