2001-10-31 David Howells <dhowells@redhat.com>

* syscall.h: Added SYS_times, SYS_gettimeofday, SYS_link values.
        * mn10300/times.c: Renamed "times" to "_times" so that it can be
        referenced by newlib.
        * mn10300/cygmon.c: New file.
        * mn10300/crt0_redboot.S: Ditto.
        * mn10300/crt0_cygmon.S: Ditto.
        * mn10300/Makefile.in: Added RedBoot and Cygmon support.
        * mn10300/configure.in: Changed to allow for future
        evaluation boards to be added.
        * mn10300/configure: Regenerated.
This commit is contained in:
Jeff Johnston 2001-10-31 19:19:08 +00:00
parent 747e577331
commit 75241b15db
9 changed files with 368 additions and 47 deletions

View File

@ -1,3 +1,16 @@
2001-10-31 David Howells <dhowells@redhat.com>
* syscall.h: Added SYS_times, SYS_gettimeofday, SYS_link values.
* mn10300/times.c: Renamed "times" to "_times" so that it can be
referenced by newlib.
* mn10300/cygmon.c: New file.
* mn10300/crt0_redboot.S: Ditto.
* mn10300/crt0_cygmon.S: Ditto.
* mn10300/Makefile.in: Added RedBoot and Cygmon support.
* mn10300/configure.in: Changed to allow for future
evaluation boards to be added.
* mn10300/configure: Regenerated.
2001-10-17 Michael Meissner <meissner@redhat.com>
* regs.S (K0BASE_ADDR,K1BASE_ADDR): Define as addresses to

View File

