Rev 2773 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2773 | Rev 2778 | ||
---|---|---|---|
Line 33... | Line 33... | ||
33 | .global longjmp |
33 | .global longjmp |
34 | 34 | ||
35 | .type setjmp,@function |
35 | .type setjmp,@function |
36 | setjmp: |
36 | setjmp: |
37 | movl 0(%esp),%eax # save pc value into eax |
37 | movl 0(%esp),%eax # save pc value into eax |
38 | movl 4(%esp),%edx # address of the context variable to save context to |
38 | movl 4(%esp),%edx # address of the jmp_buf structure to save context to |
39 | 39 | ||
40 | # save registers to given structure |
40 | # save registers to the jmp_buf structure |
41 | CONTEXT_SAVE_ARCH_CORE %edx %eax |
41 | CONTEXT_SAVE_ARCH_CORE %edx %eax |
42 | 42 | ||
43 | xorl %eax,%eax # set_jmp returns 0 |
43 | xorl %eax,%eax # set_jmp returns 0 |
44 | ret |
44 | ret |
45 | 45 | ||
Line 47... | Line 47... | ||
47 | longjmp: |
47 | longjmp: |
48 | 48 | ||
49 | movl 4(%esp), %ecx # put address of jmp_buf into ecx |
49 | movl 4(%esp), %ecx # put address of jmp_buf into ecx |
50 | movl 8(%esp), %eax # put return value into eax |
50 | movl 8(%esp), %eax # put return value into eax |
51 | 51 | ||
52 | # restore registers from jmp_buf |
52 | # restore registers from the jmp_buf structure |
53 | CONTEXT_RESTORE_ARCH_CORE %ecx %edx |
53 | CONTEXT_RESTORE_ARCH_CORE %ecx %edx |
54 | 54 | ||
55 | movl %edx,0(%esp) # put saved pc on stack |
55 | movl %edx,0(%esp) # put saved pc on stack |
56 | ret |
56 | ret |
57 | 57 |