From 321d2f0e5667fd3d10e9cd41aa80818bad71ebdc Mon Sep 17 00:00:00 2001 From: David McCullough Date: Wed, 6 Feb 2002 14:35:12 +0000 Subject: 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. --- libc/sysdeps/linux/m68k/setjmp.S | 101 +++++++-------------------------------- 1 file changed, 18 insertions(+), 83 deletions(-) (limited to 'libc/sysdeps/linux/m68k/setjmp.S') 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 */ +/* This file is released under the LGPL, any version you like */ -/* Use the right prefix for registers. */ +#define _ASM +#define _SETJMP_H +#include -#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) + -- cgit v1.2.3