[PATCH]: Newlib port for 68hc11/68hc12
J. Johnston
jjohnstn@redhat.com
Wed Jul 17 17:06:00 GMT 2002
Stephane Carrez wrote:
>
> Hi!
>
> In October 2001, I posted a patch for 68HC11/HC12 support in Newlib.
> See: Port of Newlib/libgloss for 68HC11 and 68HC12
> http://sources.redhat.com/ml/newlib/2001/msg00523.html
>
> [PATCH]: Newlib port for 68hc11/68hc12
> http://sources.redhat.com/ml/newlib/2001/msg00524.html
>
> At that time, there was a copyright issue because I used the GNU license
> for the new files. Since then I changed that and now use a more permissive
> copyright (ie the same copyright as in other newlib files).
>
> This port is useful for gcc validation (see http://www.gnu.org/software/m68hc11/m68hc11_tests.html
> for gcc 3.0.4 validation results).
>
> Do you agree to integrate this patch in Newlib ?
>
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
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.
> Thanks,
> Stephane
>
> 2002-07-16 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 (_DOUBLE_IS_32BITS): Likewise.
> (INT_MAX, UINT_MAX): Define according to __INT_MAX__.
> (_POINTER_INT): Define to short.
> (__IEEE_BIG_ENDIAN): Define for 68HC11.
> (vfiprintf, _vfiprintf_r): Rename the low level formatting functions
> to avoid having the support for floating point (too big for 68HC11).
> * 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-main-integrate/newlib/configure.host
> --- newlib-main/newlib/configure.host Tue Jun 18 23:20:18 2002
> +++ newlib-main-integrate/newlib/configure.host Sat Jul 13 15:23:34 2002
> @@ -125,6 +125,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"
> @@ -321,6 +328,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
> ;;
> @@ -479,6 +491,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-main-integrate/newlib/libc/include/machine/ieeefp.h
> --- newlib-main/newlib/libc/include/machine/ieeefp.h Tue Jun 18 23:20:21 2002
> +++ newlib-main-integrate/newlib/libc/include/machine/ieeefp.h Sat Jul 13 15:23:34 2002
> @@ -44,6 +44,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__)
> #define __IEEE_BIG_ENDIAN
> #define __SMALL_BITFIELDS
> diff -Nrup --exclude=Makefile.in --exclude=configure --exclude=CVS newlib-main/newlib/libc/include/machine/setjmp.h newlib-main-integrate/newlib/libc/include/machine/setjmp.h
> --- newlib-main/newlib/libc/include/machine/setjmp.h Fri Jun 28 01:58:38 2002
> +++ newlib-main-integrate/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-main-integrate/newlib/libc/include/sys/config.h
> --- newlib-main/newlib/libc/include/sys/config.h Tue Jul 2 20:18:57 2002
> +++ newlib-main-integrate/newlib/libc/include/sys/config.h Sat Jul 13 15:23:34 2002
> @@ -56,6 +56,31 @@
> #endif
> #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
> +#define __IEEE_BIG_ENDIAN
> +#ifdef __HAVE_SHORT_DOUBLE__
> +# define _DOUBLE_IS_32BITS
> +#endif
> +
> +#ifdef INTEGER_ONLY
> +# define vfiprintf vfprintf
> +# define _vfiprintf_r _vfprintf_r
> +#endif
> +#ifdef FLOATING_POINT
> +# define vfprintf vffprintf
> +# define _vfprintf_r _vffprintf_r
> +#endif
> +#define vfiprintf vfprintf
> +#define fiprintf fprintf
> +#define iprintf printf
> +#define siprintf sprintf
> +#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-main-integrate/newlib/libc/machine/m68hc11/Makefile.am
> --- newlib-main/newlib/libc/machine/m68hc11/Makefile.am Thu Jan 1 01:00:00 1970
> +++ newlib-main-integrate/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-main-integrate/newlib/libc/machine/m68hc11/aclocal.m4
> --- newlib-main/newlib/libc/machine/m68hc11/aclocal.m4 Thu Jan 1 01:00:00 1970
> +++ newlib-main-integrate/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-main-integrate/newlib/libc/machine/m68hc11/configure.in
> --- newlib-main/newlib/libc/machine/m68hc11/configure.in Thu Jan 1 01:00:00 1970
> +++ newlib-main-integrate/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-main-integrate/newlib/libc/machine/m68hc11/setjmp.S
> --- newlib-main/newlib/libc/machine/m68hc11/setjmp.S Thu Jan 1 01:00:00 1970
> +++ newlib-main-integrate/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-main-integrate/newlib/libc/sys/m68hc11/Makefile.am
> --- newlib-main/newlib/libc/sys/m68hc11/Makefile.am Thu Jan 1 01:00:00 1970
> +++ newlib-main-integrate/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-main-integrate/newlib/libc/sys/m68hc11/aclocal.m4
> --- newlib-main/newlib/libc/sys/m68hc11/aclocal.m4 Thu Jan 1 01:00:00 1970
> +++ newlib-main-integrate/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-main-integrate/newlib/libc/sys/m68hc11/configure.in
> --- newlib-main/newlib/libc/sys/m68hc11/configure.in Thu Jan 1 01:00:00 1970
> +++ newlib-main-integrate/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-main-integrate/newlib/libc/sys/m68hc11/crt0.S
> --- newlib-main/newlib/libc/sys/m68hc11/crt0.S Thu Jan 1 01:00:00 1970
> +++ newlib-main-integrate/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-main-integrate/newlib/libc/sys/m68hc11/sci-inout.S
> --- newlib-main/newlib/libc/sys/m68hc11/sci-inout.S Thu Jan 1 01:00:00 1970
> +++ newlib-main-integrate/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-main-integrate/newlib/libc/sys/m68hc11/syscalls.c
> --- newlib-main/newlib/libc/sys/m68hc11/syscalls.c Thu Jan 1 01:00:00 1970
> +++ newlib-main-integrate/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 */
More information about the Newlib
mailing list