blob: b0be7c2111cecdbff9158883c09eba57942e2e27 [file] [log] [blame] [raw]
.globl setjmp
setjmp:
mov (%esp), %ecx // get return EIP
mov 4(%esp), %eax // get jmp_buf
mov %ecx, (%eax)
mov %esp, 4(%eax)
mov %ebp, 8(%eax)
mov %ebx, 12(%eax)
mov %esi, 16(%eax)
mov %edi, 20(%eax)
xor %eax, %eax
ret
.globl longjmp
longjmp:
mov 8(%esp), %eax // get return value
mov 4(%esp), %ecx // get jmp_buf
mov 20(%ecx), %edi
mov 16(%ecx), %esi
mov 12(%ecx), %ebx
mov 8(%ecx), %ebp
mov 4(%ecx), %esp
mov (%ecx), %ecx // get saved EIP
mov %ecx, (%esp) // and store it on the stack
ret