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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#include <features.h>
/*
* longjmp.S atp sept 2001
* Jan-Benedict Glaw <jbglaw@lug-owl.de> 2006
*
* Restore regs and info and jmp back to a previous setjmp
*/
.globl __longjmp
.align 4
__longjmp:
.word 0x0040 /* This matches setjmp and PLT */
movl 0x4(%ap), %r0 /* Our scratch reg */
/* movl $0, %r0 */
/* movl (%r0), %r0 */
/* We are going to modify our stack frame */
/* to the same as that of the setjmp we called earlier */
movl (%r0), (%fp) /* cond handler */
movl 0x4(%r0), 0x4(%fp) /* psw */
movl 0x8(%r0), 0x8(%fp) /* ap */
movl 0xc(%r0), 0xc(%fp) /* fp */
movl 0x10(%r0), 0x10(%fp) /* pc */
/* Restore the regs */
movl 0x14(%r0), %r1
movl 0x18(%r0), %r2
movl 0x1c(%r0), %r3
movl 0x20(%r0), %r4
movl 0x24(%r0), %r5
movl 0x28(%r0), %r6
movl 0x2c(%r0), %r7
movl 0x30(%r0), %r8
movl 0x34(%r0), %r9
movl 0x38(%r0), %r10
movl 0x3c(%r0), %r11
/* Check val and set to 1 if set to zero */
movl 0x8(%ap), %r0
tstl %r0
bneq exit_ok
movl $0x1, %r0
exit_ok:
ret
.size __longjmp,.-__longjmp
libc_hidden_def(__longjmp)
|