| .text | |
| .globl bar | |
| bar: | |
| .cfi_startproc | |
| leal (%edi, %edi), %eax | |
| ret | |
| .cfi_endproc | |
| .globl foo | |
| foo: | |
| .cfi_startproc | |
| .cfi_escape 0x16, 0x10, 0x06, 0x38, 0x1c, 0x06, 0x08, 0x47, 0x1c | |
| call bar | |
| addl $1, %eax | |
| popq %rdi | |
| subq $0x47, %rdi | |
| jmp *%rdi # Return | |
| .cfi_endproc | |
| .globl asm_main | |
| asm_main: | |
| .cfi_startproc | |
| pushq %rbp | |
| .cfi_def_cfa_offset 16 | |
| .cfi_offset 6, -16 | |
| movq %rsp, %rbp | |
| .cfi_def_cfa_register 6 | |
| movl $47, %edi | |
| # Non-standard calling convention. The real return address must be | |
| # decremented by 0x47. | |
| leaq 0x47+1f(%rip), %rax | |
| pushq %rax | |
| jmp foo # call | |
| 1: | |
| popq %rbp | |
| .cfi_def_cfa 7, 8 | |
| ret | |
| .cfi_endproc |