blob: 672b217707da731e5d4ee97c1ee177547ee43ee1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#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");
}
|