.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 |