summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/x86_64/__longjmp.S
blob: 43ec0539f54595883a2ec3a655e3214a97d7f546 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <setjmp.h>
#include "dietwarning.h"

.text
.global __longjmp
.type __longjmp,@function
__longjmp:
	mov	$1,%eax
	/* Restore the return address now.  */
	movq	 (JB_PC*8)(%rdi),%rdx
	/* Restore registers. */
	movq	(JB_RBX*8)(%rdi),%rbx
	movq	(JB_RBP*8)(%rdi),%rbp
	movq	(JB_R12*8)(%rdi),%r12
	movq	(JB_R13*8)(%rdi),%r13
	movq	(JB_R14*8)(%rdi),%r14
	movq	(JB_R15*8)(%rdi),%r15
	movq	(JB_RSP*8)(%rdi),%rsp
	/* never return 0 */
	test	%esi,%esi
	cmovne	%esi,%eax
	/* Jump to saved PC.  */
	jmp	*%rdx
.size __longjmp,.-__longjmp;

link_warning("__longjmp","longjmp() not yet tested")