Nios II Gen2 プロセッサー・リファレンス・ガイド

ID 683836
日付 10/28/2016
Public
ドキュメント目次

7.4.4. 関数プロローグ

Nios II C/C++ コンパイラーは、スタックの一時保存と出力引数を保存する関数のスタックフレームを割り当てる関数プロローグを生成します。さらに、各プロローグは、呼び出し関数の状態を保存しなければなりません。これは、特定のレジスターのスタックへの保存を必要とします。これらのレジスター、呼び出し先保存レジスターは、「レジスター使用率」セクションの「Nios II ABI レジスター使用率」の表にリストされています。関数プロローグは、関数がレジスターを使用する場合にのみ、呼び出し先保存レジスターを保存する必要があります。

関数プロローグのアルゴリズムが与えられると、バックトレースを実行時にデバッガーは命令を逆アセンブルして呼び出し関数のプロセッサー状態を再構築できます。

注: プロローグが何を実行したのかを把握するより良い方法は、実行可能でリンク可能なフォーマットである (.elf)ファイルの DWARF-2 デバッギング・フィールドに格納されている情報を使用することです。.

Nios II 関数プロローグで検索可能な命令は、次のタスクを実行します。

  • スタックポインターの調整 ( フレームの割り当て )
  • フレームへのレジスターの保存
  • フレームポインターの保存されるフレームポインターの位置への設定

関数プロローグ

/* Adjust the stack pointer */ addi sp, sp, -16 /* make a 16-byte frame */ /* Store registers to the frame */ stw ra, 12(sp) /* store the return address */ stw fp, 8(sp) /* store the frame pointer*/ stw r16, 4(sp) /* store callee-saved register */ stw r17, 0(sp) /* store callee-saved register */ /* Set the new frame pointer */ addi fp, sp, 8