12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #include <setjmp.h>
- #include <stdlib.h>
- void
- longjmp (jmp_buf env, int val)
- {
- val = val == 0 ? 1 : val;
-
- asm (
- "mov 0x00(%rdi),%rbp\n\t"
- "mov 0x08(%rdi),%rbx\n\t"
- "mov 0x10(%rdi),%rsp\n\t"
- "jmp *%rbx\n\t"
- );
-
-
- exit (42);
- }
- int
- setjmp (jmp_buf env)
- {
- long *p;
-
- asm ("mov %%rbp,%0"
- : "=r" (p)
- :
- );
-
- env[0].__bp = (long) p;
- env[0].__pc = p[1];
- env[0].__sp = p[0];
- return 0;
- }
|