diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2000-06-12 16:34:46 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2000-06-12 16:34:46 +0000 |
commit | 68c498f47761a00aee669aeb52a8e473c4d802ba (patch) | |
tree | 79d2517b87d95d739067c9b3764cc6f02496c649 /c/src/lib/libbsp/i960/i960sim/start | |
parent | Merge lossage. Apparently the DOS/UNIX CRLF issue got lost. (diff) | |
download | rtems-68c498f47761a00aee669aeb52a8e473c4d802ba.tar.bz2 |
Added i960sim BSP which (ignoring the 3 instructions not supported
by gdb 5.0's i960 simulator) is enough to run hello world.
Diffstat (limited to 'c/src/lib/libbsp/i960/i960sim/start')
-rw-r--r-- | c/src/lib/libbsp/i960/i960sim/start/.cvsignore | 2 | ||||
-rw-r--r-- | c/src/lib/libbsp/i960/i960sim/start/Makefile.am | 32 | ||||
-rw-r--r-- | c/src/lib/libbsp/i960/i960sim/start/start.c | 39 |
3 files changed, 73 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/i960/i960sim/start/.cvsignore b/c/src/lib/libbsp/i960/i960sim/start/.cvsignore new file mode 100644 index 0000000000..282522db03 --- /dev/null +++ b/c/src/lib/libbsp/i960/i960sim/start/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/c/src/lib/libbsp/i960/i960sim/start/Makefile.am b/c/src/lib/libbsp/i960/i960sim/start/Makefile.am new file mode 100644 index 0000000000..c143631d84 --- /dev/null +++ b/c/src/lib/libbsp/i960/i960sim/start/Makefile.am @@ -0,0 +1,32 @@ +## +## $Id$ +## + +AUTOMAKE_OPTIONS = foreign 1.4 + +PGM = $(ARCH)/start.o + +C_FILES = start.c +C_O_FILES = $(C_FILES:%.c=$(ARCH)/%.o) + +OBJS = $(C_O_FILES) + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../../../../../../automake/lib.am + +# +# (OPTIONAL) Add local stuff here using += +# + +$(PROJECT_RELEASE)/lib/start$(LIB_VARIANT).o: $(PGM) + $(INSTALL_DATA) $< $@ + +TMPINSTALL_FILES += $(PROJECT_RELEASE)/lib/start$(LIB_VARIANT).o + +all-local: $(ARCH) $(OBJS) $(PGM) $(TMPINSTALL_FILES) + +.PRECIOUS: $(PGM) + +EXTRA_DIST = start.S + +include $(top_srcdir)/../../../../../../automake/local.am diff --git a/c/src/lib/libbsp/i960/i960sim/start/start.c b/c/src/lib/libbsp/i960/i960sim/start/start.c new file mode 100644 index 0000000000..590e3eb8ed --- /dev/null +++ b/c/src/lib/libbsp/i960/i960sim/start/start.c @@ -0,0 +1,39 @@ +char *__env[1] = {0}; +char **environ = __env; + +#define ENABLE_TRACE_MASK 1 +#define STACK_ALIGN 64 + +__inline static void +init_Cregs (void) +{ + /* set register values gcc like */ + register unsigned int mask0=0x3b001000; + register unsigned int mask1=0x00009107; + __asm__ volatile ("mov %0,g14" + : /* no output */ + : "I" (0)); /* gnu structure pointer */ + __asm__ volatile ("modac %1,%0,%0" + : /* no output */ + : "d" (mask0), + "d" (mask1)); /* fpu control kb */ +} + +void _start(void) +{ + extern int stack_init; + register void *ptr = &stack_init; + + /* enable tracing */ + register int mask = ENABLE_TRACE_MASK; + __asm__ volatile ("modpc %0,%0,%0" : : "d" (mask)); + + /* SP must be 64 bytes larger than FP at start. */ + __asm__ volatile ("mov %0,sp" : : "d" (ptr + STACK_ALIGN)); + __asm__ volatile ("mov %0,fp" : : "d" (ptr)); + + + init_Cregs(); + boot_card(); + _sys_exit(0); +} |