FUNCTION、PROC

FUNCTION ディレクティブは、関数の開始位置をマークします。PROCFUNCTION と同じ意味です。

Show/hide構文

label FUNCTION [{reglist1} [, {reglist2}]]

各項目には以下の意味があります。

reglist1

被発呼側によって保存される ARM レジスタのリストを指定できます(省略可)。reglist1 が指定されていない場合、デバッガはレジスタの使用状況をチェックするときに AAPCS が使用されていると見なします。空の角括弧を使用すると、すべての ARM レジスタは呼び出される側によって保存されることがデバッガに通知されます。

reglist2

被発呼側によって保存される浮動小数点レジスタのリストを指定できます(省略可)。空の角括弧を使用すると、すべての浮動小数点レジスタは被発呼側によって保存されることがデバッガに通知されます。

Show/hide使用法

FUNCTION ディレクティブを使用して関数の開始位置をマークします。ELF の DWARF コールフレーム情報を生成するとき、アセンブラは FUNCTION を使用して関数の開始位置を識別します。

FUNCTION によって標準構造フレームアドレスは R13(SP)に設定され、フレーム状態スタックは空になります。

FUNCTION ディレクティブには、対応する ENDFUNC ディレクティブが必要です。FUNCTIONENDFUNC の対をネストしたり、これらの対に PROC ディレクティブや ENDP ディレクティブを含めたりすることはできません。

別のプロシージャコール標準を使用している場合は、オプションの reglist パラメータを使用して、その情報をデバッガに通知できます。ただし、すべてのデバッガがこの機能をサポートしているわけではありません。詳細については、デバッガのマニュアルを参照して下さい。

{} を使用して空の reglist を指定した場合、この関数のすべてのレジスタは被発呼側によって保存されることが示されます。この操作は通常、実行時にすべてのレジスタの値が不明なリセットベクタを記述する際に行います。これにより、デバッガがレジスタ内の値からのバックトレースの構築を試みた場合に発生する、デバッガ内の問題が回避されます。

Note

FUNCTION では、ワード境界(T32 の場合はハーフワード境界)への整列は自動的には行われません。アラインメントを行う必要がある場合は ALIGN を使用します。このディレクティブを使用しないと、コールフレームによって関数の開始位置が示されない場合があります。

Show/hide

        ALIGN      ; アラインメントを行う
dadd    FUNCTION   ; ALIGN ディレクティブなしではワード境界へのアラインメントが行われない可能性がある
        EXPORT  dadd
        PUSH       {r4-r6,lr}    ; 自動的にワード境界へのアラインメントが行われる
        FRAME PUSH {r4-r6,lr}
        ; サブルーチン本体
        POP        {r4-r6,pc}
        ENDFUNC
func6   PROC {r4-r8,r12},{D1-D3} ; AAPCS に非準拠の関数
        ...
        ENDP
func7   FUNCTION {} ; AAPCS に非準拠の別の関数
        ...
        ENDFUNC

Show/hide関連項目

Copyright © 2014 ARM. All rights reserved.ARM DUI 0802AJ
Non-ConfidentialID061814