This is the mail archive of the
newlib@sources.redhat.com
mailing list for the newlib project.
Re: [PATCH]: Newlib port for 68hc11/68hc12
- From: Stephane Carrez <stcarrez at nerim dot fr>
- To: "J. Johnston" <jjohnstn at redhat dot com>
- Cc: newlib at sources dot redhat dot com
- Date: Fri, 19 Jul 2002 00:25:04 +0200
- Subject: Re: [PATCH]: Newlib port for 68hc11/68hc12
- References: <3D349CF5.9040903@nerim.fr> <3D360681.DB573246@redhat.com>
Hi Jeff,
J. Johnston wrote:
A couple of minor problems.
1. I just fixed sys/config.h and machine/ieeefp.h so that you only specify floating
point macros in machine/ieeefp.h. sys/config.h now includes machine/ieeefp.h
Ok, I cleaned up the includes.
2. All those redefines of I/O routines in sys/config.h is ugly. What end behavior are
you trying to accomplish? Are you aware of the NO_FLOATING_POINT flag
which is triggered via the --disable-newlib-io-float configuration option? You can
also set this flag on in your default newlib_cflags setting in configure.host.
If it doesn't meet your needs, I'm sure we can come up with a design that can be triggered
via a single configuration value in configure.host or a single flag in sys/config.h with
some additional changes in libc/stdio.
-- Jeff J.
Ok, I'll use --disable option.
Below is the revised patch.
Stephane
2002-07-18 Stephane Carrez <stcarrez@nerim.fr>
* configure.host: Recognize m6811-elf and m6812-elf targets.
* libc/include/machine/setjmp.h (_JBLEN): Define for 68hc11/68hc12.
* libc/include/machine/ieeefp.h (__IEEE_BIG_ENDIAN): Define for 68HC11.
(_DOUBLE_IS_32BITS): Define when compiling with -fshort-double.
* libc/include/sys/config.h (INT_MAX, UINT_MAX): Define
according to __INT_MAX__.
(_POINTER_INT): Define to short.
* libc/machine/m68hc11/Makefile.am: New file.
* libc/machine/m68hc11/Makefile.in: Generate.
* libc/machine/m68hc11/configure.in: New file.
* libc/machine/m68hc11/configure: Generate.
* libc/machine/m68hc11/aclocal.m4: New file.
* libc/machine/m68hc11/setjmp.S: New file.
* libc/sys/m68hc11/Makefile.am: New file.
* libc/sys/m68hc11/Makefile.in: Generate.
* libc/sys/m68hc11/configure.in: New file.
* libc/sys/m68hc11/configure: Generate.
* libc/sys/m68hc11/aclocal.m4: New file.
* libc/sys/m68hc11/crt0.S: New file (from gcc/config/m68hc11).
* libc/sys/m68hc11/sci-inout.S: New file.
* libc/sys/m68hc11/syscalls.c: New file.
diff -Nrup --exclude=Makefile.in --exclude=configure --exclude=CVS ../newlib-main/newlib/configure.host newlib/configure.host
--- ../newlib-main/newlib/configure.host Thu Jul 18 22:51:53 2002
+++ newlib/configure.host Thu Jul 18 22:50:11 2002
@@ -127,6 +127,13 @@ case "${host_cpu}" in
m32r*)
machine_dir=m32r
;;
+
+ m68hc11|m6811|m68hc12|m6812)
+ machine_dir=m68hc11
+ newlib_cflags="-DPREFER_SIZE_OVER_SPEED -Os -mrelax"
+ CFLAGS="-g -Os"
+ ;;
+
m68*)
machine_dir=m68k
newlib_cflags="${newlib_cflags} -DCOMPACT_CTYPE"
@@ -324,6 +331,11 @@ case "${host}" in
##newlib_cflags="${newlib_cflags} -I`newlib-flags --kernel-dir`/include"
##newlib_cflags="${newlib_cflags} -idirafter ${gcc_dir}include"
;;
+ m68hc11-*-*|m6811-*-*|m6812-*-*|m68hc12-*-*)
+ sys_dir=m68hc11
+ syscalls_dir=
+ ;;
+
m68k-sun-sunos*)
unix_dir=unix
;;
@@ -482,6 +494,9 @@ case "${host}" in
newlib_cflags="${newlib_cflags} -msdata=sdata"
syscall_dir=syscalls
;;
+ m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*)
+ newlib_cflags="${newlib_cflags} -DNO_EXEC -DABORT_PROVIDED -DSMALL_MEMORY -DMISSING_SYSCALL_NAMES"
+ ;;
mcore-*-*)
newlib_cflags="${newlib_cflags}"
syscall_dir=syscalls
diff -Nrup --exclude=Makefile.in --exclude=configure --exclude=CVS ../newlib-main/newlib/libc/include/machine/ieeefp.h newlib/libc/include/machine/ieeefp.h
--- ../newlib-main/newlib/libc/include/machine/ieeefp.h Thu Jul 18 22:51:53 2002
+++ newlib/libc/include/machine/ieeefp.h Fri Jul 19 00:01:18 2002
@@ -75,6 +75,13 @@
#define __IEEE_BIG_ENDIAN
#endif
+#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
+#define __IEEE_BIG_ENDIAN
+#ifdef __HAVE_SHORT_DOUBLE__
+# define _DOUBLE_IS_32BITS
+#endif
+#endif
+
#if defined (__H8300__) || defined (__H8300H__) || defined (__H8300S__) || defined (__H8500__)
#define __IEEE_BIG_ENDIAN
#define _FLOAT_ARG float
diff -Nrup --exclude=Makefile.in --exclude=configure --exclude=CVS ../newlib-main/newlib/libc/include/machine/setjmp.h newlib/libc/include/machine/setjmp.h
--- ../newlib-main/newlib/libc/include/machine/setjmp.h Fri Jun 28 01:58:38 2002
+++ newlib/libc/include/machine/setjmp.h Sat Jul 13 15:23:34 2002
@@ -28,6 +28,14 @@ _BEGIN_STD_C
#define _JBLEN 34
#endif
+#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
+/*
+ * D, X, Y are not saved.
+ * Only take into account the pseudo soft registers (max 32).
+ */
+#define _JBLEN 32
+#endif
+
#if defined(__Z8001__) || defined(__Z8002__)
/* 16 regs + pc */
#define _JBLEN 20
diff -Nrup --exclude=Makefile.in --exclude=configure --exclude=CVS ../newlib-main/newlib/libc/include/sys/config.h newlib/libc/include/sys/config.h
--- ../newlib-main/newlib/libc/include/sys/config.h Thu Jul 18 22:51:54 2002
+++ newlib/libc/include/sys/config.h Thu Jul 18 22:56:14 2002
@@ -33,6 +33,14 @@
#define _POINTER_INT short
#endif
+#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
+#undef INT_MAX
+#undef UINT_MAX
+#define INT_MAX __INT_MAX__
+#define UINT_MAX (__INT_MAX__ * 2U + 1)
+#define _POINTER_INT short
+#endif
+
#ifdef ___AM29K__
#define _FLOAT_RET double
#endif
diff -Nrup --exclude=Makefile.in --exclude=configure --exclude=CVS ../newlib-main/newlib/libc/machine/m68hc11/Makefile.am newlib/libc/machine/m68hc11/Makefile.am
--- ../newlib-main/newlib/libc/machine/m68hc11/Makefile.am Thu Jan 1 01:00:00 1970
+++ newlib/libc/machine/m68hc11/Makefile.am Sat Jul 13 15:23:34 2002
@@ -0,0 +1,12 @@
+## Process this file with automake to generate Makefile.in
+
+AUTOMAKE_OPTIONS = cygnus
+
+INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
+
+noinst_LIBRARIES = lib.a
+
+lib_a_SOURCES = setjmp.S
+
+ACLOCAL_AMFLAGS = -I ../../..
+CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
diff -Nrup --exclude=Makefile.in --exclude=configure --exclude=CVS ../newlib-main/newlib/libc/machine/m68hc11/aclocal.m4 newlib/libc/machine/m68hc11/aclocal.m4
--- ../newlib-main/newlib/libc/machine/m68hc11/aclocal.m4 Thu Jan 1 01:00:00 1970
+++ newlib/libc/machine/m68hc11/aclocal.m4 Sat Jul 13 15:23:34 2002
@@ -0,0 +1,345 @@
+dnl aclocal.m4 generated automatically by aclocal 1.3b
+
+dnl Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+
+dnl This provides configure definitions used by all the newlib
+dnl configure.in files.
+
+dnl Basic newlib configury. This calls basic introductory stuff,
+dnl including AM_INIT_AUTOMAKE and AC_CANONICAL_HOST. It also runs
+dnl configure.host. The only argument is the relative path to the top
+dnl newlib directory.
+
+AC_DEFUN(NEWLIB_CONFIGURE,
+[
+dnl Default to --enable-multilib
+AC_ARG_ENABLE(multilib,
+[ --enable-multilib build many library versions (default)],
+[case "${enableval}" in
+ yes) multilib=yes ;;
+ no) multilib=no ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
+ esac], [multilib=yes])dnl
+
+dnl Support --enable-target-optspace
+AC_ARG_ENABLE(target-optspace,
+[ --enable-target-optspace optimize for space],
+[case "${enableval}" in
+ yes) target_optspace=yes ;;
+ no) target_optspace=no ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for target-optspace option) ;;
+ esac], [target_optspace=])dnl
+
+dnl Support --enable-newlib-mb
+AC_ARG_ENABLE(newlib-mb,
+[ --enable-newlib-mb enable multibyte support],
+[case "${enableval}" in
+ yes) newlib_mb=yes ;;
+ no) newlib_mb=no ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for newlib-mb option) ;;
+ esac], [newlib_mb=no])dnl
+
+dnl We may get other options which we don't document:
+dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
+
+test -z "[$]{with_target_subdir}" && with_target_subdir=.
+
+if test "[$]{srcdir}" = "."; then
+ if test "[$]{with_target_subdir}" != "."; then
+ newlib_basedir="[$]{srcdir}/[$]{with_multisrctop}../$1"
+ else
+ newlib_basedir="[$]{srcdir}/[$]{with_multisrctop}$1"
+ fi
+else
+ newlib_basedir="[$]{srcdir}/$1"
+fi
+AC_SUBST(newlib_basedir)
+
+AC_CANONICAL_HOST
+
+AM_INIT_AUTOMAKE(newlib, 1.8.1)
+
+# FIXME: We temporarily define our own version of AC_PROG_CC. This is
+# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
+# are probably using a cross compiler, which will not be able to fully
+# link an executable. This should really be fixed in autoconf
+# itself.
+
+AC_DEFUN(LIB_AC_PROG_CC,
+[AC_BEFORE([$0], [AC_PROG_CPP])dnl
+AC_CHECK_PROG(CC, gcc, gcc)
+if test -z "$CC"; then
+ AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
+ test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
+fi
+
+AC_PROG_CC_GNU
+
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+dnl Check whether -g works, even if CFLAGS is set, in case the package
+dnl plays around with CFLAGS (such as to build both debugging and
+dnl normal versions of a library), tasteless as that idea is.
+ ac_test_CFLAGS="${CFLAGS+set}"
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS=
+ AC_PROG_CC_G
+ if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+ elif test $ac_cv_prog_cc_g = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-O2"
+ fi
+else
+ GCC=
+ test "${CFLAGS+set}" = set || CFLAGS="-g"
+fi
+])
+
+LIB_AC_PROG_CC
+
+# AC_CHECK_TOOL does AC_REQUIRE (AC_CANONICAL_BUILD). If we don't
+# run it explicitly here, it will be run implicitly before
+# NEWLIB_CONFIGURE, which doesn't work because that means that it will
+# be run before AC_CANONICAL_HOST.
+AC_CANONICAL_BUILD
+
+AC_CHECK_TOOL(AS, as)
+AC_CHECK_TOOL(AR, ar)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+
+AM_PROG_INSTALL
+
+AM_MAINTAINER_MODE
+
+# We need AM_EXEEXT to keep automake happy in cygnus mode. However,
+# at least currently, we never actually build a program, so we never
+# need to use $(EXEEXT). Moreover, the test for EXEEXT normally
+# fails, because we are probably configuring with a cross compiler
+# which can't create executables. So we include AM_EXEEXT to keep
+# automake happy, but we don't execute it, since we don't care about
+# the result.
+if false; then
+ AM_EXEEXT
+fi
+
+. [$]{newlib_basedir}/configure.host
+
+case [$]{newlib_basedir} in
+/* | [A-Za-z]:[/\\]*) newlib_flagbasedir=[$]{newlib_basedir} ;;
+*) newlib_flagbasedir='[$](top_builddir)/'[$]{newlib_basedir} ;;
+esac
+
+newlib_cflags="[$]{newlib_cflags} -I"'[$](top_builddir)'"/$1/targ-include -I[$]{newlib_flagbasedir}/libc/include"
+case "${host}" in
+ *-*-cygwin32*)
+ newlib_cflags="[$]{newlib_cflags} -I[$]{newlib_flagbasedir}/../winsup/include"
+ ;;
+esac
+
+newlib_cflags="[$]{newlib_cflags} -fno-builtin"
+
+NEWLIB_CFLAGS=${newlib_cflags}
+AC_SUBST(NEWLIB_CFLAGS)
+
+AC_SUBST(machine_dir)
+AC_SUBST(sys_dir)
+])
+
+# Do all the work for Automake. This macro actually does too much --
+# some checks are only needed if your package does certain things.
+# But this isn't really a big deal.
+
+# serial 1
+
+dnl Usage:
+dnl AM_INIT_AUTOMAKE(package,version, [no-define])
+
+AC_DEFUN(AM_INIT_AUTOMAKE,
+[AC_REQUIRE([AM_PROG_INSTALL])
+PACKAGE=[$1]
+AC_SUBST(PACKAGE)
+VERSION=[$2]
+AC_SUBST(VERSION)
+dnl test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+ifelse([$3],,
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION"))
+AC_REQUIRE([AM_SANITY_CHECK])
+AC_REQUIRE([AC_ARG_PROGRAM])
+dnl FIXME This is truly gross.
+missing_dir=`cd $ac_aux_dir && pwd`
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
+AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
+AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+AC_REQUIRE([AC_PROG_MAKE_SET])])
+
+
+# serial 1
+
+AC_DEFUN(AM_PROG_INSTALL,
+[AC_REQUIRE([AC_PROG_INSTALL])
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+AC_SUBST(INSTALL_SCRIPT)dnl
+])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+AC_DEFUN(AM_SANITY_CHECK,
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+ if test "[$]*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftestfile`
+ fi
+ if test "[$]*" != "X $srcdir/configure conftestfile" \
+ && test "[$]*" != "X conftestfile $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "[$]2" = conftestfile
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+rm -f conftest*
+AC_MSG_RESULT(yes)])
+
+dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
+dnl The program must properly implement --version.
+AC_DEFUN(AM_MISSING_PROG,
+[AC_MSG_CHECKING(for working $2)
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if ($2 --version) < /dev/null > /dev/null 2>&1; then
+ $1=$2
+ AC_MSG_RESULT(found)
+else
+ $1="$3/missing $2"
+ AC_MSG_RESULT(missing)
+fi
+AC_SUBST($1)])
+
+# Add --enable-maintainer-mode option to configure.
+# From Jim Meyering
+
+# serial 1
+
+AC_DEFUN(AM_MAINTAINER_MODE,
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode is disabled by default
+ AC_ARG_ENABLE(maintainer-mode,
+[ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ USE_MAINTAINER_MODE=$enableval,
+ USE_MAINTAINER_MODE=no)
+ AC_MSG_RESULT($USE_MAINTAINER_MODE)
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINT=
+ else
+ MAINT='#M#'
+ fi
+ AC_SUBST(MAINT)dnl
+]
+)
+
+# Check to see if we're running under Win32, without using
+# AC_CANONICAL_*. If so, set output variable EXEEXT to ".exe".
+# Otherwise set it to "".
+
+dnl AM_EXEEXT()
+dnl This knows we add .exe if we're building in the Cygwin32
+dnl environment. But if we're not, then it compiles a test program
+dnl to see if there is a suffix for executables.
+AC_DEFUN(AM_EXEEXT,
+[AC_REQUIRE([AM_CYGWIN32])
+AC_REQUIRE([AM_MINGW32])
+AC_MSG_CHECKING([for executable suffix])
+AC_CACHE_VAL(am_cv_exeext,
+[if test "$CYGWIN32" = yes || test "$MINGW32" = yes; then
+am_cv_exeext=.exe
+else
+cat > am_c_test.c << 'EOF'
+int main() {
+/* Nothing needed here */
+}
+EOF
+${CC-cc} -o am_c_test $CFLAGS $CPPFLAGS $LDFLAGS am_c_test.c $LIBS 1>&5
+am_cv_exeext=
+for file in am_c_test.*; do
+ case $file in
+ *.c) ;;
+ *.o) ;;
+ *) am_cv_exeext=`echo $file | sed -e s/am_c_test//` ;;
+ esac
+done
+rm -f am_c_test*])
+test x"${am_cv_exeext}" = x && am_cv_exeext=no
+fi
+EXEEXT=""
+test x"${am_cv_exeext}" != xno && EXEEXT=${am_cv_exeext}
+AC_MSG_RESULT(${am_cv_exeext})
+AC_SUBST(EXEEXT)])
+
+# Check to see if we're running under Cygwin32, without using
+# AC_CANONICAL_*. If so, set output variable CYGWIN32 to "yes".
+# Otherwise set it to "no".
+
+dnl AM_CYGWIN32()
+AC_DEFUN(AM_CYGWIN32,
+[AC_CACHE_CHECK(for Cygwin32 environment, am_cv_cygwin32,
+[AC_TRY_COMPILE(,[return __CYGWIN32__;],
+am_cv_cygwin32=yes, am_cv_cygwin32=no)
+rm -f conftest*])
+CYGWIN32=
+test "$am_cv_cygwin32" = yes && CYGWIN32=yes])
+
+# Check to see if we're running under Mingw, without using
+# AC_CANONICAL_*. If so, set output variable MINGW32 to "yes".
+# Otherwise set it to "no".
+
+dnl AM_MINGW32()
+AC_DEFUN(AM_MINGW32,
+[AC_CACHE_CHECK(for Mingw32 environment, am_cv_mingw32,
+[AC_TRY_COMPILE(,[return __MINGW32__;],
+am_cv_mingw32=yes, am_cv_mingw32=no)
+rm -f conftest*])
+MINGW32=
+test "$am_cv_mingw32" = yes && MINGW32=yes])
+
diff -Nrup --exclude=Makefile.in --exclude=configure --exclude=CVS ../newlib-main/newlib/libc/machine/m68hc11/configure.in newlib/libc/machine/m68hc11/configure.in
--- ../newlib-main/newlib/libc/machine/m68hc11/configure.in Thu Jan 1 01:00:00 1970
+++ newlib/libc/machine/m68hc11/configure.in Sat Jul 13 15:23:34 2002
@@ -0,0 +1,12 @@
+dnl This is the newlib/libc/machine/m68hc11 configure.in file.
+dnl Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.5)
+AC_INIT(setjmp.S)
+
+dnl Can't be done in NEWLIB_CONFIGURE because that confuses automake.
+AC_CONFIG_AUX_DIR(../../../..)
+
+NEWLIB_CONFIGURE(../../..)
+
+AC_OUTPUT(Makefile)
diff -Nrup --exclude=Makefile.in --exclude=configure --exclude=CVS ../newlib-main/newlib/libc/machine/m68hc11/setjmp.S newlib/libc/machine/m68hc11/setjmp.S
--- ../newlib-main/newlib/libc/machine/m68hc11/setjmp.S Thu Jan 1 01:00:00 1970
+++ newlib/libc/machine/m68hc11/setjmp.S Sat Jul 13 15:23:34 2002
@@ -0,0 +1,141 @@
+/* setjmp/longjmp routines for M68HC11 & M68HC12.
+ * Copyright (C) 1999, 2000, 2001, 2002 Stephane Carrez (stcarrez@nerim.fr)
+ *
+ * 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.
+ */
+
+#if __INT__ == 32
+# define val 4
+# define INT32(X) X
+#else
+# define val 2
+# define INT32(X)
+#endif
+
+#ifdef mc6811
+# define REG(X) *X
+#else
+# define REG(X) X
+#endif
+
+ .sect .text
+ .global setjmp
+ .global longjmp
+
+#ifdef mc6811
+setjmp:
+ xgdx
+ tsy
+ ldd 0,y
+ std 0,x
+ sty 2,x
+ ldd REG(_.frame)
+ std 4,x
+ ldd REG(_.d1)
+ std 6,x
+ ldd REG(_.d2)
+ std 8,x
+ ldd REG(_.d3)
+ std 10,x
+ ldd REG(_.d4)
+ std 12,x
+ ldd REG(_.d5)
+ std 14,x
+ ldd REG(_.d6)
+ std 16,x
+ ldd REG(_.d7)
+ std 18,x
+ ldd REG(_.d8)
+ std 20,x
+INT32( ldx #0)
+ clra
+ clrb
+ rts
+#else
+setjmp:
+ xgdx
+ movw 0,sp,2,x+
+ sts 2,x+
+ movw _.frame,2,x+
+ movw _.d1,2,x+
+ movw _.d2,2,x+
+ movw _.d3,2,x+
+ movw _.d4,2,x+
+ movw _.d5,2,x+
+ movw _.d6,2,x+
+ movw _.d7,2,x+
+ movw _.d8,2,x+
+INT32( ldx #0)
+ clra
+ clrb
+ rts
+#endif
+
+#ifdef mc6811
+longjmp:
+ xgdx
+ tsy
+ ldd val,y
+ bne do_jump
+ ldd #1
+do_jump:
+ xgdy
+ ldd 4,x
+ std REG(_.frame)
+ ldd 6,x
+ std REG(_.d1)
+ ldd 8,x
+ std REG(_.d2)
+ ldd 10,x
+ std REG(_.d3)
+ ldd 12,x
+ std REG(_.d4)
+ ldd 14,x
+ std REG(_.d5)
+ ldd 16,x
+ std REG(_.d6)
+ ldd 18,x
+ std REG(_.d7)
+ ldd 20,x
+ std REG(_.d8)
+ ldd 0,x
+ ldx 2,x
+ txs
+ std 0,x
+INT32( ldx #0)
+ xgdy
+ rts
+#else
+
+longjmp:
+ xgdx
+ ldy val,sp
+ bne do_jump
+ ldy #1
+do_jump:
+ ldd 4,x+
+ movw 2,x+,_.frame
+ movw 0,x,_.d1
+ movw 2,x,_.d2
+ movw 4,x,_.d3
+ movw 6,x,_.d4
+ movw 8,x,_.d5
+ movw 10,x,_.d6
+ movw 12,x,_.d7
+ movw 14,x,_.d8
+ ldx -4,x
+ txs
+ std 0,x
+INT32( ldx #0)
+ xgdy
+ rts
+#endif
+
diff -Nrup --exclude=Makefile.in --exclude=configure --exclude=CVS ../newlib-main/newlib/libc/sys/m68hc11/Makefile.am newlib/libc/sys/m68hc11/Makefile.am
--- ../newlib-main/newlib/libc/sys/m68hc11/Makefile.am Thu Jan 1 01:00:00 1970
+++ newlib/libc/sys/m68hc11/Makefile.am Sat Jul 13 15:23:34 2002
@@ -0,0 +1,14 @@
+## Process this file with automake to generate Makefile.in
+
+AUTOMAKE_OPTIONS = cygnus
+
+INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
+
+noinst_LIBRARIES = lib.a
+
+lib_a_SOURCES = syscalls.c sci-inout.S
+
+all: crt0.o
+
+ACLOCAL_AMFLAGS = -I ../../..
+CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
diff -Nrup --exclude=Makefile.in --exclude=configure --exclude=CVS ../newlib-main/newlib/libc/sys/m68hc11/aclocal.m4 newlib/libc/sys/m68hc11/aclocal.m4
--- ../newlib-main/newlib/libc/sys/m68hc11/aclocal.m4 Thu Jan 1 01:00:00 1970
+++ newlib/libc/sys/m68hc11/aclocal.m4 Sat Jul 13 15:23:34 2002
@@ -0,0 +1,282 @@
+dnl aclocal.m4 generated automatically by aclocal 1.4
+
+dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+
+dnl This provides configure definitions used by all the newlib
+dnl configure.in files.
+
+dnl Basic newlib configury. This calls basic introductory stuff,
+dnl including AM_INIT_AUTOMAKE and AC_CANONICAL_HOST. It also runs
+dnl configure.host. The only argument is the relative path to the top
+dnl newlib directory.
+
+AC_DEFUN(NEWLIB_CONFIGURE,
+[
+dnl Default to --enable-multilib
+AC_ARG_ENABLE(multilib,
+[ --enable-multilib build many library versions (default)],
+[case "${enableval}" in
+ yes) multilib=yes ;;
+ no) multilib=no ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
+ esac], [multilib=yes])dnl
+
+dnl Support --enable-target-optspace
+AC_ARG_ENABLE(target-optspace,
+[ --enable-target-optspace optimize for space],
+[case "${enableval}" in
+ yes) target_optspace=yes ;;
+ no) target_optspace=no ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for target-optspace option) ;;
+ esac], [target_optspace=])dnl
+
+dnl Support --enable-newlib-mb
+AC_ARG_ENABLE(newlib-mb,
+[ --enable-newlib-mb enable multibyte support],
+[case "${enableval}" in
+ yes) newlib_mb=yes ;;
+ no) newlib_mb=no ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for newlib-mb option) ;;
+ esac], [newlib_mb=no])dnl
+
+dnl We may get other options which we don't document:
+dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
+
+test -z "[$]{with_target_subdir}" && with_target_subdir=.
+
+if test "[$]{srcdir}" = "."; then
+ if test "[$]{with_target_subdir}" != "."; then
+ newlib_basedir="[$]{srcdir}/[$]{with_multisrctop}../$1"
+ else
+ newlib_basedir="[$]{srcdir}/[$]{with_multisrctop}$1"
+ fi
+else
+ newlib_basedir="[$]{srcdir}/$1"
+fi
+AC_SUBST(newlib_basedir)
+
+AC_CANONICAL_HOST
+
+AM_INIT_AUTOMAKE(newlib, 1.9.0)
+
+# FIXME: We temporarily define our own version of AC_PROG_CC. This is
+# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
+# are probably using a cross compiler, which will not be able to fully
+# link an executable. This should really be fixed in autoconf
+# itself.
+
+AC_DEFUN(LIB_AC_PROG_CC,
+[AC_BEFORE([$0], [AC_PROG_CPP])dnl
+AC_CHECK_PROG(CC, gcc, gcc)
+if test -z "$CC"; then
+ AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
+ test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
+fi
+
+AC_PROG_CC_GNU
+
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+dnl Check whether -g works, even if CFLAGS is set, in case the package
+dnl plays around with CFLAGS (such as to build both debugging and
+dnl normal versions of a library), tasteless as that idea is.
+ ac_test_CFLAGS="${CFLAGS+set}"
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS=
+ AC_PROG_CC_G
+ if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+ elif test $ac_cv_prog_cc_g = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-O2"
+ fi
+else
+ GCC=
+ test "${CFLAGS+set}" = set || CFLAGS="-g"
+fi
+])
+
+LIB_AC_PROG_CC
+
+# AC_CHECK_TOOL does AC_REQUIRE (AC_CANONICAL_BUILD). If we don't
+# run it explicitly here, it will be run implicitly before
+# NEWLIB_CONFIGURE, which doesn't work because that means that it will
+# be run before AC_CANONICAL_HOST.
+AC_CANONICAL_BUILD
+
+AC_CHECK_TOOL(AS, as)
+AC_CHECK_TOOL(AR, ar)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+
+AC_PROG_INSTALL
+
+AM_MAINTAINER_MODE
+
+# We need AC_EXEEXT to keep automake happy in cygnus mode. However,
+# at least currently, we never actually build a program, so we never
+# need to use $(EXEEXT). Moreover, the test for EXEEXT normally
+# fails, because we are probably configuring with a cross compiler
+# which can't create executables. So we include AC_EXEEXT to keep
+# automake happy, but we don't execute it, since we don't care about
+# the result.
+if false; then
+ AC_EXEEXT
+fi
+
+. [$]{newlib_basedir}/configure.host
+
+case [$]{newlib_basedir} in
+/* | [A-Za-z]:[/\\]*) newlib_flagbasedir=[$]{newlib_basedir} ;;
+*) newlib_flagbasedir='[$](top_builddir)/'[$]{newlib_basedir} ;;
+esac
+
+newlib_cflags="[$]{newlib_cflags} -I"'[$](top_builddir)'"/$1/targ-include -I[$]{newlib_flagbasedir}/libc/include"
+case "${host}" in
+ *-*-cygwin*)
+ newlib_cflags="[$]{newlib_cflags} -I[$]{newlib_flagbasedir}/../winsup/cygwin/include -I[$]{newlib_flagbasedir}/../winsup/w32api/include"
+ ;;
+esac
+
+newlib_cflags="[$]{newlib_cflags} -fno-builtin"
+
+NEWLIB_CFLAGS=${newlib_cflags}
+AC_SUBST(NEWLIB_CFLAGS)
+
+AC_SUBST(machine_dir)
+AC_SUBST(sys_dir)
+])
+
+# Do all the work for Automake. This macro actually does too much --
+# some checks are only needed if your package does certain things.
+# But this isn't really a big deal.
+
+# serial 1
+
+dnl Usage:
+dnl AM_INIT_AUTOMAKE(package,version, [no-define])
+
+AC_DEFUN(AM_INIT_AUTOMAKE,
+[AC_REQUIRE([AC_PROG_INSTALL])
+PACKAGE=[$1]
+AC_SUBST(PACKAGE)
+VERSION=[$2]
+AC_SUBST(VERSION)
+dnl test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+ifelse([$3],,
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
+AC_REQUIRE([AM_SANITY_CHECK])
+AC_REQUIRE([AC_ARG_PROGRAM])
+dnl FIXME This is truly gross.
+missing_dir=`cd $ac_aux_dir && pwd`
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
+AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
+AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+AC_REQUIRE([AC_PROG_MAKE_SET])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+AC_DEFUN(AM_SANITY_CHECK,
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+ if test "[$]*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftestfile`
+ fi
+ if test "[$]*" != "X $srcdir/configure conftestfile" \
+ && test "[$]*" != "X conftestfile $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "[$]2" = conftestfile
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+rm -f conftest*
+AC_MSG_RESULT(yes)])
+
+dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
+dnl The program must properly implement --version.
+AC_DEFUN(AM_MISSING_PROG,
+[AC_MSG_CHECKING(for working $2)
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if ($2 --version) < /dev/null > /dev/null 2>&1; then
+ $1=$2
+ AC_MSG_RESULT(found)
+else
+ $1="$3/missing $2"
+ AC_MSG_RESULT(missing)
+fi
+AC_SUBST($1)])
+
+# Add --enable-maintainer-mode option to configure.
+# From Jim Meyering
+
+# serial 1
+
+AC_DEFUN(AM_MAINTAINER_MODE,
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode is disabled by default
+ AC_ARG_ENABLE(maintainer-mode,
+[ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ USE_MAINTAINER_MODE=$enableval,
+ USE_MAINTAINER_MODE=no)
+ AC_MSG_RESULT($USE_MAINTAINER_MODE)
+ AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes)
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST(MAINT)dnl
+]
+)
+
+# Define a conditional.
+
+AC_DEFUN(AM_CONDITIONAL,
+[AC_SUBST($1_TRUE)
+AC_SUBST($1_FALSE)
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi])
+
diff -Nrup --exclude=Makefile.in --exclude=configure --exclude=CVS ../newlib-main/newlib/libc/sys/m68hc11/configure.in newlib/libc/sys/m68hc11/configure.in
--- ../newlib-main/newlib/libc/sys/m68hc11/configure.in Thu Jan 1 01:00:00 1970
+++ newlib/libc/sys/m68hc11/configure.in Sat Jul 13 15:23:34 2002
@@ -0,0 +1,12 @@
+dnl This is the newlib/libc/sys/m68hc11 configure.in file.
+dnl Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.5)
+AC_INIT(syscalls.c)
+
+dnl Can't be done in NEWLIB_CONFIGURE because that confuses automake.
+AC_CONFIG_AUX_DIR(../../../..)
+
+NEWLIB_CONFIGURE(../../..)
+
+AC_OUTPUT(Makefile)
diff -Nrup --exclude=Makefile.in --exclude=configure --exclude=CVS ../newlib-main/newlib/libc/sys/m68hc11/crt0.S newlib/libc/sys/m68hc11/crt0.S
--- ../newlib-main/newlib/libc/sys/m68hc11/crt0.S Thu Jan 1 01:00:00 1970
+++ newlib/libc/sys/m68hc11/crt0.S Sat Jul 13 15:23:34 2002
@@ -0,0 +1,69 @@
+/* Startup code for M68HC11/M68HC12.
+ * Copyright (C) 1999, 2000, 2001, 2002 Stephane Carrez (stcarrez@nerim.fr)
+ *
+ * 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.
+ */
+
+;-----------------------------------------
+; startup code
+;-----------------------------------------
+ .file "crt0.s"
+
+;;
+;;
+;; The linker concatenate the .install* sections in the following order:
+;;
+;; .install0 Setup the stack pointer
+;; .install1 Place holder for applications
+;; .install2 Optional installation of data section in memory
+;; .install3 Place holder for applications
+;; .install4 Invokes the main
+;;
+ .sect .install0,"ax",@progbits
+ .globl _start
+
+_start:
+;;
+;; At this step, the stack is not initialized and interrupts are masked.
+;; Applications only have 64 cycles to initialize some registers.
+;;
+;; To have a generic/configurable startup, initialize the stack to
+;; the end of some memory region. The _stack symbol is defined by
+;; the linker.
+;;
+ lds #_stack
+
+ .sect .install2,"ax",@progbits
+;;
+;; Call a specific initialization operation. The default is empty.
+;; It can be overriden by applications. It is intended to initialize
+;; the 68hc11 registers. Function prototype is:
+;;
+;; int __premain(void);
+;;
+ jsr __premain
+
+;;
+;;
+;;
+ .sect .install4,"ax",@progbits
+ jsr main
+fatal:
+ jsr exit
+ bra fatal
+
+;-----------------------------------------
+; end startup code
+;-----------------------------------------
+;; Force loading of data section mapping and bss clear
+ .globl __map_data_section
+ .globl __init_bss_section
+
diff -Nrup --exclude=Makefile.in --exclude=configure --exclude=CVS ../newlib-main/newlib/libc/sys/m68hc11/sci-inout.S newlib/libc/sys/m68hc11/sci-inout.S
--- ../newlib-main/newlib/libc/sys/m68hc11/sci-inout.S Thu Jan 1 01:00:00 1970
+++ newlib/libc/sys/m68hc11/sci-inout.S Sat Jul 13 15:23:34 2002
@@ -0,0 +1,134 @@
+/* M68HC11/M68HC12 serial line operations
+ * Copyright (C) 1999, 2000, 2001, 2002 Stephane Carrez (stcarrez@nerim.fr)
+ *
+ * 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.
+ */
+
+#ifdef mc68hc12
+ SC0CR1 = 0xC2
+ SC0CR2 = 0xC3
+ SC0SR1 = 0xC4
+ SC0DRL = 0xC7
+ SC0BD = 0xC0
+
+ .sect .data
+ .globl _m68hc12_ports
+_m68hc12_ports: .word 0
+
+ .sect .text
+ .globl outbyte
+;;;
+;;; int outbyte(char c);
+;;;
+;;; B : Character to send
+;;;
+outbyte:
+ bsr _sci_init
+L1:
+ ldaa SC0SR1,x
+ bge L1
+ stab SC0DRL,x
+ ldab SC0CR2,x
+ orab #0x8
+ stab SC0CR2,x
+ rts
+
+ .sect .text
+ .globl inbyte
+;;;
+;;; char inbyte(void);
+;;;
+inbyte:
+ bsr _sci_init
+ ldaa SC0SR1,x
+ bita #0x20
+ beq inbyte
+ ldab SC0CR2,x
+ rts
+
+ .globl _sci_init
+ .sect .text
+_sci_init:
+ ldx _m68hc12_ports
+ beq do_init
+ dex
+ rts
+do_init:
+ ldx #0x1
+ stx _m68hc12_ports
+ dex
+ ldd #26
+ std SC0BD,x
+ ldaa #0
+ staa SC0CR1,x
+ ldaa #0xC
+ staa SC0CR2,x
+ rts
+#else
+ BAUD = 0x2b
+ SCCR1= 0x2c
+ SCCR2= 0x2d
+ SCSR = 0x2e
+ SCDR = 0x2f
+
+ .sect .data
+ .globl _m68hc11_ports
+_m68hc11_ports: .word 0
+
+ .sect .text
+ .globl outbyte
+;;;
+;;; int outbyte(char c);
+;;;
+;;; B : Character to send
+;;;
+outbyte:
+ bsr _sci_init
+L1:
+ ldaa SCSR,x
+ bge L1
+ stab SCDR,x
+ ldab SCCR2,x
+ orab #0x8
+ stab SCCR2,x
+ rts
+
+ .sect .text
+ .globl inbyte
+;;;
+;;; char inbyte(void);
+;;;
+inbyte:
+ bsr _sci_init
+ ldaa SCSR,x
+ bita #0x20
+ beq inbyte
+ ldab SCDR,x
+ rts
+
+ .globl _sci_init
+ .sect .text
+_sci_init:
+ ldx _m68hc11_ports
+ beq do_init
+ rts
+do_init:
+ ldx #0x1000
+ stx _m68hc11_ports
+ ldaa #0x30
+ staa BAUD,x
+ clra
+ staa SCCR1,x
+ ldaa #0xC
+ staa SCCR2,x
+ rts
+
+#endif
diff -Nrup --exclude=Makefile.in --exclude=configure --exclude=CVS ../newlib-main/newlib/libc/sys/m68hc11/syscalls.c newlib/libc/sys/m68hc11/syscalls.c
--- ../newlib-main/newlib/libc/sys/m68hc11/syscalls.c Thu Jan 1 01:00:00 1970
+++ newlib/libc/sys/m68hc11/syscalls.c Sat Jul 13 15:23:34 2002
@@ -0,0 +1,152 @@
+/* pseudo system calls for M68HC11 & M68HC12.
+ * Copyright (C) 1999, 2000, 2001, 2002 Stephane Carrez (stcarrez@nerim.fr)
+ *
+ * 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 <sys/types.h>
+#include <sys/stat.h>
+#include <sys/times.h>
+#include <unistd.h>
+#include <errno.h>
+
+extern void outbyte(char c);
+extern char inbyte(void);
+
+int
+read(int file, void *p, size_t len)
+{
+ int todo;
+ char *ptr = (char*) p;
+
+ for (todo = len; todo; --todo)
+ {
+ char c = inbyte();
+
+ *ptr++ = c;
+ if (c == '\n' || c == '\r')
+ {
+ *ptr = 0;
+ break;
+ }
+ }
+
+ return(len);
+}
+
+off_t
+lseek(int file, off_t ptr, int dir)
+{
+ return 0;
+}
+
+int
+write(int file, const void *p, size_t len)
+{
+ const char *ptr = (const char*) p;
+ int todo;
+
+ for (todo = len; todo; --todo)
+ {
+ outbyte (*ptr++);
+ }
+ return(len);
+}
+
+int
+close(int file)
+{
+ return(-1);
+}
+
+void *
+sbrk(size_t incr)
+{
+ extern char _end; /* Defined by the linker */
+ static char *heap_end;
+ char *prev_heap_end;
+
+ register char *stack_ptr asm ("sp");
+
+ if (heap_end == 0)
+ {
+ heap_end = &_end;
+ }
+ prev_heap_end = heap_end;
+ if (heap_end + incr > stack_ptr)
+ {
+ write (1, "Heap and stack collision\n", 25);
+ abort ();
+ }
+ heap_end += incr;
+ return ((void*) prev_heap_end);
+}
+
+int
+isatty(int file)
+{
+ return(1);
+}
+
+int
+fstat(int file, struct stat *st)
+{
+ st->st_mode = S_IFCHR;
+ return(0);
+}
+
+int
+stat(const char *filename, struct stat *st)
+{
+ st->st_mode = S_IFCHR;
+ return(0);
+}
+
+int
+open(const char *path, int flags)
+{
+ return(0);
+}
+
+int
+getpid()
+{
+ return(1);
+}
+
+int
+kill(int pid, int sig)
+{
+ errno = EINVAL;
+ return(-1);
+}
+
+int
+link(const char *old, const char *new)
+{
+ errno = EMLINK;
+ return(-1);
+}
+
+clock_t
+times(struct tms *buf)
+{
+ return(-1);
+}
+
+int
+unlink(const char *name)
+{
+ errno = ENOENT;
+ return(-1);
+}
+
+/* end of syscalls.c */