diff options
Diffstat (limited to 'mdk-stage1/dietlibc/i386/__longjmp.S')
-rw-r--r-- | mdk-stage1/dietlibc/i386/__longjmp.S | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/mdk-stage1/dietlibc/i386/__longjmp.S b/mdk-stage1/dietlibc/i386/__longjmp.S new file mode 100644 index 000000000..312e01ed1 --- /dev/null +++ b/mdk-stage1/dietlibc/i386/__longjmp.S @@ -0,0 +1,20 @@ +#define _ASM +#define _SETJMP_H +#include <bits/setjmp.h> + +.text +.global __longjmp +__longjmp: + movl 4(%esp), %ecx /* User's jmp_buf in %ecx. */ + movl 8(%esp), %eax /* Second argument is return value. */ + /* Save the return address now. */ + movl (JB_PC*4)(%ecx), %edx + /* Restore registers. */ + movl (JB_BX*4)(%ecx), %ebx + movl (JB_SI*4)(%ecx), %esi + movl (JB_DI*4)(%ecx), %edi + movl (JB_BP*4)(%ecx), %ebp + movl (JB_SP*4)(%ecx), %esp + /* Jump to saved PC. */ + jmp *%edx +.size __longjmp,.-__longjmp; |