You copied the Doc URL to your clipboard.

About frame directives

Frame directives enable debugging and profiling of assembly language functions. They also enable the stack usage of functions to be calculated.

Correct use of these directives:

  • Enables the armlink --callgraph option to calculate stack usage of assembler functions.

    The following are the rules that determine stack usage:

    • If a function is not marked with PROC or ENDP, stack usage is unknown.

    • If a function is marked with PROC or ENDP but with no FRAME PUSH or FRAME POP, stack usage is assumed to be zero. This means that there is no requirement to manually add FRAME PUSH 0 or FRAME POP 0.

    • If a function is marked with PROC or ENDP and with FRAME PUSH n or FRAME POP n, stack usage is assumed to be n bytes.

  • Helps you to avoid errors in function construction, particularly when you are modifying existing code.

  • Enables the assembler to alert you to errors in function construction.

  • Enables backtracing of function calls during debugging.

  • Enables the debugger to profile assembler functions.

If you require profiling of assembler functions, but do not want frame description directives for other purposes:

  • You must use the FUNCTION and ENDFUNC, or PROC and ENDP, directives.

  • You can omit the other FRAME directives.

  • You only have to use the FUNCTION and ENDFUNC directives for the functions you want to profile.

In DWARF, the canonical frame address is an address on the stack specifying where the call frame of an interrupted function is located.