From 82e1e997cac695532f8382cee94d770cc7fb59ec Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Fri, 29 Mar 2002 14:22:13 +0000 Subject: 2002-03-28 Ralf Corsepius * tbr/Makefile.am: New file. * tbr/.cvsignore: New file. * tbr/tbr.c: New file. * tbr/tbr.h: New file. * configure.ac: Add tbr subdir. * Makefile.am: Add tbr subdir. --- c/src/lib/libcpu/sparc/ChangeLog | 9 ++++++ c/src/lib/libcpu/sparc/Makefile.am | 2 +- c/src/lib/libcpu/sparc/configure.ac | 3 +- c/src/lib/libcpu/sparc/tbr/.cvsignore | 2 ++ c/src/lib/libcpu/sparc/tbr/Makefile.am | 31 +++++++++++++++++++++ c/src/lib/libcpu/sparc/tbr/tbr.c | 50 ++++++++++++++++++++++++++++++++++ c/src/lib/libcpu/sparc/tbr/tbr.h | 40 +++++++++++++++++++++++++++ 7 files changed, 135 insertions(+), 2 deletions(-) create mode 100644 c/src/lib/libcpu/sparc/tbr/.cvsignore create mode 100644 c/src/lib/libcpu/sparc/tbr/Makefile.am create mode 100644 c/src/lib/libcpu/sparc/tbr/tbr.c create mode 100644 c/src/lib/libcpu/sparc/tbr/tbr.h (limited to 'c') diff --git a/c/src/lib/libcpu/sparc/ChangeLog b/c/src/lib/libcpu/sparc/ChangeLog index e10ca26a85..d024c2c548 100644 --- a/c/src/lib/libcpu/sparc/ChangeLog +++ b/c/src/lib/libcpu/sparc/ChangeLog @@ -1,3 +1,12 @@ +2002-03-28 Ralf Corsepius + + * tbr/Makefile.am: New file. + * tbr/.cvsignore: New file. + * tbr/tbr.c: New file. + * tbr/tbr.h: New file. + * configure.ac: Add tbr subdir. + * Makefile.am: Add tbr subdir. + 2002-03-27 Ralf Corsepius * configure.ac: diff --git a/c/src/lib/libcpu/sparc/Makefile.am b/c/src/lib/libcpu/sparc/Makefile.am index 45634059f8..e809aa81c7 100644 --- a/c/src/lib/libcpu/sparc/Makefile.am +++ b/c/src/lib/libcpu/sparc/Makefile.am @@ -4,7 +4,7 @@ ACLOCAL_AMFLAGS = -I ../../../../../aclocal -SUBDIRS = include cache reg_win syscall +SUBDIRS = include cache reg_win syscall tbr include $(top_srcdir)/../../../../../automake/subdirs.am include $(top_srcdir)/../../../../../automake/local.am diff --git a/c/src/lib/libcpu/sparc/configure.ac b/c/src/lib/libcpu/sparc/configure.ac index bd11ae12aa..59a526c8e5 100644 --- a/c/src/lib/libcpu/sparc/configure.ac +++ b/c/src/lib/libcpu/sparc/configure.ac @@ -35,6 +35,7 @@ AC_CONFIG_FILES([Makefile cache/Makefile include/Makefile reg_win/Makefile -syscall/Makefile]) +syscall/Makefile +tbr/Makefile]) AC_OUTPUT diff --git a/c/src/lib/libcpu/sparc/tbr/.cvsignore b/c/src/lib/libcpu/sparc/tbr/.cvsignore new file mode 100644 index 0000000000..282522db03 --- /dev/null +++ b/c/src/lib/libcpu/sparc/tbr/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/c/src/lib/libcpu/sparc/tbr/Makefile.am b/c/src/lib/libcpu/sparc/tbr/Makefile.am new file mode 100644 index 0000000000..6f748985e4 --- /dev/null +++ b/c/src/lib/libcpu/sparc/tbr/Makefile.am @@ -0,0 +1,31 @@ +## +## $Id$ +## + +C_FILES = tbr.c +C_O_FILES = $(C_FILES:%.c=$(ARCH)/%.o) + +include_libcpudir = $(includedir)/libcpu + +include_libcpu_HEADERS = tbr.h + +OBJS = $(C_O_FILES) + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../../../../../automake/compile.am +include $(top_srcdir)/../../../../../automake/lib.am + +$(PROJECT_INCLUDE)/libcpu: + $(mkinstalldirs) $@ + +$(PROJECT_INCLUDE)/libcpu/%.h: %.h + $(INSTALL_DATA) $< $@ + +PREINSTALL_FILES = $(PROJECT_INCLUDE)/libcpu \ + $(include_libcpu_HEADERS:%=$(PROJECT_INCLUDE)/libcpu/%) + +all-local: $(ARCH) $(PREINSTALL_FILES) $(OBJS) + +EXTRA_DIST = tbr.c + +include $(top_srcdir)/../../../../../automake/local.am diff --git a/c/src/lib/libcpu/sparc/tbr/tbr.c b/c/src/lib/libcpu/sparc/tbr/tbr.c new file mode 100644 index 0000000000..7106c58db2 --- /dev/null +++ b/c/src/lib/libcpu/sparc/tbr/tbr.c @@ -0,0 +1,50 @@ +/* + * SPARC Dependent Source + * + * COPYRIGHT (c) 1989-1999. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include + +void +sparc_init_tbr () +{ +#ifndef NO_TABLE_MOVE + unsigned32 trap_table_start; + unsigned32 tbr_value; + CPU_Trap_table_entry *old_tbr; + CPU_Trap_table_entry *trap_table; + + /* + * Install the executive's trap table. All entries from the original + * trap table are copied into the executive's trap table. This is essential + * since this preserves critical trap handlers such as the window underflow + * and overflow handlers. It is the responsibility of the BSP to provide + * install these in the initial trap table. + */ + + + trap_table_start = (unsigned32) & _CPU_Trap_Table_area; + if (trap_table_start & (SPARC_TRAP_TABLE_ALIGNMENT - 1)) + trap_table_start = (trap_table_start + SPARC_TRAP_TABLE_ALIGNMENT) & + ~(SPARC_TRAP_TABLE_ALIGNMENT - 1); + + trap_table = (CPU_Trap_table_entry *) trap_table_start; + + sparc_get_tbr (tbr_value); + + old_tbr = (CPU_Trap_table_entry *) (tbr_value & 0xfffff000); + + memcpy (trap_table, (void *) old_tbr, 256 * sizeof (CPU_Trap_table_entry)); + + sparc_set_tbr (trap_table_start); + +#endif +} diff --git a/c/src/lib/libcpu/sparc/tbr/tbr.h b/c/src/lib/libcpu/sparc/tbr/tbr.h new file mode 100644 index 0000000000..45ffed28bd --- /dev/null +++ b/c/src/lib/libcpu/sparc/tbr/tbr.h @@ -0,0 +1,40 @@ +/* + * SPARC Dependent Source + * + * COPYRIGHT (c) 1989-1999. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +/* + * This is the executive's trap table which is installed into the TBR + * register. + * + * NOTE: Unfortunately, this must be aligned on a 4096 byte boundary. + * The GNU tools as of binutils 2.5.2 and gcc 2.7.0 would not + * align an entity to anything greater than a 512 byte boundary. + * + * Because of this, we pull a little bit of a trick. We allocate + * enough memory so we can grab an address on a 4096 byte boundary + * from this area. + */ + +#ifndef _libcpu_tbr_h +#define _libcpu_tbr_h + +#include + +#ifndef NO_TABLE_MOVE + +#define SPARC_TRAP_TABLE_ALIGNMENT 4096 + +SCORE_EXTERN unsigned8 _CPU_Trap_Table_area[8192] + __attribute__ ((aligned (SPARC_TRAP_TABLE_ALIGNMENT))); +#endif + +#endif -- cgit v1.2.3