From 2f2a30423446f88e283f50f699bf7cc3c8cf74b8 Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Mon, 13 May 2013 21:39:51 +0000 Subject: [newlib] * configure.host (msp430): Add. * libc/include/machine/ieeefp.h: Add MSP430 support. * libc/include/machine/setjmp.h: Likewise. * libc/include/sys/config.h: Likewise. * libc/machine/configure.in (msp430): Add. * libc/machine/configure: Regenerate. * libc/machine/msp430: New directory. [libgloss] * configure.in (msp430*-*-elf): Add. * configure: Regenerate. * msp430: New directory. --- libgloss/msp430/write.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 libgloss/msp430/write.c (limited to 'libgloss/msp430/write.c') diff --git a/libgloss/msp430/write.c b/libgloss/msp430/write.c new file mode 100644 index 000000000..0c01098f2 --- /dev/null +++ b/libgloss/msp430/write.c @@ -0,0 +1,59 @@ +/* Copyright (c) 2013 Red Hat, Inc. All rights reserved. + + This copyrighted material is made available to anyone wishing to use, modify, + copy, or redistribute it subject to the terms and conditions of the BSD + License. This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY expressed or implied, including the implied warranties + of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. A copy of this license + is available at http://www.opensource.org/licenses. Any Red Hat trademarks that + are incorporated in the source code or documentation are not subject to the BSD + License and may only be used or replicated with the express permission of + Red Hat, Inc. +*/ + +#include + +#include "cio.h" + +static int +write_chunk (int fd, char *buf, int len) +{ + __CIOBUF__.length[0] = len; + __CIOBUF__.length[1] = len >> 8; + __CIOBUF__.parms[0] = CIO_WRITE; + __CIOBUF__.parms[1] = fd; + __CIOBUF__.parms[2] = fd >> 8; + __CIOBUF__.parms[3] = len; + __CIOBUF__.parms[4] = len >> 8; + memcpy (__CIOBUF__.buf, buf, len); + + _libgloss_cio_hook (); + + return __CIOBUF__.parms[0] + __CIOBUF__.parms[1] * 256; +} + +#include + +int +write (int fd, char *buf, int len) +{ + int rv = 0; + int c; +#if 0 + if (fd == 2) + fprintf (stderr, "%.*s", buf, len); + else if (fd == 1) + printf ("%.*s", buf, len); +#endif + while (len > 0) + { + int l = (len > CIO_BUF_SIZE) ? CIO_BUF_SIZE : len; + c = write_chunk (fd, buf, l); + if (c < 0) + return c; + rv += l; + len -= l; + buf += l; + } + return c; +} -- cgit v1.2.3