7.9 .cfi_startproc
.cfi_startproc
is used at the beginning of each function that should have an entry in .eh_frame
. It initializes some internal data structures and emits architecture dependent initial CFI instructions. Don't forget to close the function by .cfi_endproc
.
7.10 .cfi_endproc
.cfi_endproc
is used at the end of a function where it closes its unwind entry previously opened by .cfi_startproc
. and emits it to .eh_frame
.
7.11 .cfi_def_cfa
register
,
offset
.cfi_def_cfa
defines a rule for computing CFA as: take address from register and add offset to it.
7.12 .cfi_def_cfa_register
register
.cfi_def_cfa_register
modifies a rule for computing CFA. From now on register will be used instead of the old one. Offset remains the same.
7.13 .cfi_def_cfa_offset
offset
.cfi_def_cfa_offset
modifies a rule for computing CFA. Register remains the same, but offset is new. Note that it is the absolute offset that will be added to a defined register to compute CFA address.
7.14 .cfi_adjust_cfa_offset
offset
Same as .cfi_def_cfa_offset
but offset is a relative value that is added/substracted from the previous offset.
7.15 .cfi_offset
register
,
offset
Previous value of register is saved at offset offset from CFA.
7.16 .cfi_rel_offset
register
,
offset
Previous value of register is saved at offset offset from the current CFA register. This is transformed to .cfi_offset
using the known displacement of the CFA register from the CFA. This is often easier to use, because the number will match the code it's annotating.
7.17 .cfi_window_save
SPARC register window has been saved.
7.18 .cfi_escape
expression[, ...]
Allows the user to add arbitrary bytes to the unwind info. One might use this to add OS-specific CFI opcodes, or generic CFI opcodes that GAS does not yet support.