適用範囲:DS-5, RealView Development Suite (RVDS)
外部インターフェイス(または外部可視インターフェイス)は同一のソースファイル内に定義されていない関数の呼び出しがあるときに存在します。非リーフ関数と考えてください。例えば、FAQのリーフ関数とはの図におけるf5にあたります。
関数f5とf6が別々のCトランザクションユニット(ソースファイル)に存在する場合、これらの2つの関数の間には外部インターフェイスが存在します。
外部インターフェイスについての詳細はARM Architecture Procedure Call Standard (AAPCS)に記載されています。
コンパイラは外部インターフェイスが見られるとき、8バイトスタックアライメントを保持しなければなりません。8バイトスタックアライメントを保証するために、コンパイラはエントリ時と関数の出口でスタックポインタを一度修正します。例えば、関数f5の入り口と出口で、コンパイラはf5がf6とf7の両方を呼び出すときにスタックが8バイトアラインを保証するようにスタックポインタを修正します。コンパイラは偶数個のレジスタをスタックにプッシュするかスタックポインタを補正してこれを実現します。このルールの例外はリーフ関数です。リーフ関数は8バイトスタックアライメントを保持する必要がありません。例えば、関数f6のエントリでコンパイラはf6は関数の呼び出しを行わないため、8バイトスタックアライメントを保持しません。
アセンブラコードを自身で書く場合、8バイトスタックアライメントには必要に応じて注意を払ってください。例えば、リエントラントな割り込みハンドラの記述を行っている場合です。