CFI directives


CFI support for GNU assembler (GAS)

Modern ABIs don't require frame pointers to be used in functions. However missing FPs bring difficulties when doing a backtrace. One solution is to provide Dwarf-2 CFI data for each such function. This can be easily done for example by GCC in it's output, but isn't that easy to write by hand for pure assembler functions.

With the help of these .cfi_* directives one can add appropriate unwind info into his asm source without too much trouble.

Directives implemented so far:

.cfi_startproc
Use at the beginning of each function. It initializes some internal data structures and emits initial CFI instructions.
.cfi_endproc
Opens .eh_frame, generates appropriate binary structures (CIE, FDE) and sets up relocation records.
.cfi_def_cfa  reg, imm
Set a rule for computing CFA to: take content of register  reg and add  imm to it.
.cfi_def_cfa_register  reg
Change rule for CFA to use  reg. Offset remains the same.
.cfi_def_cfa_offset  imm
Change rule for CFA to use offset  imm. Register remains the same.
.cfi_adjust_cfa_offset  imm
Like the previous one but  imm is a relative value that will be added to current offset instead of an absolute value as in .cfi_def_cfa_offset.
.cfi_offset  reg, imm
Generate a rule saying that register  reg is saved at offset  imm from CFA.

I've got a feeling it stands for Call Frame Information and is a GNU AS extension to manage call frames. From DeveloperWorks:

On some architectures, exception handling must be managed with Call Frame Information directives. These directives are used in the assembly to direct exception handling. These directives are available on Linux on POWER, if, for any reason (portability of the code base, for example), the GCC generated exception handling information is not sufficient.



To disable these, use the gcc option

-fno-asynchronous-unwind-tables

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值