summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/sparc
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1999-07-09 18:23:59 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1999-07-09 18:23:59 +0000
commitf4211327a4cf706dbe51eeb7df00ca3b66b5d49a (patch)
tree9fea58cf5d8540f847ac5ecccf664f05b073fd7a /c/src/lib/libcpu/sparc
parentNew file from Jake Janovetz <janovetz@tempest.ece.uiuc.edu>. (diff)
downloadrtems-f4211327a4cf706dbe51eeb7df00ca3b66b5d49a.tar.bz2
New files from Jiri Gaisler <jgais@ws.estec.esa.nl>.
Diffstat (limited to 'c/src/lib/libcpu/sparc')
-rw-r--r--c/src/lib/libcpu/sparc/syscall/Makefile.in71
-rw-r--r--c/src/lib/libcpu/sparc/syscall/syscall.S78
-rw-r--r--c/src/lib/libcpu/sparc/syscall/syscall.h4
3 files changed, 153 insertions, 0 deletions
diff --git a/c/src/lib/libcpu/sparc/syscall/Makefile.in b/c/src/lib/libcpu/sparc/syscall/Makefile.in
new file mode 100644
index 0000000000..2600a68e12
--- /dev/null
+++ b/c/src/lib/libcpu/sparc/syscall/Makefile.in
@@ -0,0 +1,71 @@
+#
+# $Id$
+#
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = ../../../../../..
+subdir = c/src/lib/libcpu/sparc/syscall
+
+INSTALL = @INSTALL@
+
+RTEMS_ROOT = $(top_srcdir)/@RTEMS_TOPdir@
+PROJECT_ROOT = @PROJECT_ROOT@
+
+VPATH = @srcdir@
+
+PGM=${ARCH}/syscall.rel
+
+# C source names, if any, go here -- minus the .c
+C_PIECES=
+C_FILES=$(C_PIECES:%=%.c)
+C_O_FILES=$(C_PIECES:%=${ARCH}/%.o)
+
+H_FILES=
+
+# Assembly source names, if any, go here -- minus the .S
+S_PIECES=syscall
+S_FILES=$(S_PIECES:%=%.S)
+S_O_FILES=$(S_FILES:%.S=${ARCH}/%.o)
+
+SRCS=$(C_FILES) $(CC_FILES) $(H_FILES) $(S_FILES)
+OBJS=$(C_O_FILES) $(CC_O_FILES) $(S_O_FILES)
+
+include $(RTEMS_ROOT)/make/custom/${RTEMS_BSP}.cfg
+include $(RTEMS_ROOT)/make/leaf.cfg
+
+#
+# (OPTIONAL) Add local stuff here using +=
+#
+
+DEFINES +=
+CPPFLAGS +=
+CFLAGS += $(CFLAGS_OS_V)
+
+LD_PATHS +=
+LD_LIBS +=
+LDFLAGS +=
+
+#
+# Add your list of files to delete here. The config files
+# already know how to delete some stuff, so you may want
+# to just run 'make clean' first to see what gets missed.
+# 'make clobber' already includes 'make clean'
+#
+
+CLEAN_ADDITIONS +=
+CLOBBER_ADDITIONS +=
+
+${PGM}: ${SRCS} ${OBJS}
+ $(make-rel)
+
+all: ${ARCH} $(SRCS) $(PGM)
+
+# the .rel file built here will be put into libbsp.a by
+# libbsp/sparc/BSP/wrapup/Makefile
+install: all
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
diff --git a/c/src/lib/libcpu/sparc/syscall/syscall.S b/c/src/lib/libcpu/sparc/syscall/syscall.S
new file mode 100644
index 0000000000..fe9b512d81
--- /dev/null
+++ b/c/src/lib/libcpu/sparc/syscall/syscall.S
@@ -0,0 +1,78 @@
+/*
+ * systrap.S
+ *
+ * This file contains emulated system calls using software trap 0.
+ * The following calls are supported:
+ *
+ * + SYS_exit (halt)
+ * + SYS_irqdis (disable interrupts)
+ * + SYS_irqset (set interrupt level)
+ *
+ * COPYRIGHT:
+ *
+ * COPYRIGHT (c) 1995. European Space Agency.
+ *
+ * This terms of the RTEMS license apply to this file.
+ *
+ */
+
+#include <asm.h>
+#include "syscall.h"
+
+ .seg "text"
+ /*
+ * system call
+ *
+ * On entry:
+ *
+ * l0 = psr (from trap table)
+ * l1 = pc
+ * l2 = npc
+ * g1 = system call id
+ */
+
+ PUBLIC(syscall)
+
+SYM(syscall):
+
+ subcc %g1, 2, %g0 ! syscall 2, disable interrupts
+ bne 3f
+ or %l0, 0x0f00, %l4 ! set PIL=15
+ mov %l4, %psr
+ or %l0, SPARC_PSR_ET_MASK, %i0 ! return old psr with ET=1
+ ba,a 9f
+3:
+ subcc %g1, 3, %g0 ! syscall 3, enable interrupts
+ bne 1f
+ and %i0, SPARC_PSR_PIL_MASK, %l4
+ andn %l0, SPARC_PSR_PIL_MASK, %l5
+ or %l5, %l4, %l4
+ mov %l4, %psr
+ ba,a 9f
+
+1:
+ ta 0 ! halt
+9: ! leave
+ mov 0, %g1 ! clear %g1
+ jmpl %l2, %g0
+ rett %l2 + 4
+
+ PUBLIC(sparc_disable_interrupts)
+
+SYM(sparc_disable_interrupts):
+
+ mov SYS_irqdis, %g1
+ ta 0
+ retl
+ nop
+
+ PUBLIC(sparc_enable_interrupts)
+
+SYM(sparc_enable_interrupts):
+
+ mov SYS_irqen, %g1
+ ta 0
+ retl
+ nop
+
+/* end of file */
diff --git a/c/src/lib/libcpu/sparc/syscall/syscall.h b/c/src/lib/libcpu/sparc/syscall/syscall.h
new file mode 100644
index 0000000000..272234f9f2
--- /dev/null
+++ b/c/src/lib/libcpu/sparc/syscall/syscall.h
@@ -0,0 +1,4 @@
+
+#define SYS_exit 1
+#define SYS_irqdis 2
+#define SYS_irqen 3