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