LibC: Implement {sig,_,}{longjmp,setjmp}
This commit is contained in:
23
userspace/libraries/LibC/arch/x86_64/setjmp.S
Normal file
23
userspace/libraries/LibC/arch/x86_64/setjmp.S
Normal file
@@ -0,0 +1,23 @@
|
||||
// int setjmp(jmp_buf env)
|
||||
.global setjmp
|
||||
setjmp:
|
||||
leaq 8(%rsp), %rax
|
||||
movq %rax, 0(%rdi)
|
||||
|
||||
movq (%rsp), %rax
|
||||
movq %rax, 8(%rdi)
|
||||
|
||||
xorq %rax, %rax
|
||||
|
||||
ret
|
||||
|
||||
// void longjmp(jmp_buf env, int val)
|
||||
.global longjmp
|
||||
longjmp:
|
||||
movq $1, %rax
|
||||
testq %rsi, %rsi
|
||||
cmovnzq %rsi, %rax
|
||||
|
||||
movq 0(%rdi), %rsp
|
||||
movq 8(%rdi), %rcx
|
||||
jmp *%rcx
|
||||
Reference in New Issue
Block a user