| |||
| Home > Directives Reference > Frame directives > FUNCTION or PROC | |||
The FUNCTION directive marks the start of a function. PROC is
a synonym for FUNCTION.
labelFUNCTION[{reglist1} [, {reglist2}]]
where:
reglist1is an optional list of callee-saved ARM registers.
If is
not present, and your debugger checks register usage, it will assume
that the AAPCS is in use. If you use empty brackets, this informs
the debugger that all ARM registers are caller-saved.reglist1
reglist2is an optional list of callee-saved VFP registers. If you use empty brackets, this informs the debugger that all VFP registers are caller-saved.
Use FUNCTION to mark the start of functions.
The assembler uses FUNCTION to identify the start of a
function when producing DWARF call frame information for ELF.
FUNCTION sets the canonical frame address to
be R13 (SP), and the frame state stack to be empty.
Each FUNCTION directive must have a matching ENDFUNC directive.
You must not nest FUNCTION and ENDFUNC pairs,
and they must not contain PROC or ENDP directives.
You can use the optional parameters
to inform the debugger about an alternative procedure call standard,
if you are using your own. Not all debuggers support this feature.
See your debugger documentation for details.reglist
If you specify an empty ,
using reglist{}, this indicates that all registers for
the function are caller-saved. Typically you do this when writing
a reset vector where the values in all registers are unknown on
execution. This avoids problems in a debugger if it tries to construct
a backtrace from the values in the registers.
FUNCTION does not automatically cause alignment
to a word boundary (or halfword boundary for Thumb). Use ALIGN if
necessary to ensure alignment, otherwise the call frame might not
point to the start of the function.
ALIGN ; ensures alignment
dadd FUNCTION ; without the ALIGN directive, this might not be word-aligned
EXPORT dadd
PUSH {r4-r6,lr} ; this line automatically word-aligned
FRAME PUSH {r4-r6,lr}
; subroutine body
POP {r4-r6,pc}
ENDFUNC
func6 PROC {r4-r8,r12},{D1-D3} ; non-AAPCS-conforming function
...
ENDP
func7 FUNCTION {} ; another non-AAPCS-conforming function
...
ENDFUNC