forked from Imagelibrary/rtems
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
This commit is contained in:
@@ -26,6 +26,7 @@ _RTEMS_CPU_SUBDIR([powerpc],[$1]);;
|
||||
_RTEMS_CPU_SUBDIR([sh],[$1]);;
|
||||
_RTEMS_CPU_SUBDIR([sparc],[$1]);;
|
||||
_RTEMS_CPU_SUBDIR([sparc64],[$1]);;
|
||||
_RTEMS_CPU_SUBDIR([v850],[$1]);;
|
||||
*) AC_MSG_ERROR([Invalid RTEMS_CPU <[$]{RTEMS_CPU}>])
|
||||
esac
|
||||
])
|
||||
|
||||
15
c/src/lib/libbsp/v850/Makefile.am
Normal file
15
c/src/lib/libbsp/v850/Makefile.am
Normal file
@@ -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
|
||||
10
c/src/lib/libbsp/v850/acinclude.m4
Normal file
10
c/src/lib/libbsp/v850/acinclude.m4
Normal file
@@ -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
|
||||
])
|
||||
20
c/src/lib/libbsp/v850/configure.ac
Normal file
20
c/src/lib/libbsp/v850/configure.ac
Normal file
@@ -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
|
||||
53
c/src/lib/libbsp/v850/gdbv850sim/Makefile.am
Normal file
53
c/src/lib/libbsp/v850/gdbv850sim/Makefile.am
Normal file
@@ -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
|
||||
7
c/src/lib/libbsp/v850/gdbv850sim/README
Normal file
7
c/src/lib/libbsp/v850/gdbv850sim/README
Normal file
@@ -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.
|
||||
15
c/src/lib/libbsp/v850/gdbv850sim/bsp_specs
Normal file
15
c/src/lib/libbsp/v850/gdbv850sim/bsp_specs
Normal file
@@ -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)}
|
||||
|
||||
20
c/src/lib/libbsp/v850/gdbv850sim/configure.ac
Normal file
20
c/src/lib/libbsp/v850/gdbv850sim/configure.ac
Normal file
@@ -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
|
||||
61
c/src/lib/libbsp/v850/gdbv850sim/console/console-io.c
Normal file
61
c/src/lib/libbsp/v850/gdbv850sim/console/console-io.c
Normal file
@@ -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;
|
||||
37
c/src/lib/libbsp/v850/gdbv850sim/include/bsp.h
Normal file
37
c/src/lib/libbsp/v850/gdbv850sim/include/bsp.h
Normal file
@@ -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
|
||||
31
c/src/lib/libbsp/v850/gdbv850sim/include/bspopts.h.in
Normal file
31
c/src/lib/libbsp/v850/gdbv850sim/include/bspopts.h.in
Normal file
@@ -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
|
||||
47
c/src/lib/libbsp/v850/gdbv850sim/include/syscall.h
Normal file
47
c/src/lib/libbsp/v850/gdbv850sim/include/syscall.h
Normal file
@@ -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
|
||||
@@ -0,0 +1,7 @@
|
||||
#
|
||||
# Base Config file for the v850 GDB Simulator as v850e1
|
||||
#
|
||||
|
||||
CPU_CFLAGS = -mv850e1
|
||||
|
||||
include $(RTEMS_ROOT)/make/custom/v850sim.inc
|
||||
@@ -0,0 +1,7 @@
|
||||
#
|
||||
# Base Config file for the v850 GDB Simulator as v850e2
|
||||
#
|
||||
|
||||
CPU_CFLAGS = -mv850e2
|
||||
|
||||
include $(RTEMS_ROOT)/make/custom/v850sim.inc
|
||||
@@ -0,0 +1,7 @@
|
||||
#
|
||||
# Base Config file for the v850 GDB Simulator as v850e2v3
|
||||
#
|
||||
|
||||
CPU_CFLAGS = -mv850e2v3
|
||||
|
||||
include $(RTEMS_ROOT)/make/custom/v850sim.inc
|
||||
@@ -0,0 +1,7 @@
|
||||
#
|
||||
# Base Config file for the v850 GDB Simulator as v850e
|
||||
#
|
||||
|
||||
CPU_CFLAGS = -mv850e
|
||||
|
||||
include $(RTEMS_ROOT)/make/custom/v850sim.inc
|
||||
@@ -0,0 +1,7 @@
|
||||
#
|
||||
# Base Config file for the v850 GDB Simulator as v850es
|
||||
#
|
||||
|
||||
CPU_CFLAGS = -mv850es
|
||||
|
||||
include $(RTEMS_ROOT)/make/custom/v850sim.inc
|
||||
8
c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850sim.cfg
Normal file
8
c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850sim.cfg
Normal file
@@ -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
|
||||
12
c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850sim.inc
Normal file
12
c/src/lib/libbsp/v850/gdbv850sim/make/custom/v850sim.inc
Normal file
@@ -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
|
||||
71
c/src/lib/libbsp/v850/gdbv850sim/preinstall.am
Normal file
71
c/src/lib/libbsp/v850/gdbv850sim/preinstall.am
Normal file
@@ -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
|
||||
|
||||
78
c/src/lib/libbsp/v850/gdbv850sim/start/start.S
Normal file
78
c/src/lib/libbsp/v850/gdbv850sim/start/start.S
Normal file
@@ -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
|
||||
23
c/src/lib/libbsp/v850/gdbv850sim/startup/bspreset.c
Normal file
23
c/src/lib/libbsp/v850/gdbv850sim/startup/bspreset.c
Normal file
@@ -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);
|
||||
}
|
||||
214
c/src/lib/libbsp/v850/gdbv850sim/startup/linkcmds
Normal file
214
c/src/lib/libbsp/v850/gdbv850sim/startup/linkcmds
Normal file
@@ -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)
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
14
c/src/lib/libbsp/v850/gdbv850sim/startup/trap.S
Normal file
14
c/src/lib/libbsp/v850/gdbv850sim/startup/trap.S
Normal file
@@ -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]
|
||||
7
c/src/lib/libbsp/v850/preinstall.am
Normal file
7
c/src/lib/libbsp/v850/preinstall.am
Normal file
@@ -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
|
||||
|
||||
21
c/src/lib/libbsp/v850/shared/crt1.c
Normal file
21
c/src/lib/libbsp/v850/shared/crt1.c
Normal file
@@ -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) ();
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user