summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/i386
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps/linux/i386')
-rw-r--r--libc/sysdeps/linux/i386/Makefile29
-rw-r--r--libc/sysdeps/linux/i386/setjmp.S88
2 files changed, 117 insertions, 0 deletions
diff --git a/libc/sysdeps/linux/i386/Makefile b/libc/sysdeps/linux/i386/Makefile
new file mode 100644
index 000000000..bfb8d82ff
--- /dev/null
+++ b/libc/sysdeps/linux/i386/Makefile
@@ -0,0 +1,29 @@
+# Copyright (C) 1995,1996 Robert de Bath <rdebath@cix.compulink.co.uk>
+# This file is part of the Linux-8086 C library and is distributed
+# under the GNU Library General Public License.
+
+TOPDIR=../../../
+include $(TOPDIR)Rules.make
+
+CFLAGS+= -D_GCC_LIMITS_H_
+
+LIBC=$(TOPDIR)libc.a
+
+.S.s:
+ $(CC) $(CFLAGS) -D__ASSEMBLY__ -traditional -E -o $*.s $<
+.S.o:
+ $(CC) $(CFLAGS) -c -o $*.o $<
+
+include makefile.objs
+
+all: $(LIBC)
+
+$(LIBC): $(OBJ)
+ $(AR) $(ARFLAGS) $@ $(OBJ)
+
+transfer:
+ -@rm -f ../include/stdio.h
+ cp -p stdio.h ../include/.
+
+clean:
+ rm -f *.o
diff --git a/libc/sysdeps/linux/i386/setjmp.S b/libc/sysdeps/linux/i386/setjmp.S
new file mode 100644
index 000000000..3ff05425f
--- /dev/null
+++ b/libc/sysdeps/linux/i386/setjmp.S
@@ -0,0 +1,88 @@
+/* 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)
+
+/* Use the right prefix for registers. */
+
+#define REG(x) CONCAT1 (__REGISTER_PREFIX__, x)
+
+#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
+#endif