summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/i386/__longjmp.S
blob: 312e01ed1a848648930bee3d445b31f507b1b836 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#define _ASM
#define _SETJMP_H
#include <bits/setjmp.h>

.text
.global __longjmp
__longjmp:
	movl 4(%esp), %ecx	/* User's jmp_buf in %ecx.  */
	movl 8(%esp), %eax	/* Second argument is return value.  */
	/* Save the return address now.  */
	movl (JB_PC*4)(%ecx), %edx
	/* Restore registers.  */
	movl (JB_BX*4)(%ecx), %ebx
	movl (JB_SI*4)(%ecx), %esi
	movl (JB_DI*4)(%ecx), %edi
	movl (JB_BP*4)(%ecx), %ebp
	movl (JB_SP*4)(%ecx), %esp
	/* Jump to saved PC.  */
	jmp *%edx
.size __longjmp,.-__longjmp;