@ -1,4 +1,4 @@
# Copyright (c) 1998 Cygnus Support
# Copyright (c) 1998, 2000 Cygnus Support
#
# The authors hereby grant permission to use, copy, modify, distribute,
# and license this software and its documentation for any purpose, provided
@ -63,24 +63,26 @@ OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \
then echo ${objroot}/../binutils/objcopy ; \
else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi`
CRT0 = crt0.o
CRT0 = crt0.o crt0_cygmon.o crt0_redboot.o
# Generic object files common to all targets.
GENOBJS = _exit.o access.o chmod.o close.o crt1.o \
GENOBJS_NO_TRAP = _exit.o access.o chmod.o close.o crt1.o \
fstat.o getpid.o isatty.o \
kill.o lseek.o open.o read.o \
sbrk.o stat.o time.o trap.o unlink.o utime.o write.o
sbrk.o stat.o time.o times.o unlink.o utime.o write.o
GENOBJS = ${GENOBJS_NO_TRAP} trap.o
# Object files specific to particular targets.
EVALOBJS = ${GENOBJS}
CYGMONOBJS = cygmon.o ${GENOBJS_NO_TRAP}
CFLAGS = -g
GCC_LDFLAGS = `if [ -d ${objroot}/../gcc ] ; \
then echo -L${objroot}/../gcc ; fi`
SCRIPTS = eval sim
BSP = libeval.a
SCRIPTS = @script_list@
BSP = @bsp_list@
# Host specific makefile fragment comes in here.
@host_makefile_frag@
@ -100,13 +102,17 @@ libeval.a: $(EVALOBJS)
${AR} ${ARFLAGS} $@ $(EVALOBJS)
${RANLIB} $@
libcygmon.a: $(CYGMONOBJS)
${AR} ${ARFLAGS} $@ $(CYGMONOBJS)
${RANLIB} $@
# compile a fully linked binary. The -Wl,-T*.ld is for the linker
# script. By using -Wl, the linker script is put on the proper place
# in the comand line for ld, and all the symbols will get fully
# resolved.
test: $(CRT0) test.o
test: ${CRT0} test.o
${CC} $(CFLAGS_FOR_TARGET) -L${srcdir} -L${objdir} \
test.o -o $@ $(NEWLIB_LDFLAGS) -Wl,-Teval.ld
@echo Done...
@ -121,7 +127,9 @@ distclean maintainer-clean realclean: clean
.PHONY: install info install-info clean-info
install:
$(INSTALL_PROGRAM) $(CRT0) $(tooldir)/lib${MULTISUBDIR}/$(CRT0)
@for crt in ${CRT0}; do\
$(INSTALL_PROGRAM) $${crt} $(tooldir)/lib${MULTISUBDIR}/$${crt}; \
done
@for bsp in ${BSP}; do\
$(INSTALL_PROGRAM) $${bsp} $(tooldir)/lib${MULTISUBDIR}; \
done
@ -136,7 +144,8 @@ clean-info:
test.o: ${srcdir}/test.c
# these are for the BSPs
${CRT0}: ${srcdir}/crt0.S
crt0.o: ${srcdir}/crt0.S
crt0_cygmon.o: ${srcdir}/crt0_cygmon.S
# target specific makefile fragment comes in here.
@target_makefile_frag@

View File

@ -1,7 +1,7 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated automatically using autoconf version 2.12.1
# Generated automatically using autoconf version 2.13
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
@ -28,6 +28,7 @@ program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
sitefile=
srcdir=
target=NONE
verbose=
@ -142,6 +143,7 @@ Configuration:
--help print this message
--no-create do not create output files
--quiet, --silent do not print \`checking...' messages
--site-file=FILE use FILE as the site file
--version print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX install architecture-independent files in PREFIX
@ -312,6 +314,11 @@ EOF
-site=* | --site=* | --sit=*)
site="$ac_optarg" ;;
-site-file | --site-file | --site-fil | --site-fi | --site-f)
ac_prev=sitefile ;;
-site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*)
sitefile="$ac_optarg" ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
@ -333,7 +340,7 @@ EOF
verbose=yes ;;
-version | --version | --versio | --versi | --vers)
echo "configure generated by autoconf version 2.12.1"
echo "configure generated by autoconf version 2.13"
exit 0 ;;
-with-* | --with-*)
@ -477,12 +484,16 @@ fi
srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
# Prefer explicitly selected file to automatically selected ones.
if test -z "$CONFIG_SITE"; then
if test "x$prefix" != xNONE; then
CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
else
CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
if test -z "$sitefile"; then
if test -z "$CONFIG_SITE"; then
if test "x$prefix" != xNONE; then
CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
else
CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
fi
else
CONFIG_SITE="$sitefile"
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
@ -503,9 +514,11 @@ ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
ac_exeext=
ac_objext=o
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
# Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
@ -581,7 +594,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
echo "configure:585: checking host system type" >&5
echo "configure:598: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@ -602,7 +615,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6
echo $ac_n "checking target system type""... $ac_c" 1>&6
echo "configure:606: checking target system type" >&5
echo "configure:619: checking target system type" >&5
target_alias=$target
case "$target_alias" in
@ -620,7 +633,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$target" 1>&6
echo $ac_n "checking build system type""... $ac_c" 1>&6
echo "configure:624: checking build system type" >&5
echo "configure:637: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@ -669,28 +682,30 @@ test "$program_transform_name" = "" && program_transform_name="s,x,x,"
# SunOS /usr/etc/install
# IRIX /sbin/install
# AIX /bin/install
# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
# AFS /usr/afsws/bin/install, which mishandles nonexistent args
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
echo "configure:677: checking for a BSD compatible install" >&5
echo "configure:691: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:"
IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
for ac_dir in $PATH; do
# Account for people who put trailing slashes in PATH elements.
case "$ac_dir/" in
/|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
*)
# OSF1 and SCO ODT 3.0 have their own names for install.
for ac_prog in ginstall installbsd scoinst install; do
# Don't use installbsd from OSF since it installs stuff as root
# by default.
for ac_prog in ginstall scoinst install; do
if test -f $ac_dir/$ac_prog; then
if test $ac_prog = install &&
grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
# OSF/1 installbsd also uses dspmsg, but is usable.
:
else
ac_cv_path_install="$ac_dir/$ac_prog -c"
@ -720,6 +735,8 @@ echo "$ac_t""$INSTALL" 1>&6
# It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
@ -734,15 +751,16 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:738: checking for $ac_word" >&5
echo "configure:755: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
for ac_dir in $PATH; do
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_CC="gcc"
@ -763,16 +781,17 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:767: checking for $ac_word" >&5
echo "configure:785: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_prog_rejected=no
for ac_dir in $PATH; do
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
@ -811,7 +830,7 @@ fi
fi
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
echo "configure:815: checking whether we are using GNU C" >&5
echo "configure:834: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -820,7 +839,7 @@ else
yes;
#endif
EOF
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:824: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:843: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@ -835,7 +854,7 @@ if test $ac_cv_prog_gcc = yes; then
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
echo "configure:839: checking whether ${CC-cc} accepts -g" >&5
echo "configure:858: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -871,15 +890,16 @@ LD=${LD-ld}
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:875: checking for $ac_word" >&5
echo "configure:894: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
for ac_dir in $PATH; do
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_RANLIB="ranlib"
@ -901,6 +921,8 @@ fi
case "${target}" in
*)
part_specific_obj=vr4300.o
script_list="eval sim"
bsp_list="libeval.a"
;;
esac
@ -915,6 +937,8 @@ target_makefile_frag_path=$target_makefile_frag
trap '' 1 2 15
cat > confcache <<\EOF
# This file is a shell script that caches the results of configure
@ -938,7 +962,7 @@ EOF
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
(set) 2>&1 |
case `(ac_space=' '; set) 2>&1 | grep ac_space` in
case `(ac_space=' '; set | grep ac_space) 2>&1` in
*ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote substitution
# turns \\\\ into \\, and sed turns \\ into \).
@ -1017,7 +1041,7 @@ do
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
echo "$CONFIG_STATUS generated by autoconf version 2.12.1"
echo "$CONFIG_STATUS generated by autoconf version 2.13"
exit 0 ;;
-help | --help | --hel | --he | --h)
echo "\$ac_cs_usage"; exit 0 ;;
@ -1041,6 +1065,7 @@ s%@SHELL@%$SHELL%g
s%@CFLAGS@%$CFLAGS%g
s%@CPPFLAGS@%$CPPFLAGS%g
s%@CXXFLAGS@%$CXXFLAGS%g
s%@FFLAGS@%$FFLAGS%g
s%@DEFS@%$DEFS%g
s%@LDFLAGS@%$LDFLAGS%g
s%@LIBS@%$LIBS%g
@ -1075,6 +1100,7 @@ s%@build_cpu@%$build_cpu%g
s%@build_vendor@%$build_vendor%g
s%@build_os@%$build_os%g
s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
s%@INSTALL_DATA@%$INSTALL_DATA%g
s%@CC@%$CC%g
s%@AS@%$AS%g
@ -1088,6 +1114,8 @@ s%@target_makefile_frag_path@%$target_makefile_frag_path%g
/@target_makefile_frag@/r $target_makefile_frag
s%@target_makefile_frag@%%g
s%@part_specific_obj@%$part_specific_obj%g
s%@script_list@%$script_list%g
s%@bsp_list@%$bsp_list%g
CEOF
EOF
@ -1096,7 +1124,7 @@ cat >> $CONFIG_STATUS <<\EOF
# Split the substitutions into bite-sized pieces for seds with
# small command number limits, like on Digital OSF/1 and HP-UX.
ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
ac_max_sed_cmds=60 # Maximum number of lines to put in a sed script.
ac_file=1 # Number of current file.
ac_beg=1 # First line for current file.
ac_end=$ac_max_sed_cmds # Line after last line for current file.

View File

@ -1,4 +1,4 @@
# Copyright (c) 1995, 1996 Cygnus Support
# Copyright (c) 1995, 1996, 2000 Cygnus Support
#
# The authors hereby grant permission to use, copy, modify, distribute,
# and license this software and its documentation for any purpose, provided
@ -85,6 +85,8 @@ AC_PROG_RANLIB
case "${target}" in
*)
part_specific_obj=vr4300.o
script_list="eval sim"
bsp_list="libeval.a"
;;
esac
@ -102,6 +104,8 @@ target_makefile_frag_path=$target_makefile_frag
AC_SUBST(target_makefile_frag_path)
AC_SUBST_FILE(target_makefile_frag)
AC_SUBST(part_specific_obj)
AC_SUBST(script_list)
AC_SUBST(bsp_list)
AC_OUTPUT(Makefile,
. ${libgloss_topdir}/config-ml.in,

View File

@ -0,0 +1,95 @@
/*
* crt0_cygmon.S -- Minimal startup file for MN10300 targets running Cygmon.
*
* Copyright (c) 1995, 1996, 1997, 2000 Red Hat, Inc.
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
/*
* This file contains the minimal startup code necessary.
* This will not do any hardware initialization. It is assumed that we are talking to Cygmon
* and therefore the hardware will be initialized properly.
*/
/*
* Set up some room for a stack. We just grab a chunk of memory.
*/
#define STACK_SIZE 0x4000
#define GLOBAL_SIZE 0x2000
#define STARTUP_STACK_SIZE 0x0100
.comm __memsize, 12
.comm __lstack, STARTUP_STACK_SIZE
.comm __stackbase,4
.section .text
.global _start
_start:
/*
* Setup a small stack so we can run some C code,
* and get the usable memory size.
*/
mov __lstack,a0
add STARTUP_STACK_SIZE-4,a0
mov a0,sp
/*
* zero out the bss section.
*/
.global __memsize
.global _get_mem_info
zerobss:
mov __bss_start, a0 # These variables are defined in the linker script
mov _end, a1
cmp a0, a1 # If no bss, then do nothing
beq 7f
clr d0
3:
movbu d0,(a0) # Clear a byte and bump pointer
inc a0
cmp a0, a1
bne 3b
7:
/*
* Setup the stack pointer --
* get_mem_info returns the top of memory, so just use that In
* addition, we must subtract 24 bytes for the 3 8 byte
* arguments to main, in case main wants to write them back to
* the stack. The caller is supposed to allocate stack space
* for parameters in registers in the old MIPS ABIs. We must
* do this even though we aren't passing arguments, because
* main might be declared to have them.
* Some ports need a larger alignment for the stack, so we
* subtract 32, which satisifes the stack for the arguments and
* keeps the stack pointer better aligned.
*/
mov __memsize, d0
call _get_mem_info,[],0
sub 32, a0
mov a0, sp
mov __stackbase, a1
mov a0, (a1) # keep this for future ref
call ___main,[],0 # Call __main to run ctors/dtors
clr d0
clr d1
mov d0, (4,sp)
call _main,[],0 # Call main program
call _exit,[],0
/* EOF crt0_cygmon.S */

View File

@ -0,0 +1,97 @@
/*
* crt0_redboot.S -- Minimal startup file for MN10300 targets running Redboot.
*
* Copyright (c) 2001 Red Hat, Inc.
* Derived from crt0_cygmon.S - Copyright (c) 1995, 1996, 1997, 2000 Red Hat, Inc.
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
/*
* This file contains the minimal startup code necessary.
* This will not do any hardware initialization. It is assumed that we are talking to Redboot
* and therefore the hardware will be initialized properly.
*/
/*
* Set up some room for a stack. We just grab a chunk of memory.
*/
#define STACK_SIZE 0x4000
#define GLOBAL_SIZE 0x2000
#define STARTUP_STACK_SIZE 0x0100
.comm __memsize, 12
.comm __lstack, STARTUP_STACK_SIZE
.comm __stackbase,4
.section .text
.global _start
_start:
/*
* Setup a small stack so we can run some C code,
* and get the usable memory size.
*/
mov __lstack,a0
add STARTUP_STACK_SIZE-4,a0
mov a0,sp
/*
* zero out the bss section.
*/
.global __memsize
.global _get_mem_info
zerobss:
mov __bss_start, a0 # These variables are defined in the linker script
mov _end, a1
cmp a0, a1 # If no bss, then do nothing
beq 7f
clr d0
3:
movbu d0,(a0) # Clear a byte and bump pointer
inc a0
cmp a0, a1
bne 3b
7:
/*
* Setup the stack pointer --
* get_mem_info returns the top of memory, so just use that In
* addition, we must subtract 24 bytes for the 3 8 byte
* arguments to main, in case main wants to write them back to
* the stack. The caller is supposed to allocate stack space
* for parameters in registers in the old MIPS ABIs. We must
* do this even though we aren't passing arguments, because
* main might be declared to have them.
* Some ports need a larger alignment for the stack, so we
* subtract 32, which satisifes the stack for the arguments and
* keeps the stack pointer better aligned.
*/
mov __memsize, d0
call _get_mem_info,[],0
sub 32, a0
mov a0, sp
mov __stackbase, a1
mov a0, (a1) # keep this for future ref
call ___main,[],0 # Call __main to run ctors/dtors
clr d0
clr d1
mov d0, (4,sp)
or 0x0800,psw # Enable interrupts
call _main,[],0 # Call main program
call _exit,[],0
/* EOF crt0_redboot.S */

73
libgloss/mn10300/cygmon.c Normal file
View File

@ -0,0 +1,73 @@
/* cygmon.c -- Glue code for linking apps to run on top of Cygmon.
*
* Copyright (c) 1998, 1999, 2000, 2001 Red Hat, Inc.
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include <errno.h>
// These need to be kept in sync with the definitions in Cygmon.
#define SYS_meminfo 1001
#include "syscall.h"
/* Structure filled in by get_mem_info. Only the size field is
actually used (by sbrk), so the others aren't even filled in. */
struct s_mem
{
unsigned int size;
unsigned int icsize;
unsigned int dcsize;
};
// Perform a system call.
// Unused parameters should be set to 0.
int __trap0(unsigned long func, unsigned long p1, unsigned long p2, unsigned long p3)
{
int ret = 0;
#ifdef __AM33__
{
register unsigned long d0 asm ("d0") = func;
register unsigned long d1 asm ("d1") = p1;
register unsigned long d2 asm ("d2") = p2;
register unsigned long d3 asm ("d3") = p3;
asm volatile (" syscall 0\n"
" nop"
: "+d" (d0) : "d" (d1), "d" (d2), "d" (d3) : "memory");
ret = d0;
}
#endif
if (func == SYS_exit)
{
while (1)
{
asm volatile (" .byte 0xff "); // trigger a breakpoint to drop back into Cygmon
}
}
if (ret != 0)
errno = ret;
return ret;
}
void *
get_mem_info (mem)
struct s_mem *mem;
{
unsigned long totmem = 0, topmem = 0;
register int numbanks;
numbanks = __trap0(SYS_meminfo, (unsigned long)&totmem, (unsigned long)&topmem, 0);
mem->size = totmem;
return (void*)topmem;
}

View File

@ -6,7 +6,7 @@
clock_t
times (struct tms *buffer)
_times (struct tms *buffer)
{
return TRAP0 (SYS_times, buffer, 0, 0);
}

View File

@ -38,10 +38,12 @@
#define SYS_argv 13
/* These are extras added for one reason or another. */
#define SYS_chdir 14
#define SYS_stat 15
#define SYS_chmod 16
#define SYS_utime 17
#define SYS_time 18
#define SYS_chdir 14
#define SYS_stat 15
#define SYS_chmod 16
#define SYS_utime 17
#define SYS_time 18
#define SYS_gettimeofday 19
#define SYS_times 20
#define SYS_link 21
#endif