Files
ygglibc/src/header/setjmp/x86_64.S
T
2024-01-12 14:22:33 +02:00

47 lines
793 B
ArmAsm

.global setjmp
.global longjmp
.global _setjmp
.global _longjmp
.section .text
// args:
// %rdi -- __jmp_buf *env
setjmp:
_setjmp:
movq %rbx, 0(%rdi)
movq %rbp, 8(%rdi)
movq %r12, 16(%rdi)
movq %r13, 24(%rdi)
movq %r14, 32(%rdi)
movq %r15, 40(%rdi)
// Calculate return stack and rip
leaq 8(%rsp), %rax
movq %rax, 48(%rdi)
movq (%rsp), %rax
movq %rax, 56(%rdi)
movq $0, %rax
ret
// args:
// %rdi -- __jmp_buf *env
// %rsi -- int val
longjmp:
_longjmp:
// Restore registers
movq 0(%rdi), %rbx
movq 8(%rdi), %rbp
movq 16(%rdi), %r12
movq 24(%rdi), %r13
movq 32(%rdi), %r14
movq 40(%rdi), %r15
movq 48(%rdi), %rsp
movq 56(%rdi), %rax
pushq %rax
// Setup return value
movq %rsi, %rax
ret