From f4211327a4cf706dbe51eeb7df00ca3b66b5d49a Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Fri, 9 Jul 1999 18:23:59 +0000 Subject: New files from Jiri Gaisler . --- c/src/lib/libcpu/sparc/syscall/Makefile.in | 71 +++++++++++++++++++++++++++ c/src/lib/libcpu/sparc/syscall/syscall.S | 78 ++++++++++++++++++++++++++++++ c/src/lib/libcpu/sparc/syscall/syscall.h | 4 ++ 3 files changed, 153 insertions(+) create mode 100644 c/src/lib/libcpu/sparc/syscall/Makefile.in create mode 100644 c/src/lib/libcpu/sparc/syscall/syscall.S create mode 100644 c/src/lib/libcpu/sparc/syscall/syscall.h (limited to 'c/src/lib/libcpu/sparc') 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 +#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 -- cgit v1.2.3