From 6b765c480f8c810fc495a32baa696bbeb75adc09 Mon Sep 17 00:00:00 2001 From: rsc Date: Sun, 16 Jul 2006 15:40:51 +0000 Subject: rename swtch.S to setjmp.S --- setjmp.S | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 setjmp.S (limited to 'setjmp.S') diff --git a/setjmp.S b/setjmp.S new file mode 100644 index 0000000..7b42dc7 --- /dev/null +++ b/setjmp.S @@ -0,0 +1,37 @@ +.globl setjmp +setjmp: + movl 4(%esp), %eax + + movl %ebx, 0(%eax) + movl %ecx, 4(%eax) + movl %edx, 8(%eax) + movl %esi, 12(%eax) + movl %edi, 16(%eax) + movl %esp, 20(%eax) + movl %ebp, 24(%eax) + pushl 0(%esp) /* %eip */ + popl 28(%eax) + + movl $0, %eax /* return value */ + ret + +.globl longjmp +longjmp: + movl 4(%esp), %eax + + movl 0(%eax), %ebx + movl 4(%eax), %ecx + movl 8(%eax), %edx + movl 12(%eax), %esi + movl 16(%eax), %edi + movl 20(%eax), %esp + movl 24(%eax), %ebp + + addl $4, %esp /* pop %eip into thin air */ + pushl 28(%eax) /* push new %eip */ + + movl $1, %eax /* return value (appears to come from setjmp!) */ + ret + + + -- cgit v1.2.3