summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2002-03-29 14:22:13 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2002-03-29 14:22:13 +0000
commit82e1e997cac695532f8382cee94d770cc7fb59ec (patch)
tree416ab51694049ef2811ad132354f4e7db139f83c /c
parent8c1756e40af556eeccd2c6a04c9c44484b93b528 (diff)
downloadrtems-82e1e997cac695532f8382cee94d770cc7fb59ec.tar.bz2
2002-03-28 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* 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.
Diffstat (limited to 'c')
-rw-r--r--c/src/lib/libcpu/sparc/ChangeLog9
-rw-r--r--c/src/lib/libcpu/sparc/Makefile.am2
-rw-r--r--c/src/lib/libcpu/sparc/configure.ac3
-rw-r--r--c/src/lib/libcpu/sparc/tbr/.cvsignore2
-rw-r--r--c/src/lib/libcpu/sparc/tbr/Makefile.am31
-rw-r--r--c/src/lib/libcpu/sparc/tbr/tbr.c50
-rw-r--r--c/src/lib/libcpu/sparc/tbr/tbr.h40
7 files changed, 135 insertions, 2 deletions
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 <corsepiu@faw.uni-ulm.de>
+
+ * 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 <corsepiu@faw.uni-ulm.de>
* 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 <libcpu/tbr.h>
+
+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 <bsp.h>
+
+#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