summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/v850
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@oarcorp.com>2012-06-11 13:37:29 -0500
committerJoel Sherrill <joel.sherrill@oarcorp.com>2012-06-11 13:37:29 -0500
commit2d7ae960bbdbc82f795814ee6c600e93200ddf4d (patch)
treead12bf1ac7f551a70f004a897a7246cf0b9ea716 /c/src/lib/libbsp/v850
parentpowerpc/cpu.h: Define CPU_SIMPLE_VECTORED_INTERRUPTS and remove _CPU_ISR_Init... (diff)
downloadrtems-2d7ae960bbdbc82f795814ee6c600e93200ddf4d.tar.bz2
v850 port: Initial addition with BSP for simulator in GDB
Port + v850 does not have appear to have any optimized bit scan instructions + v850 does have single instructions for wap u16 and u32 + Code path optimization preferences set + Add BSP variants for each GCC CPU model flag and a README - v850e1 variant does not work (fails during BSP initialization) BSP for GDB v850 Simulator + linkcmds matches defaults in GDB simulator with RTEMS mods + crt1.c added from v850 newlib port for __main() + BSP exits cleanly + printk and console I/O work + uses clock tick from IDLE task + Tests not requiring real clock ISR work Documentation + CPU Supplment chapter for v850 added
Diffstat (limited to 'c/src/lib/libbsp/v850')
-rw-r--r--c/src/lib/libbsp/v850/Makefile.am15
-rw-r--r--c/src/lib/libbsp/v850/acinclude.m410
-rw-r--r--c/src/lib/libbsp/v850/configure.ac20
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/Makefile.am53
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/README7
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/bsp_specs15
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/configure.ac20
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/console/console-io.c61
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/include/bsp.h37
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/include/bspopts.h.in31
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/include/syscall.h47
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850e1sim.cfg7
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850e2sim.cfg7
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850e2v3sim.cfg7
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850esim.cfg7
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850essim.cfg7
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850sim.cfg8
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850sim.inc12
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/preinstall.am71
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/start/start.S78
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/startup/bspreset.c23
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/startup/linkcmds214
-rw-r--r--c/src/lib/libbsp/v850/gdbv850sim/startup/trap.S14
-rw-r--r--c/src/lib/libbsp/v850/preinstall.am7
-rw-r--r--c/src/lib/libbsp/v850/shared/crt1.c21
25 files changed, 799 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/v850/Makefile.am b/c/src/lib/libbsp/v850/Makefile.am
new file mode 100644
index 0000000000..d5747beb2f
--- /dev/null
+++ b/c/src/lib/libbsp/v850/Makefile.am
@@ -0,0 +1,15 @@
+##
+##
+
+ACLOCAL_AMFLAGS = -I ../../../aclocal
+
+## Descend into the @RTEMS_BSP_FAMILY@ directory
+## Currently, the shared directory is not explicitly
+## added but it is present in the source tree.
+SUBDIRS = @RTEMS_BSP_FAMILY@
+
+EXTRA_DIST =
+
+include $(srcdir)/preinstall.am
+include $(top_srcdir)/../../../automake/subdirs.am
+include $(top_srcdir)/../../../automake/local.am
diff --git a/c/src/lib/libbsp/v850/acinclude.m4 b/c/src/lib/libbsp/v850/acinclude.m4
new file mode 100644
index 0000000000..f506eced18
--- /dev/null
+++ b/c/src/lib/libbsp/v850/acinclude.m4
@@ -0,0 +1,10 @@
+# RTEMS_CHECK_BSPDIR(RTEMS_BSP_FAMILY)
+AC_DEFUN([RTEMS_CHECK_BSPDIR],
+[
+ case "$1" in
+ gdbv850sim )
+ AC_CONFIG_SUBDIRS([gdbv850sim]);;
+ *)
+ AC_MSG_ERROR([Invalid BSP]);;
+ esac
+])
diff --git a/c/src/lib/libbsp/v850/configure.ac b/c/src/lib/libbsp/v850/configure.ac
new file mode 100644
index 0000000000..58160c0b17
--- /dev/null
+++ b/c/src/lib/libbsp/v850/configure.ac
@@ -0,0 +1,20 @@
+## Process this file with autoconf to produce a configure script.
+##
+
+AC_PREREQ([2.68])
+AC_INIT([rtems-c-src-lib-libbsp-v850],[_RTEMS_VERSION],[http://www.rtems.org/bugzilla])
+AC_CONFIG_SRCDIR([gdbv850sim])
+RTEMS_TOP(../../../../..)
+
+RTEMS_CANONICAL_TARGET_CPU
+AM_INIT_AUTOMAKE([no-define foreign 1.11.1])
+AM_MAINTAINER_MODE
+
+RTEMS_ENV_RTEMSBSP
+RTEMS_PROJECT_ROOT
+
+RTEMS_CHECK_BSPDIR([$RTEMS_BSP_FAMILY])
+
+# Explicitly list all Makefiles here
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/Makefile.am b/c/src/lib/libbsp/v850/gdbv850sim/Makefile.am
new file mode 100644
index 0000000000..e7e4c494ec
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/Makefile.am
@@ -0,0 +1,53 @@
+##
+##
+
+ACLOCAL_AMFLAGS = -I ../../../../aclocal
+
+include $(top_srcdir)/../../../../automake/compile.am
+include $(top_srcdir)/../../bsp.am
+
+include_bspdir = $(includedir)/bsp
+
+dist_project_lib_DATA = bsp_specs
+
+include_HEADERS = include/bsp.h
+include_HEADERS += ../../shared/include/tm27.h
+include_bsp_HEADERS = include/syscall.h
+
+nodist_include_HEADERS = include/bspopts.h
+nodist_include_bsp_HEADERS = ../../shared/include/bootcard.h
+DISTCLEANFILES = include/bspopts.h
+noinst_PROGRAMS =
+
+nodist_include_HEADERS += ../../shared/include/coverhd.h
+
+EXTRA_DIST = start/start.S
+start.$(OBJEXT): start/start.S
+ $(CPPASCOMPILE) -o $@ -c $<
+project_lib_DATA = start.$(OBJEXT)
+
+dist_project_lib_DATA += startup/linkcmds
+
+libbsp_a_SOURCES = ../../shared/bspclean.c
+libbsp_a_SOURCES += ../../shared/bsplibc.c
+libbsp_a_SOURCES += ../../shared/bsppredriverhook.c
+libbsp_a_SOURCES += ../../shared/bsppretaskinghook.c
+libbsp_a_SOURCES += ../../shared/bspgetworkarea.c
+libbsp_a_SOURCES += ../../shared/bsppost.c
+libbsp_a_SOURCES += ../../shared/bspstart.c
+libbsp_a_SOURCES += ../../shared/bootcard.c
+libbsp_a_SOURCES += ../../shared/sbrk.c
+libbsp_a_SOURCES += ../../shared/gnatinstallhandler.c
+libbsp_a_SOURCES += startup/bspreset.c
+libbsp_a_SOURCES += ../../v850/shared/crt1.c
+libbsp_a_SOURCES += startup/trap.S
+
+libbsp_a_SOURCES += ../../shared/clock_driver_simidle.c
+libbsp_a_SOURCES += ../../shared/console-polled.c
+libbsp_a_SOURCES += console/console-io.c
+libbsp_a_SOURCES += ../../shared/timerstub.c
+
+noinst_LIBRARIES = libbsp.a
+
+include $(srcdir)/preinstall.am
+include $(top_srcdir)/../../../../automake/local.am
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/README b/c/src/lib/libbsp/v850/gdbv850sim/README
new file mode 100644
index 0000000000..ab456d286b
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/README
@@ -0,0 +1,7 @@
+This directory contains a family of BSPs for the v850 simulator
+found in the GNU Debugger. A variant is provided for each CPU
+model option flag found in the GCC SVN head as of 30 May 2012.
+
+This simulator is an instruction simulator and does not include
+devices for a clock tick or benchmark timer driver. Traps are used
+to provide console I/O.
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/bsp_specs b/c/src/lib/libbsp/v850/gdbv850sim/bsp_specs
new file mode 100644
index 0000000000..bb7833b2ad
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/bsp_specs
@@ -0,0 +1,15 @@
+%rename endfile old_endfile
+%rename startfile old_startfile
+%rename link old_link
+
+*startfile:
+%{!qrtems: %(old_startfile)} \
+%{!nostdlib: %{qrtems: start.o%s -e _start}}
+
+*endfile:
+%{!qrtems: %(old_endfile)} %{qrtems: %(old_endfile)} \
+%{!nostdlib: %{qrtems:}}
+
+*link:
+%(old_link) %{!qrtems: %(old_link)} %{qrtems: %(old_link)}
+
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/configure.ac b/c/src/lib/libbsp/v850/gdbv850sim/configure.ac
new file mode 100644
index 0000000000..84e66e9653
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/configure.ac
@@ -0,0 +1,20 @@
+## Process this file with autoconf to produce a configure script.
+
+AC_PREREQ([2.68])
+AC_INIT([rtems-c-src-lib-libbsp-v850-gdbv850sim],[_RTEMS_VERSION],[http://www.rtems.org/bugzilla])
+AC_CONFIG_SRCDIR([bsp_specs])
+RTEMS_TOP(../../../../../..)
+
+RTEMS_CANONICAL_TARGET_CPU
+AM_INIT_AUTOMAKE([no-define nostdinc foreign 1.11.1])
+RTEMS_BSP_CONFIGURE
+
+RTEMS_PROG_CC_FOR_TARGET
+RTEMS_CANONICALIZE_TOOLS
+RTEMS_PROG_CCAS
+
+RTEMS_BSP_CLEANUP_OPTIONS(0, 1)
+
+# Explicitly list all Makefiles here
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/console/console-io.c b/c/src/lib/libbsp/v850/gdbv850sim/console/console-io.c
new file mode 100644
index 0000000000..ddaa115764
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/console/console-io.c
@@ -0,0 +1,61 @@
+/*
+ * COPYRIGHT (c) 1989-2012.
+ * 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.rtems.com/license/LICENSE.
+ */
+
+#include <bsp.h>
+#include <rtems/libio.h>
+#include <bsp/syscall.h>
+
+/*
+ * console_initialize_hardware
+ *
+ * This routine initializes the console hardware.
+ */
+void console_initialize_hardware(void)
+{
+}
+
+/*
+ * console_outbyte_polled
+ *
+ * This routine transmits a character using polling.
+ */
+void console_outbyte_polled(
+ int port,
+ char ch
+)
+{
+ TRAP0(SYS_write, 1, &ch, 1);
+}
+
+/*
+ * console_inbyte_nonblocking
+ *
+ * This routine polls for a character.
+ */
+
+int console_inbyte_nonblocking(
+ int port
+)
+{
+ char ch;
+ int rc;
+
+ rc = TRAP0 (SYS_read, 0, &ch, 1);
+
+ if ( rc != 1 )
+ return -1;
+ return ch;
+}
+
+#include <rtems/bspIo.h>
+
+void console_output_char(char c) { console_outbyte_polled( 0, c ); }
+
+BSP_output_char_function_type BSP_output_char = console_output_char;
+BSP_polling_getchar_function_type BSP_poll_char = NULL;
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/include/bsp.h b/c/src/lib/libbsp/v850/gdbv850sim/include/bsp.h
new file mode 100644
index 0000000000..807203f40a
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/include/bsp.h
@@ -0,0 +1,37 @@
+/*
+ * This include file contains some definitions specific to the
+ * GDB simulator in gdb.
+ */
+
+/*
+ * COPYRIGHT (c) 1989-2012.
+ * 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.rtems.com/license/LICENSE.
+ */
+
+#ifndef _BSP_H
+#define _BSP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <bspopts.h>
+
+#include <rtems.h>
+#include <rtems/iosupp.h>
+#include <rtems/console.h>
+#include <rtems/clockdrv.h>
+
+/* support for simulated clock tick */
+Thread clock_driver_sim_idle_body(uintptr_t);
+#define BSP_IDLE_TASK_BODY clock_driver_sim_idle_body
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/include/bspopts.h.in b/c/src/lib/libbsp/v850/gdbv850sim/include/bspopts.h.in
new file mode 100644
index 0000000000..40e048c697
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/include/bspopts.h.in
@@ -0,0 +1,31 @@
+/* include/bspopts.h.in. Generated from configure.ac by autoheader. */
+
+/* If defined, then the BSP Framework will put a non-zero pattern into the
+ RTEMS Workspace and C program heap. This should assist in finding code that
+ assumes memory starts set to zero. */
+#undef BSP_DIRTY_MEMORY
+
+/* If defined, print a message and wait until pressed before resetting board
+ when application exits. */
+#undef BSP_PRESS_KEY_FOR_RESET
+
+/* If defined, reset the board when the application exits. */
+#undef BSP_RESET_BOARD_AT_EXIT
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/include/syscall.h b/c/src/lib/libbsp/v850/gdbv850sim/include/syscall.h
new file mode 100644
index 0000000000..d8eebdd3f9
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/include/syscall.h
@@ -0,0 +1,47 @@
+/* from libgloss/v850 */
+#ifndef _SYS_SYSCALL_H_
+#define _SYS_SYSCALL_H_
+
+#ifndef ASM
+extern int __trap0 (int function, int p1, int p2, int p3);
+
+#define TRAP0(f, p1, p2, p3) __trap0(f, (int)(p1), (int)(p2), (int)(p3))
+#endif
+
+#define SYS_exit 1
+#define SYS_fork 2
+
+#define SYS_read 3
+#define SYS_write 4
+#define SYS_open 5
+#define SYS_close 6
+#define SYS_wait4 7
+#define SYS_creat 8
+#define SYS_link 9
+#define SYS_unlink 10
+#define SYS_execv 11
+#define SYS_chdir 12
+#define SYS_mknod 14
+#define SYS_chmod 15
+#define SYS_chown 16
+#define SYS_lseek 19
+#define SYS_getpid 20
+#define SYS_isatty 21
+#define SYS_fstat 22
+#define SYS_time 23
+
+
+#define SYS_ARG 24
+#define SYS_stat 38
+
+
+#define SYS_pipe 42
+#define SYS_execve 59
+#define SYS_times 43
+#define SYS_gettimeofday 116
+#define SYS_rename 134
+
+#define SYS_utime 201 /* not really a system call */
+#define SYS_wait 202 /* nor is this */
+
+#endif
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850e1sim.cfg b/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850e1sim.cfg
new file mode 100644
index 0000000000..7aefdcf31c
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850e1sim.cfg
@@ -0,0 +1,7 @@
+#
+# Base Config file for the v850 GDB Simulator as v850e1
+#
+
+CPU_CFLAGS = -mv850e1
+
+include $(RTEMS_ROOT)/make/custom/v850sim.inc
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850e2sim.cfg b/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850e2sim.cfg
new file mode 100644
index 0000000000..0313ab82cd
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850e2sim.cfg
@@ -0,0 +1,7 @@
+#
+# Base Config file for the v850 GDB Simulator as v850e2
+#
+
+CPU_CFLAGS = -mv850e2
+
+include $(RTEMS_ROOT)/make/custom/v850sim.inc
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850e2v3sim.cfg b/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850e2v3sim.cfg
new file mode 100644
index 0000000000..ac2740ed52
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850e2v3sim.cfg
@@ -0,0 +1,7 @@
+#
+# Base Config file for the v850 GDB Simulator as v850e2v3
+#
+
+CPU_CFLAGS = -mv850e2v3
+
+include $(RTEMS_ROOT)/make/custom/v850sim.inc
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850esim.cfg b/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850esim.cfg
new file mode 100644
index 0000000000..0c0a4a9bed
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850esim.cfg
@@ -0,0 +1,7 @@
+#
+# Base Config file for the v850 GDB Simulator as v850e
+#
+
+CPU_CFLAGS = -mv850e
+
+include $(RTEMS_ROOT)/make/custom/v850sim.inc
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850essim.cfg b/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850essim.cfg
new file mode 100644
index 0000000000..77594591ec
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850essim.cfg
@@ -0,0 +1,7 @@
+#
+# Base Config file for the v850 GDB Simulator as v850es
+#
+
+CPU_CFLAGS = -mv850es
+
+include $(RTEMS_ROOT)/make/custom/v850sim.inc
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850sim.cfg b/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850sim.cfg
new file mode 100644
index 0000000000..9dcc918423
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850sim.cfg
@@ -0,0 +1,8 @@
+#
+# Base Config file for the v850 GDB Simulator as v850
+#
+
+# This is the same as not specifying a CPU model flag.
+CPU_CFLAGS = -mv850
+
+include $(RTEMS_ROOT)/make/custom/v850sim.inc
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850sim.inc b/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850sim.inc
new file mode 100644
index 0000000000..50de3fa9f7
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850sim.inc
@@ -0,0 +1,12 @@
+#
+# Shared config file for the v850 GDB Simulator
+#
+# CPU_CFLAGS is set by each specific variant.
+
+include $(RTEMS_ROOT)/make/custom/default.cfg
+
+RTEMS_CPU=v850
+RTEMS_CPU_MODEL=v850
+
+# optimize flag: typically -O2
+CFLAGS_OPTIMIZE_V = -O2 -g
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/preinstall.am b/c/src/lib/libbsp/v850/gdbv850sim/preinstall.am
new file mode 100644
index 0000000000..1fc9abe47e
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/preinstall.am
@@ -0,0 +1,71 @@
+## Automatically generated by ampolish3 - Do not edit
+
+if AMPOLISH3
+$(srcdir)/preinstall.am: Makefile.am
+ $(AMPOLISH3) $(srcdir)/Makefile.am > $(srcdir)/preinstall.am
+endif
+
+PREINSTALL_DIRS =
+DISTCLEANFILES += $(PREINSTALL_DIRS)
+
+all-local: $(TMPINSTALL_FILES)
+
+TMPINSTALL_FILES =
+CLEANFILES = $(TMPINSTALL_FILES)
+
+all-am: $(PREINSTALL_FILES)
+
+PREINSTALL_FILES =
+CLEANFILES += $(PREINSTALL_FILES)
+
+$(PROJECT_LIB)/$(dirstamp):
+ @$(MKDIR_P) $(PROJECT_LIB)
+ @: > $(PROJECT_LIB)/$(dirstamp)
+PREINSTALL_DIRS += $(PROJECT_LIB)/$(dirstamp)
+
+$(PROJECT_INCLUDE)/$(dirstamp):
+ @$(MKDIR_P) $(PROJECT_INCLUDE)
+ @: > $(PROJECT_INCLUDE)/$(dirstamp)
+PREINSTALL_DIRS += $(PROJECT_INCLUDE)/$(dirstamp)
+
+$(PROJECT_INCLUDE)/bsp/$(dirstamp):
+ @$(MKDIR_P) $(PROJECT_INCLUDE)/bsp
+ @: > $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+PREINSTALL_DIRS += $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+
+$(PROJECT_LIB)/bsp_specs: bsp_specs $(PROJECT_LIB)/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_LIB)/bsp_specs
+PREINSTALL_FILES += $(PROJECT_LIB)/bsp_specs
+
+$(PROJECT_INCLUDE)/bsp.h: include/bsp.h $(PROJECT_INCLUDE)/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp.h
+
+$(PROJECT_INCLUDE)/tm27.h: ../../shared/include/tm27.h $(PROJECT_INCLUDE)/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/tm27.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/tm27.h
+
+$(PROJECT_INCLUDE)/bsp/syscall.h: include/syscall.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/syscall.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/syscall.h
+
+$(PROJECT_INCLUDE)/bspopts.h: include/bspopts.h $(PROJECT_INCLUDE)/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bspopts.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bspopts.h
+
+$(PROJECT_INCLUDE)/bsp/bootcard.h: ../../shared/include/bootcard.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/bootcard.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/bootcard.h
+
+$(PROJECT_INCLUDE)/coverhd.h: ../../shared/include/coverhd.h $(PROJECT_INCLUDE)/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/coverhd.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/coverhd.h
+
+$(PROJECT_LIB)/start.$(OBJEXT): start.$(OBJEXT) $(PROJECT_LIB)/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_LIB)/start.$(OBJEXT)
+TMPINSTALL_FILES += $(PROJECT_LIB)/start.$(OBJEXT)
+
+$(PROJECT_LIB)/linkcmds: startup/linkcmds $(PROJECT_LIB)/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds
+PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds
+
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/start/start.S b/c/src/lib/libbsp/v850/gdbv850sim/start/start.S
new file mode 100644
index 0000000000..419e635393
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/start/start.S
@@ -0,0 +1,78 @@
+# NEC V850 startup code
+
+ .section .text
+ .global _start
+
+_start:
+
+#if defined(__v850e__) || defined(__v850e2__) || defined(__v850e2v3__)
+
+ movea 255, r0, r20
+ mov 65535, r21
+ mov hilo(_stack), sp
+ mov hilo(__ep), ep
+ mov hilo(__gp), gp
+ mov hilo(__ctbp), r6
+ ldsr r6, ctbp
+ mov hilo(_edata), r6
+ mov hilo(_end), r7
+.L0:
+ st.w r0, 0[r6]
+ addi 4, r6, r6
+ cmp r7, r6
+ bl .L0
+.L1:
+ jarl ___main, r31
+ addi -16, sp, sp
+ mov 0, r6
+ mov 0, r7
+ mov 0, r8
+ /* jarl _main, r31 */
+ jarl _boot_card, r31
+ mov r10, r6
+ jarl _exit, r31
+
+# else
+ movea 255, r0, r20
+ mov r0, r21
+ ori 65535, r0, r21
+ movhi hi(_stack), r0, sp
+ movea lo(_stack), sp, sp
+ movhi hi(__ep), r0, ep
+ movea lo(__ep), ep, ep
+ movhi hi(__gp), r0, gp
+ movea lo(__gp), gp, gp
+
+ movhi hi(_edata), r0, r6
+ movea lo(_edata), r6, r6
+ movhi hi(_end), r0, r7
+ movea lo(_end), r7, r7
+.L0:
+ st.b r0, 0[r6]
+ addi 1, r6, r6
+ cmp r7, r6
+ bl .L0
+.L1:
+ /* jarl ___main, r31 */
+ addi -16, sp, sp
+ mov 0, r6
+ mov 0, r7
+ mov 0, r8
+ /* jarl _main, r31 */
+ jarl _boot_card, r31
+ mov r10, r6
+.L2:
+ br .L2
+ /* jarl _exit, r31 */
+# endif
+
+#if 0
+ .section .stack
+_stack: .long 1
+#endif
+
+ .section .data
+ .global ___dso_handle
+ .weak ___dso_handle
+___dso_handle:
+ .long 0
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/startup/bspreset.c b/c/src/lib/libbsp/v850/gdbv850sim/startup/bspreset.c
new file mode 100644
index 0000000000..a57512ca54
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/startup/bspreset.c
@@ -0,0 +1,23 @@
+/**
+ * @file
+ *
+ * This routine exits the simulator.
+ */
+
+/*
+ * COPYRIGHT (c) 1989-2012.
+ * 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.rtems.com/license/LICENSE.
+ */
+
+#include <rtems.h>
+#include <bsp/bootcard.h>
+#include <bsp/syscall.h>
+
+void bsp_reset( void )
+{
+ TRAP0 (SYS_exit, 0, 0, 0);
+}
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/startup/linkcmds b/c/src/lib/libbsp/v850/gdbv850sim/startup/linkcmds
new file mode 100644
index 0000000000..cf30f3b317
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/startup/linkcmds
@@ -0,0 +1,214 @@
+/*
+ * Declare some sizes.
+ */
+_RamBase = DEFINED(_RamBase) ? _RamBase : 0x100000; /* RAM starts at 1MB */
+_RamSize = DEFINED(_RamSize) ? _RamSize : 0x100000; /* default is 1MB */
+_HeapSize = DEFINED(_HeapSize) ? _HeapSize : 0x0;
+_StackSize = DEFINED(_StackSize) ? _StackSize : 0x1000;
+
+/* Default linker script, for normal executables */
+OUTPUT_FORMAT("elf32-v850", "elf32-v850",
+ "elf32-v850")
+OUTPUT_ARCH(v850)
+ENTRY(_start)
+/* GROUP(-lc -lsim -lgcc) */
+SEARCH_DIR(.);
+EXTERN(__ctbp __ep __gp);
+SECTIONS
+{
+ /* This saves a little space in the ELF file, since the zda starts
+ at a higher location that the ELF headers take up. */
+ .zdata 0x160 :
+ {
+ *(.zdata)
+ *(.zbss)
+ *(reszdata)
+ *(.zcommon)
+ }
+ /* This is the read only part of the zero data area.
+ Having it as a seperate section prevents its
+ attributes from being inherited by the zdata
+ section. Specifically it prevents the zdata
+ section from being marked READONLY. */
+ .rozdata ALIGN (4) :
+ {
+ *(.rozdata)
+ *(romzdata)
+ *(romzbss)
+ }
+ /* Read-only sections, merged into text segment. */
+ . = 0x100000;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .rel.text : { *(.rel.text) }
+ .rela.text : { *(.rela.text) }
+ .rel.data : { *(.rel.data) }
+ .rela.data : { *(.rela.data) }
+ .rel.rodata : { *(.rel.rodata) }
+ .rela.rodata : { *(.rela.rodata) }
+ .rel.gcc_except_table : { *(.rel.gcc_except_table) }
+ .rela.gcc_except_table : { *(.rela.gcc_except_table) }
+ .rel.got : { *(.rel.got) }
+ .rela.got : { *(.rela.got) }
+ .rel.ctors : { *(.rel.ctors) }
+ .rela.ctors : { *(.rela.ctors) }
+ .rel.dtors : { *(.rel.dtors) }
+ .rela.dtors : { *(.rela.dtors) }
+ .rel.init : { *(.rel.init) }
+ .rela.init : { *(.rela.init) }
+ .rel.fini : { *(.rel.fini) }
+ .rela.fini : { *(.rela.fini) }
+ .rel.bss : { *(.rel.bss) }
+ .rela.bss : { *(.rela.bss) }
+ .rel.plt : { *(.rel.plt) }
+ .rela.plt : { *(.rela.plt) }
+ .init : { KEEP (*(.init)) } =0
+ .plt : { *(.plt) }
+ .text :
+ {
+ *(.text)
+ *(.text.*)
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ *(.gnu.linkonce.t*)
+ } =0
+ _etext = .;
+ PROVIDE (etext = .);
+ /* This is special code area at the end of the normal text section.
+ It contains a small lookup table at the start followed by the
+ code pointed to by entries in the lookup table. */
+ .call_table_data ALIGN (4) :
+ {
+ PROVIDE(__ctbp = .);
+ *(.call_table_data)
+ } = 0xff /* Fill gaps with 0xff. */
+ .call_table_text :
+ {
+ *(.call_table_text)
+ }
+ .fini : { KEEP (*(.fini)) } =0
+ .rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*) }
+ .rodata1 : { *(.rodata1) }
+ .data :
+ {
+ *(.data)
+ *(.data.*)
+ *(.gnu.linkonce.d*)
+ CONSTRUCTORS
+ }
+ .data1 : { *(.data1) }
+ .ctors :
+ {
+ ___ctors = .;
+ KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*crtend(.ctors))
+ ___ctors_end = .;
+ }
+ .dtors :
+ {
+ ___dtors = .;
+ KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*crtend.o(.dtors))
+ ___dtors_end = .;
+ }
+ .jcr :
+ {
+ KEEP (*(.jcr))
+ }
+ .gcc_except_table : { *(.gcc_except_table) }
+ .got : { *(.got.plt) *(.got) }
+ .dynamic : { *(.dynamic) }
+ .tdata ALIGN (4) :
+ {
+ PROVIDE (__ep = .);
+ *(.tbyte)
+ *(.tcommon_byte)
+ *(.tdata)
+ *(.tbss)
+ *(.tcommon)
+ }
+ /* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata ALIGN (4) :
+ {
+ PROVIDE (__gp = . + 0x8000);
+ *(.sdata)
+ }
+ /* See comment about .rozdata. */
+ .rosdata ALIGN (4) :
+ {
+ *(.rosdata)
+ }
+ /* We place the .sbss data section AFTER the .rosdata section, so that
+ it can directly preceed the .bss section. This allows runtime startup
+ code to initialise all the zero-data sections by simply taking the
+ value of '_edata' and zeroing until it reaches '_end'. */
+ .sbss :
+ {
+ __sbss_start = .;
+ *(.sbss)
+ *(.scommon)
+ }
+ _edata = DEFINED (__sbss_start) ? __sbss_start : . ;
+ PROVIDE (edata = _edata);
+ .bss :
+ {
+ __bss_start = DEFINED (__sbss_start) ? __sbss_start : . ;
+ __real_bss_start = . ;
+ *(.dynbss)
+ *(.bss)
+ *(COMMON)
+ }
+ . += _StackSize;
+ _stack = .;
+ _WorkAreaBase = .;
+ _end = . ;
+ PROVIDE (end = .);
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+ /* SGI/MIPS DWARF 2 extensions. */
+ .debug_weaknames 0 : { *(.debug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
+ /* libgloss - User stack. */
+/*
+ .stack 0x200000 :
+ {
+ __stack = .;
+ *(.stack)
+ }
+*/
+}
+
diff --git a/c/src/lib/libbsp/v850/gdbv850sim/startup/trap.S b/c/src/lib/libbsp/v850/gdbv850sim/startup/trap.S
new file mode 100644
index 0000000000..b6003b216d
--- /dev/null
+++ b/c/src/lib/libbsp/v850/gdbv850sim/startup/trap.S
@@ -0,0 +1,14 @@
+/* from libgloss/v850 */
+ .text
+ .global ___trap0
+___trap0:
+ trap 31
+ tst r10,r10
+ bz .L0
+/*
+ * Libgloss cares about the errno from this. We don't
+ movhi hi(_errno),r0,r6
+ st.w r10,lo(_errno)[r6]
+*/
+.L0:
+ jmp [r31]
diff --git a/c/src/lib/libbsp/v850/preinstall.am b/c/src/lib/libbsp/v850/preinstall.am
new file mode 100644
index 0000000000..dba6cc4d81
--- /dev/null
+++ b/c/src/lib/libbsp/v850/preinstall.am
@@ -0,0 +1,7 @@
+## Automatically generated by ampolish3 - Do not edit
+
+if AMPOLISH3
+$(srcdir)/preinstall.am: Makefile.am
+ $(AMPOLISH3) $(srcdir)/Makefile.am > $(srcdir)/preinstall.am
+endif
+
diff --git a/c/src/lib/libbsp/v850/shared/crt1.c b/c/src/lib/libbsp/v850/shared/crt1.c
new file mode 100644
index 0000000000..18c240b6ed
--- /dev/null
+++ b/c/src/lib/libbsp/v850/shared/crt1.c
@@ -0,0 +1,21 @@
+/*
+ * From newlib ==> libc/sys/sysnecv850/crt1.c
+ *
+ * Obtained newlib 29 May 2012
+ */
+void __main ()
+{
+ static int initialized;
+ if (! initialized)
+ {
+ typedef void (*pfunc) ();
+ extern pfunc __ctors[];
+ extern pfunc __ctors_end[];
+ pfunc *p;
+
+ initialized = 1;
+ for (p = __ctors_end; p > __ctors; )
+ (*--p) ();
+
+ }
+}