[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