summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/m68k/__longjmp.S
diff options
context:
space:
mode:
authorDavid McCullough <davidm@snapgear.com>2002-02-06 14:35:12 +0000
committerDavid McCullough <davidm@snapgear.com>2002-02-06 14:35:12 +0000
commit321d2f0e5667fd3d10e9cd41aa80818bad71ebdc (patch)
tree390fead2a484af74aa8d9b8360da12b46197bdfa /libc/sysdeps/linux/m68k/__longjmp.S
parente39dd6837ce96595e681b955cedfd5b6d6888ba4 (diff)
Add in clone (untested)
Fix up setjmp/longjmp which were quite broken not withstanding all the new versions. Needs a little more test time before I'll trust this code totally.
Diffstat (limited to 'libc/sysdeps/linux/m68k/__longjmp.S')
-rw-r--r--libc/sysdeps/linux/m68k/__longjmp.S24
1 files changed, 24 insertions, 0 deletions
diff --git a/libc/sysdeps/linux/m68k/__longjmp.S b/libc/sysdeps/linux/m68k/__longjmp.S
new file mode 100644
index 000000000..d218f2ef5
--- /dev/null
+++ b/libc/sysdeps/linux/m68k/__longjmp.S
@@ -0,0 +1,24 @@
+
+/* Copyright (C) 2002, David McCullough <davidm@snapgear.com> */
+/* This file is released under the LGPL, any version you like */
+
+#define _ASM
+#define _SETJMP_H
+#include <bits/setjmp.h>
+
+.globl __longjmp;
+.type __longjmp,@function
+.align 4; \
+__longjmp:
+ moveal %sp@(4), %a0
+ movel %sp@(8), %d0
+ bne 1f
+ movel #1, %d0
+1:
+ moveml %a0@(JB_REGS), %d2-%d7/%a2-%a7
+#if defined(__HAVE_68881__) || defined(__HAVE_FPU__)
+ fmovemx %a0@(JB_FPREGS), %fp2-%fp7
+#endif
+ movel %a0@(JB_PC), %sp@
+ rts
+