Rev 2773 | Show entire file | Ignore 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 | ||