diff options
Diffstat (limited to 'src/setjmp/nt32/longjmp.s')
-rw-r--r-- | src/setjmp/nt32/longjmp.s | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/setjmp/nt32/longjmp.s b/src/setjmp/nt32/longjmp.s index 73b2e61..045b93d 100644 --- a/src/setjmp/nt32/longjmp.s +++ b/src/setjmp/nt32/longjmp.s @@ -10,7 +10,23 @@ ___longjmp: __longjmp: _longjmp: - test %edx, %edx # is val zero? + movl 4(%esp), %ecx # jump buffer + movl 8(%esp), %eax # val + + test %eax, %eax # is val zero? + jne 1f # no: return val + xor $1, %eax # yes: return one + +1: + movl 20(%ecx), %esi # restore regs + movl 16(%ecx), %edi + movl 12(%ecx), %ebp + movl 8(%ecx), %ebx + + movl 4(%ecx), %esp # original stack pointer + + movl (%ecx), %edx # original return address + jmp *%edx .section .got$longjmp .global __imp__longjmp |