首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.cfi和.LFE是由c++程序的GCC编写的汇编代码中的什么?

.cfi和.LFE是由c++程序的GCC编写的汇编代码中的什么?
EN

Stack Overflow用户
提问于 2010-08-25 18:08:12
回答 1查看 8.7K关注 0票数 35

我有以下c++代码

代码语言:javascript
复制
int factorial(int n){

    if(n==0){
        return 1;
    }
    return n*factorial(n-1);

}

int main(void){
    factorial(5);
    return 0;
}

当我使用g++ -S factorial.cpp创建部件文件时,我得到以下信息:

代码语言:javascript
复制
    .file   "tail_call_opt.cpp"
    .text
.globl _Z9factoriali
    .type   _Z9factoriali, @function
_Z9factoriali:
.LFB0:
    .cfi_startproc
    .cfi_personality 0x0,__gxx_personality_v0
    pushl   %ebp
    .cfi_def_cfa_offset 8
    movl    %esp, %ebp
    .cfi_offset 5, -8
    .cfi_def_cfa_register 5
    subl    $24, %esp
    cmpl    $0, 8(%ebp)
    jne .L2
    movl    $1, %eax
    jmp .L3
.L2:
    movl    8(%ebp), %eax
    subl    $1, %eax
    movl    %eax, (%esp)
    call    _Z9factoriali
    imull   8(%ebp), %eax
.L3:
    leave
    ret
    .cfi_endproc
.LFE0:
    .size   _Z9factoriali, .-_Z9factoriali
.globl main
    .type   main, @function
main:
.LFB1:
    .cfi_startproc
    .cfi_personality 0x0,__gxx_personality_v0
    pushl   %ebp
    .cfi_def_cfa_offset 8
    movl    %esp, %ebp
    .cfi_offset 5, -8
    .cfi_def_cfa_register 5
    andl    $-16, %esp
    subl    $16, %esp
    movl    $5, (%esp)
    call    _Z9factoriali
    movl    $0, %eax
    leave
    ret
    .cfi_endproc
.LFE1:
    .size   main, .-main
    .ident  "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"
    .section    .note.GNU-stack,"",@progbits

我可以理解大部分内容,但是.cfi和.LFE部件的用途是什么呢?我在哪里可以了解到更多关于gcc制作的组件的信息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-26 05:40:19

这些指令告诉gas发出Dwarf调用帧信息标记,当帧指针丢失时,这些标记显然用于重建堆栈回溯。在你的例子中,帧指针是存在的,所以我猜它可以用来在异常处理期间执行解卷。这种机制比旧的sjlj (setjump/longjump)机制具有更少的开销。请参见here,以及链接的矮人规范。

对于前缀标签,.L .Lxx表示该标签是该文件的本地标签,因此不会与其他文件中的同名标签冲突。对于自动生成的标签,GCC一般使用.L。在这种情况下,"FB“很可能表示”函数开始“,而"FE”表示“函数结束”。

票数 57
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3564752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档