(as) CFI directives
Info Catalog
(as) Byte
(as) Pseudo Ops
(as) Comm
7.9 `.cfi_sections SECTION_LIST'
================================
`.cfi_sections' may be used to specify whether CFI directives should
emit `.eh_frame' section and/or `.debug_frame' section. If
SECTION_LIST is `.eh_frame', `.eh_frame' is emitted, if SECTION_LIST is
`.debug_frame', `.debug_frame' is emitted. To emit both use
`.eh_frame, .debug_frame'. The default if this directive is not used
is `.cfi_sections .eh_frame'.
7.10 `.cfi_startproc [simple]'
==============================
`.cfi_startproc' is used at the beginning of each function that should
have an entry in `.eh_frame'. It initializes some internal data
structures. Don't forget to close the function by `.cfi_endproc'.
Unless `.cfi_startproc' is used along with parameter `simple' it
also emits some architecture dependent initial CFI instructions.
7.11 `.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.12 `.cfi_personality ENCODING [, EXP]'
========================================
`.cfi_personality' defines personality routine and its encoding.
ENCODING must be a constant determining how the personality should be
encoded. If it is 255 (`DW_EH_PE_omit'), second argument is not
present, otherwise second argument should be a constant or a symbol
name. When using indirect encodings, the symbol provided should be the
location where personality can be loaded from, not the personality
routine itself. The default after `.cfi_startproc' is
`.cfi_personality 0xff', no personality routine.
7.13 `.cfi_lsda ENCODING [, EXP]'
=================================
`.cfi_lsda' defines LSDA and its encoding. ENCODING must be a constant
determining how the LSDA should be encoded. If it is 255
(`DW_EH_PE_omit'), second argument is not present, otherwise second
argument should be a constant or a symbol name. The default after
`.cfi_startproc' is `.cfi_lsda 0xff', no LSDA.
7.14 `.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.15 `.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.16 `.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.17 `.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.18 `.cfi_offset REGISTER, OFFSET'
===================================
Previous value of REGISTER is saved at offset OFFSET from CFA.
7.19 `.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.20 `.cfi_register REGISTER1, REGISTER2'
=========================================
Previous value of REGISTER1 is saved in register REGISTER2.
7.21 `.cfi_restore REGISTER'
============================
`.cfi_restore' says that the rule for REGISTER is now the same as it
was at the beginning of the function, after all initial instruction
added by `.cfi_startproc' were executed.
7.22 `.cfi_undefined REGISTER'
==============================
From now on the previous value of REGISTER can't be restored anymore.
7.23 `.cfi_same_value REGISTER'
===============================
Current value of REGISTER is the same like in the previous frame, i.e.
no restoration needed.
7.24 `.cfi_remember_state',
===========================
First save all current rules for all registers by `.cfi_remember_state',
then totally screw them up by subsequent `.cfi_*' directives and when
everything is hopelessly bad, use `.cfi_restore_state' to restore the
previous saved state.
7.25 `.cfi_return_column REGISTER'
==================================
Change return column REGISTER, i.e. the return address is either
directly in REGISTER or can be accessed by rules for REGISTER.
7.26 `.cfi_signal_frame'
========================
Mark current function as signal trampoline.
7.27 `.cfi_window_save'
=======================
SPARC register window has been saved.
7.28 `.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.
7.29 `.cfi_val_encoded_addr REGISTER, ENCODING, LABEL'
======================================================
The current value of REGISTER is LABEL. The value of LABEL will be
encoded in the output file according to ENCODING; see the description
of `.cfi_personality' for details on this encoding.
The usefulness of equating a register to a fixed label is probably
limited to the return address register. Here, it can be useful to mark
a code segment that has only one return address which is reached by a
direct branch and no copy of the return address exists in memory or
another register.
Info Catalog
(as) Byte
(as) Pseudo Ops
(as) Comm
automatically generated by
info2html