現在、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()ポインタ)を除いては関係ありません。