elfヘッダーのMIPSフラグの意味

elfヘッダーのMIPSフラグの意味

私はいくつかのelfファイルのヘッダーを見ていたときに奇妙な点を見つけました。

ELF Header:
  Magic:   7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, big endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           MIPS R3000
  Version:                           0x1
  ...
  Flags:                             0x80000027, noreorder, pic, cpic, abi2, mips64r2
  ...

ELF32とマークされていますが、mips64r2フラグがあるのはなぜですか?これはどういう意味ですか?これは、ファイルが64ビットプロセッサで実行されるように32ビットプログラムにコンパイルされたことを意味しますか?

また、mips64r2で実行している場合、マシンにMIPS r3000というラベルが付けられたのはなぜですか?

qemuで実行するにはどのような環境が必要ですか? mips64 r2?ミップスr3000?

答え1

私は組み込みLinuxの専門家ではありませんが、最近Busyboxルーターに「Hello World」アプリケーションを書いています。また、ルータのプロセッサタイプは同じです(MIPS R3000)。

多くの組み込みデバイスと同様に、ルータにもLinuxが組み込まれています。プロセッサとアーキテクチャは異なりますが、Linuxシステムなので、同じ実行可能ファイル形式であるELF32/64をサポートしています。

マシンを「MIPS R3000」とマークし、フラグを「mips64r2」とマークする理由は、ターゲットアーキテクチャと特定のプロセッサタイプを示します。異なるプロセッサは同じアーキテクチャを使用することができ、同じアーキテクチャは異なるフラグを見ることができる。しかし、私の注目を集めたのは、R3000が32ビットアーキテクチャであるということです。私の場合、フラグは「mips32」なので、32ビットアーキテクチャにmips64r2があり、32ビットELFファイル(64ビットのようです)は次のようになります。少し変です。

MIPSの公式文書を確認してください。参考になれば幸いです。

MIPS 64ビットELFオブジェクトファイルの仕様

MIPSシステムV ABI

GCC MIPS - オプション

関連情報