summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/m68k/setjmp.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/setjmp.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/setjmp.S')
-rw-r--r--libc/sysdeps/linux/m68k/setjmp.S101
1 files changed, 18 insertions, 83 deletions
diff --git a/libc/sysdeps/linux/m68k/setjmp.S b/libc/sysdeps/linux/m68k/setjmp.S
index d104d78ac..d7ca5dd6d 100644
--- a/libc/sysdeps/linux/m68k/setjmp.S
+++ b/libc/sysdeps/linux/m68k/setjmp.S
@@ -1,88 +1,23 @@
-/* These are predefined by new versions of GNU cpp. */
-#ifndef __USER_LABEL_PREFIX__
-#define __USER_LABEL_PREFIX__ _
-#endif
-
-#ifndef __REGISTER_PREFIX__
-#define __REGISTER_PREFIX__
-#endif
-
-/* ANSI concatenation macros. */
-
-#define CONCAT1(a, b) CONCAT2(a, b)
-#define CONCAT2(a, b) a ## b
-
-/* Use the right prefix for global labels. */
-
-#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
+/* Copyright (C) 2002, David McCullough <davidm@snapgear.com> */
+/* This file is released under the LGPL, any version you like */
-/* Use the right prefix for registers. */
+#define _ASM
+#define _SETJMP_H
+#include <bits/setjmp.h>
-#define REG(x) CONCAT1 (__REGISTER_PREFIX__, x)
+.globl __sigsetjmp;
+.type __sigsetjmp,@function
+.align 4;
-#define d0 REG (d0)
-#define d1 REG (d1)
-#define d2 REG (d2)
-#define d3 REG (d3)
-#define d4 REG (d4)
-#define d5 REG (d5)
-#define d6 REG (d6)
-#define d7 REG (d7)
-#define a0 REG (a0)
-#define a1 REG (a1)
-#define a2 REG (a2)
-#define a3 REG (a3)
-#define a4 REG (a4)
-#define a5 REG (a5)
-#define a6 REG (a6)
-#define fp REG (fp)
-#define sp REG (sp)
-
-.global SYM (__setjmp)
-.global SYM (__longjmp)
-
-SYM (__setjmp):
- moveal sp@(4),a0
- movel sp@(0),a0@(12)
- movel sp,a0@(8)
- moveml d2-d7/a2-a6,a0@(20)
- clrl d0
- rts
-
-SYM (__longjmp):
- moveal sp@(4),a0
- movel sp@(8),d0
- bne 1f
- movel #1,d0
-1:
- moveml a0@(20),d2-d7/a2-a6
- moveal a0@(8),sp
- movel a0@(12),sp@
- rts
-
-#ifdef M68881
-.global SYM (__setjmp_68881)
-.global SYM (__longjmp_68881)
-
-SYM (__setjmp_68881):
- moveal sp@(4),a0
- movel sp@(0),a0@(12)
- movel sp,a0@(8)
- moveml d2-d7/a2-a6,a0@(20)
- fmovemx fp2-fp7,a0@(64)
- clrl d0
- rts
-
-SYM (__longjmp_68881):
- moveal sp@(4),a0
- fmovemx a0@(64),fp2-fp7
- movel sp@(8),d0
- bne 1f
- movel #1,d0
-1:
- moveml a0@(20),d2-d7/a2-a6
- moveal a0@(8),sp
- movel a0@(12),sp@
- rts
+__sigsetjmp:
+ moveal %sp@(4), %a0
+ movel %sp@(0), %a0@(JB_PC)
+ moveml %d2-%d7/%a2-%a7, %a0@(JB_REGS)
+#if defined(__HAVE_68881__) || defined(__HAVE_FPU__)
+ fmovemx %fp2-%fp7, %a0@(JB_FPREGS)
#endif
+ clrl %d0
+ lea __sigjmp_save-.-8, %a0
+ jmp 0(%pc, %a0)
+