xref: /kvm-unit-tests/lib/x86/setjmp32.S (revision 9dde4243e6f1759280d3fed2486ae62e80c3f8c7)
1.globl setjmp
2setjmp:
3	mov (%esp), %ecx	// get return EIP
4	mov 4(%esp), %eax	// get jmp_buf
5	mov %ecx, (%eax)
6	mov %esp, 4(%eax)
7	mov %ebp, 8(%eax)
8	mov %ebx, 12(%eax)
9	mov %esi, 16(%eax)
10	mov %edi, 20(%eax)
11	xor %eax, %eax
12	ret
13
14.globl longjmp
15longjmp:
16	mov 8(%esp), %eax	// get return value
17	mov 4(%esp), %ecx	// get jmp_buf
18	mov 20(%ecx), %edi
19	mov 16(%ecx), %esi
20	mov 12(%ecx), %ebx
21	mov 8(%ecx), %ebp
22	mov 4(%ecx), %esp
23	mov (%ecx), %ecx	// get saved EIP
24	mov %ecx, (%esp)	// and store it on the stack
25	ret
26