UNIXシステムはどのようにアプリケーションを呼び出すのですか?

UNIXシステムはどのようにアプリケーションを呼び出すのですか?

現在、Arm64プラットフォーム用のCランタイムライブラリを実装していますが、アプリケーションの実行の正確な時点(ELFファイルがエントリポイントとして定義されている)で環境についてどのような前提ができるのかわかりません。環境とは主にスタック設定とCPUレジスタを意味します。

カーネルのソースコードを見て情報をまとめることができましたが、すべてではありませんでした。

私の質問は:アプリケーションの呼び出し規則が文書化および/または標準化されていますか?たとえば、Arm64基本プロシージャコール標準と同等のものを探しています。

私は特にLinuxに興味があるので、Unix&Linux Stack Exchangeにこの記事を投稿しています。

ベストアンサー1

残念ながら、Armv8プラットフォーム用のSystem V ABI規格にはプロセス初期化が存在しないようです(出典:ARMが発表したABI)、この標準の他のバージョンにも存在するが。

しかし、これは標準の一部であるようで、私の質問に対する答えを見つけることができました。AMD64 SystemV ABI、v0.99

内容を非常に簡単に要約すると、プロセスの初期化には次のものが含まれます。

  • argc、argv、およびenvp(および対応するデータ)をスタックに入れます。
  • 浮動小数点演算を有効にする必要があります。
  • レジスタ状態は、スタックポインタ(場合によってはフレームポインタとatexit()ポインタ)を除いては関係ありません。

おすすめ記事