1. ホーム
  2. arm

[解決済み] ARM ABIとEABIの目的は何ですか?

2022-03-01 21:01:05

質問事項

このPDFを見れば見るほど( アプリケーション・バイナリ・インターフェース ARM アーキテクチャ。基本規格 )の意味を理解していない。また、以下の点についてもコメントが欲しい。 ARMアーキテクチャのプロシージャコール規格 ARM アーキテクチャ用 ELF .

解決方法は?

ABI ( アプリケーションバイナリインターフェース ) は、高級言語における低レベルの概念と、特定のハードウェア/OSプラットフォームのマシンコードの能力との対応関係を定義した規格です。以下のようなものが含まれる。

  • C/C++/Fortran/...の使い方 データ型 メモリ上に配置される(データサイズ/アラインメント)。
  • ネストされた方法 関数呼び出し の動作(関数の呼び出し元に戻るための情報がどこに、どのように格納されているか、CPUのレジスタやメモリ内の関数引数がどこに渡されているか)。
  • どのように プログラム起動・初期化 の動作(実行ファイルのデータ形式、コードやデータのロード方法、DLLの動作...など)

これに対する回答は

  • 言語固有 (したがって、C ABI、C++ ABI、Fortran ABI、Pascal ABIなどがあります。) Java バイトコード仕様も、実際のハードウェアではなく仮想プロセッサをターゲットにしていますが、ABIです)。
  • オペレーティングシステム固有 (同じハードウェア上のMS WindowsとLinuxは異なるABIを使用します)。
  • ハードウェア/CPU固有 (ARMとx86のABIは異なる)。
  • 長い時間をかけて進化する (例えば、x86のSSEレジスタをアプリケーションでどのように使用するかを指定することは、もちろんCPUが新しくなって初めて可能になります。 がありました。 そのため、既存のABIを明確化する必要がありました)。

この標準化がなければ、異なるコンパイラで作成された(機械)コードは同じ種類のライブラリを使用することができません(ライブラリコードが関数引数やデータ構造の受け渡しをどのように期待しているか、どうやって知ることができるでしょうか?)

各プラットフォーム (特定のハードウェア、OSソフトウェア、特定のプログラミング言語で書かれ/特定のコンパイラでコンパイルされたコードの組み合わせ)。 は、ABIの全セットを定義しています。 相互運用を可能にするためです。この分野の用語は明確ではなく、単に「ABI」と呼ばれることもあれば、「プラットフォームサプリメント」と呼ばれたり、プログラミング言語について触れて「C++ ABI」などということもあります。このようなものは1つではないことを覚えておいてください。

ご質問の中でリンクされている文書は、いずれもその具体例(言語/OS/ハードウェア固有のABI)です。

特定のプラットフォームであっても、必ずしも 唯一無二の なぜなら、ABI(セット)が異なれば、異なる利点(プログラムによっては、より良いパフォーマンス/より小さなコード/より良いメモリ使用/...)があり、システム設計者は通常、柔軟性や許容性を確保しようとするものだからです。

例えば、32bitのMicrosoft Windowsでは、関数の呼び出し規約部分について、多数のABI(fastcall、stdcall、pascal、...)が存在します。

とにかく、stackoverflow で "ABI" を検索すると(サイドバーの "Related" のリンクも含めて)、この質問を研究するための多くの手がかりが得られるので、この時点で私の回答は終了します。