.text .globl bar bar: .cfi_startproc leal (%edi, %edi), %eax ret .cfi_endproc .globl asm_main asm_main: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp movl $47, %edi # install tramp as return address # (similar to signal return trampolines on some platforms) leaq tramp(%rip), %rax pushq %rax jmp bar # call, with return address pointing to tramp popq %rbp .cfi_def_cfa %rsp, 8 ret .cfi_endproc .globl tramp tramp: .cfi_startproc .cfi_signal_frame # Emit cfi to line up with the frame created by asm_main .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 .cfi_def_cfa_register %rbp # copy asm_main's epilog to clean up the frame popq %rbp .cfi_def_cfa %rsp, 8 ret .cfi_endproc