blob: dbd18632604418a761bfad8547a1b04c075de179 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include "bits/setjmp.h" // for jmp_buf
#include <setjmp.h> // for longjmp
__attribute__((noreturn, naked, returns_twice)) void longjmp(jmp_buf env,
int val)
{
__asm__ __volatile__("mov 0(%rdi), %rbx\n"
"mov 8(%rdi), %rbp\n"
"mov 16(%rdi), %r12\n"
"mov 24(%rdi), %r13\n"
"mov 32(%rdi), %r14\n"
"mov 40(%rdi), %r15\n"
"mov 48(%rdi), %rsp\n"
"xor %rax, %rax\n"
"cmp $0, %esi\n"
"setne %al\n"
"mov %eax, %eax\n"
"jmp *56(%rdi)\n");
}
|