Ping Re: TI C6X port of newlib

Jeff Johnston jjohnstn@redhat.com
Tue Oct 12 14:24:00 GMT 2010


  Patch checked in.

-- Jeff J.

On 10/08/2010 04:05 PM, Joseph S. Myers wrote:
> On Fri, 8 Oct 2010, Bernd Schmidt wrote:
>
>> On 10/08/2010 06:38 PM, Joseph S. Myers wrote:
>>
>>>> 1. crt0.S doesn't have a license
>>>> 2. there is a National Semiconductor license in one of the files that needs
>>>>      to be mentioned in COPYING.LIBGLOSS
>>> Bernd, where did these files come from?
>> I don't recall entirely but think I copied the Blackfin crt0.S and
>> replaced the code with C6X assembler code.
>>
>> The sbrk implementation is also copied from another port.  It must have
>> been crx.
> Thanks.  In this revised patch (again, generated files not included) I've
> added the National Semiconductor notice from crx to COPYING.LIBGLOSS, and
> put the CodeSourcery notice on crt0.S since it's essentially just the
> assembly code and nothing else.
>
> 2010-10-08  Bernd Schmidt<bernds@codesourcery.com>
>              Joseph Myers<joseph@codesourcery.com>
>
> 	* COPYING.LIBGLOSS: Add National Semiconductor and CodeSourcery
> 	notices.
> 	* COPYING.NEWLIB: Add Texas Instruments notice.
>
> libgloss:
> 2010-10-08  Bernd Schmidt<bernds@codesourcery.com>
>              Joseph Myers<joseph@codesourcery.com>
>
> 	* configure.in: Handle tic6x targets.
> 	* configure: Regenerate.
> 	* tic6x/Makefile.in, tic6x/configure.in, tic6x/crt0.S,
> 	tic6x/getpid.c, tic6x/kill.c, tic6x/sbrk.c, tic6x/syscalls.c: New.
> 	* tic6x/configure: New (generated).
>
> newlib:
> 2010-10-08  Bernd Schmidt<bernds@codesourcery.com>
>              Joseph Myers<joseph@codesourcery.com>
>
> 	* configure.host: Handle tic6x targets.
> 	* libc/include/machine/ieeefp.h: Define endianness for C6X.
> 	* libc/include/machine/setjmp.h: Add __TMS320C6X__ case.
> 	* libc/machine/configure.in: Handle tic6x targets.
> 	* libc/machine/configure: Regenerate.
> 	* libc/machine/tic6x/Makefile.am, libc/machine/tic6x/configure.in,
> 	libc/machine/tic6x/setjmp.S: New.
> 	* libc/machine/tic6x/Makefile.in, libc/machine/tic6x/aclocal.m4,
> 	libc/machine/tic6x/configure: New (generated).
>
> diff -ruN newlib.orig/COPYING.LIBGLOSS newlib-c6x/COPYING.LIBGLOSS
> --- newlib.orig/COPYING.LIBGLOSS	2009-12-17 13:12:49.000000000 -0800
> +++ newlib-c6x/COPYING.LIBGLOSS	2010-10-08 12:34:50.000000000 -0700
> @@ -260,3 +260,45 @@
>   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
>   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>
> +
> +(14) - National Semiconductor Corporation
> +
> +Copyright (c) 2004 National Semiconductor Corporation
> +
> +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.
> +
> +
> +(15) - CodeSourcery, Inc. (tic6x-* targets)
> +
> +Copyright (c) 2010 CodeSourcery, Inc.
> +All rights reserved.
> +
> +Redistribution and use in source and binary forms, with or without
> +modification, are permitted provided that the following conditions are met:
> +    * Redistributions of source code must retain the above copyright
> +      notice, this list of conditions and the following disclaimer.
> +    * Redistributions in binary form must reproduce the above copyright
> +      notice, this list of conditions and the following disclaimer in the
> +      documentation and/or other materials provided with the distribution.
> +    * Neither the name of CodeSourcery nor the
> +      names of its contributors may be used to endorse or promote products
> +      derived from this software without specific prior written permission.
> +
> +THIS SOFTWARE IS PROVIDED BY CODESOURCERY, INC. ``AS IS'' AND ANY
> +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
> +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> +DISCLAIMED. IN NO EVENT SHALL CODESOURCERY BE LIABLE FOR ANY
> +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
> +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
> +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
> +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
> +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> diff -ruN newlib.orig/COPYING.NEWLIB newlib-c6x/COPYING.NEWLIB
> --- newlib.orig/COPYING.NEWLIB	2009-12-17 13:12:49.000000000 -0800
> +++ newlib-c6x/COPYING.NEWLIB	2010-10-01 16:00:04.000000000 -0700
> @@ -828,3 +828,37 @@
>   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
>   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>
> +
> +(37) Texas Instruments Incorporated (tic6x-* targets)
> +
> +Copyright (c) 1996-2010 Texas Instruments Incorporated
> +http://www.ti.com/
> +
> + Redistribution and  use in source  and binary forms, with  or without
> + modification,  are permitted provided  that the  following conditions
> + are met:
> +
> +    Redistributions  of source  code must  retain the  above copyright
> +    notice, this list of conditions and the following disclaimer.
> +
> +    Redistributions in binary form  must reproduce the above copyright
> +    notice, this  list of conditions  and the following  disclaimer in
> +    the  documentation  and/or   other  materials  provided  with  the
> +    distribution.
> +
> +    Neither the  name of Texas Instruments Incorporated  nor the names
> +    of its  contributors may  be used to  endorse or  promote products
> +    derived  from   this  software  without   specific  prior  written
> +    permission.
> +
> + THIS SOFTWARE  IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS
> + "AS IS"  AND ANY  EXPRESS OR IMPLIED  WARRANTIES, INCLUDING,  BUT NOT
> + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> + A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
> + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> + SPECIAL,  EXEMPLARY,  OR CONSEQUENTIAL  DAMAGES  (INCLUDING, BUT  NOT
> + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> + THEORY OF  LIABILITY, WHETHER IN CONTRACT, STRICT  LIABILITY, OR TORT
> + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> diff -ruN newlib.orig/libgloss/configure.in newlib-c6x/libgloss/configure.in
> --- newlib.orig/libgloss/configure.in	2010-07-23 10:52:36.000000000 -0700
> +++ newlib-c6x/libgloss/configure.in	2010-10-01 15:47:12.000000000 -0700
> @@ -129,6 +129,10 @@
>   	config_testsuite=false
>   	config_libnosys=false
>   	;;
> +  tic6x-*-*)
> +	AC_CONFIG_SUBDIRS(tic6x)
> +	config_testsuite=false
> +	;;
>     iq2000-*-*)
>   	AC_CONFIG_SUBDIRS([iq2000])
>   	;;
> diff -ruN newlib.orig/libgloss/tic6x/Makefile.in newlib-c6x/libgloss/tic6x/Makefile.in
> --- newlib.orig/libgloss/tic6x/Makefile.in	1969-12-31 16:00:00.000000000 -0800
> +++ newlib-c6x/libgloss/tic6x/Makefile.in	2010-10-01 15:47:12.000000000 -0700
> @@ -0,0 +1,126 @@
> +#
> +#
> +
> +DESTDIR =
> +VPATH = @srcdir@ @srcdir@/..
> +srcdir = @srcdir@
> +objdir = .
> +srcroot = $(srcdir)/../..
> +objroot = $(objdir)/../..
> +
> +prefix = @prefix@
> +exec_prefix = @exec_prefix@
> +
> +host_alias = @host_alias@
> +target_alias = @target_alias@
> +
> +bindir = @bindir@
> +libdir = @libdir@
> +tooldir = $(exec_prefix)/$(target_alias)
> +
> +INSTALL = @INSTALL@
> +INSTALL_PROGRAM = @INSTALL_PROGRAM@
> +INSTALL_DATA = @INSTALL_DATA@
> +
> +# Multilib support variables.
> +# TOP is used instead of MULTI{BUILD,SRC}TOP.
> +MULTIDIRS =
> +MULTISUBDIR =
> +
> +SHELL =	/bin/sh
> +
> +CC = @CC@
> +
> +AS = @AS@
> +AR = @AR@
> +LD = @LD@
> +RANLIB = @RANLIB@
> +
> +OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \
> +	then echo ${objroot}/../binutils/objdump ; \
> +	else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi`
> +OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \
> +	then echo ${objroot}/../binutils/objcopy ; \
> +	else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi`
> +
> +CFLAGS		= -g
> +SCRIPTS		=
> +
> +# Here is all of the simulator stuff
> +SIM_SCRIPTS	=
> +SIM_LDFLAGS	=
> +SIM_BSP		= libsim.a
> +SIM_CRT0	= crt0.o
> +SIM_OBJS	= sbrk.o putnum.o getpid.o kill.o syscalls.o
> +SIM_TEST	= sim-test
> +SIM_INSTALL	= install-sim
> +
> +# Host specific makefile fragment comes in here.
> +@host_makefile_frag@
> +
> +#
> +# build a test program for each target board. Just trying to get
> +# it to link is a good test, so we ignore all the errors for now.
> +#
> +all: ${SIM_CRT0} ${SIM_BSP}
> +
> +#
> +# here's where we build the board support packages for each target
> +#
> +${SIM_BSP}: ${OBJS} ${SIM_OBJS}
> +	${AR} ${ARFLAGS} ${SIM_BSP} ${SIM_OBJS} ${OBJS}
> +	${RANLIB} ${SIM_BSP}
> +
> +
> +#
> +# here's where we build the test programs for each target
> +#
> +.PHONY: test
> +test:	${SIM_TEST}
> +
> +sim-test:	sim-test.x sim-test.dis
> +
> +sim-test.x:	test.o ${SIM_CRT0} ${SIM_BSP}
> +	${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \
> +	${SIM_CRT0} test.o \
> +	-o sim-test.x ${LIBS_FOR_TARGET} -lc ${SIM_BSP}
> +
> +sim-test.dis:	sim-test.x
> +	${OBJDUMP} -d sim-test.x>  sim-test.dis
> +
> +
> +#
> +#
> +#
> +.c.S:
> +	${CC} ${CFLAGS_FOR_TARGET} -c $<
> +
> +clean mostlyclean:
> +	rm -f a.out core *.i *.o *-test *.srec *.dis *.x $(SIM_BSP)
> +
> +distclean maintainer-clean realclean: clean
> +	rm -f Makefile config.status *~
> +
> +.PHONY: install info install-info clean-info
> +install: ${SIM_INSTALL}
> +
> +install-sim:
> +	set -e;\
> +	for x in ${SIM_CRT0} ${SIM_BSP}; do\
> +	 ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x;\
> +	done
> +	for x in ${SIM_SCRIPTS}; do\
> +	 ${INSTALL_DATA} ${srcdir}/$${x} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; \
> +	done
> +
> +
> +doc:
> +info:
> +install-info:
> +clean-info:
> +
> +Makefile: Makefile.in config.status @host_makefile_frag_path@
> +	$(SHELL) config.status
> +
> +config.status: configure
> +	$(SHELL) config.status --recheck
> diff -ruN newlib.orig/libgloss/tic6x/configure.in newlib-c6x/libgloss/tic6x/configure.in
> --- newlib.orig/libgloss/tic6x/configure.in	1969-12-31 16:00:00.000000000 -0800
> +++ newlib-c6x/libgloss/tic6x/configure.in	2010-10-01 15:47:12.000000000 -0700
> @@ -0,0 +1,54 @@
> +dnl Process this file with autoconf to produce a configure script.
> +AC_PREREQ(2.59)
> +AC_INIT(crt0.S)
> +
> +if test "${enable_shared}" = "yes" ; then
> +    echo "Shared libraries not supported for cross compiling, ignored"
> +fi
> +
> +if test "$srcdir" = "." ; then
> +  if test "${with_target_subdir}" != "." ; then
> +    libgloss_topdir="${srcdir}/${with_multisrctop}../../.."
> +  else
> +    libgloss_topdir="${srcdir}/${with_multisrctop}../.."
> +  fi
> +else
> +  libgloss_topdir="${srcdir}/../.."
> +fi
> +AC_CONFIG_AUX_DIR($libgloss_topdir)
> +
> +AC_CANONICAL_SYSTEM
> +AC_ARG_PROGRAM
> +
> +AC_PROG_INSTALL
> +
> +LIB_AC_PROG_CC
> +AS=${AS-as}
> +AC_SUBST(AS)
> +AR=${AR-ar}
> +AC_SUBST(AR)
> +LD=${LD-ld}
> +AC_SUBST(LD)
> +AC_PROG_RANLIB
> +LIB_AM_PROG_AS
> +
> +host_makefile_frag=${srcdir}/../config/default.mh
> +
> +dnl We have to assign the same value to other variables because autoconf
> +dnl doesn't provide a mechanism to substitute a replacement keyword with
> +dnl arbitrary data or pathnames.
> +dnl
> +host_makefile_frag_path=$host_makefile_frag
> +AC_SUBST(host_makefile_frag_path)
> +AC_SUBST_FILE(host_makefile_frag)
> +
> +AC_CONFIG_FILES(Makefile,
> +. ${libgloss_topdir}/config-ml.in,
> +srcdir=${srcdir}
> +target=${target}
> +with_multisubdir=${with_multisubdir}
> +ac_configure_args="${ac_configure_args} --enable-multilib"
> +CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
> +libgloss_topdir=${libgloss_topdir}
> +)
> +AC_OUTPUT
> diff -ruN newlib.orig/libgloss/tic6x/crt0.S newlib-c6x/libgloss/tic6x/crt0.S
> --- newlib.orig/libgloss/tic6x/crt0.S	1969-12-31 16:00:00.000000000 -0800
> +++ newlib-c6x/libgloss/tic6x/crt0.S	2010-10-08 12:36:00.000000000 -0700
> @@ -0,0 +1,63 @@
> +/* crt0.S for the TI C6X series of processors
> +
> +   Copyright (c) 2010 CodeSourcery, Inc.
> +   All rights reserved.
> +
> +   Redistribution and use in source and binary forms, with or without
> +   modification, are permitted provided that the following conditions are met:
> +    * Redistributions of source code must retain the above copyright
> +      notice, this list of conditions and the following disclaimer.
> +    * Redistributions in binary form must reproduce the above copyright
> +      notice, this list of conditions and the following disclaimer in the
> +      documentation and/or other materials provided with the distribution.
> +    * Neither the name of CodeSourcery nor the
> +      names of its contributors may be used to endorse or promote products
> +      derived from this software without specific prior written permission.
> +
> +    THIS SOFTWARE IS PROVIDED BY CODESOURCERY, INC. ``AS IS'' AND ANY
> +    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> +    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> +    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CODESOURCERY BE LIABLE
> +    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> +    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
> +    OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
> +    BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
> +    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> +    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
> +    USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> +    DAMAGE.  */
> +
> +	.text
> +	.align 	2
> +
> +	.global	_start
> +_start:
> +	/* Start by setting up a stack */
> +	mvkl .s2	_STACK_START - 4, B15
> +	mvkh .s2	_STACK_START - 4, B15
> +	and .s2		-8, B15, B15
> +
> +	mvkl .s2	__c6xabi_DSBT_BASE, B14
> +	mvkh .s2	__c6xabi_DSBT_BASE, B14
> +
> +#ifdef __DSBT__
> +	stw .d2t2	B14, *B14
> +#endif
> +	/* Zero the memory in the .bss section.  */
> +
> +	/* Set up GOT pointer.  */
> +
> +	mvkl .s2	1f, B3
> +	mvkh .s2	1f, B3
> +	call .s2	_init
> +	nop		5
> +1:
> +
> +	mvkl .s2	1f, B3
> +	mvkh .s2	1f, B3
> +	call .s2	main
> +	nop		5
> +1:
> +
> +	b .s2		exit
> +	nop		5
> diff -ruN newlib.orig/libgloss/tic6x/getpid.c newlib-c6x/libgloss/tic6x/getpid.c
> --- newlib.orig/libgloss/tic6x/getpid.c	1969-12-31 16:00:00.000000000 -0800
> +++ newlib-c6x/libgloss/tic6x/getpid.c	2010-10-01 15:47:12.000000000 -0700
> @@ -0,0 +1,26 @@
> +/* getpid.c -- get the current process id.
> + *
> + * Copyright (c) 1995 Cygnus Support
> + *
> + * 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<_ansi.h>
> +#define __MYPID 1
> +
> +/*
> + * getpid -- only one process, so just return 1.
> + */
> +int
> +_DEFUN (getpid, (),
> +        )
> +{
> +  return __MYPID;
> +}
> diff -ruN newlib.orig/libgloss/tic6x/kill.c newlib-c6x/libgloss/tic6x/kill.c
> --- newlib.orig/libgloss/tic6x/kill.c	1969-12-31 16:00:00.000000000 -0800
> +++ newlib-c6x/libgloss/tic6x/kill.c	2010-10-01 15:47:12.000000000 -0700
> @@ -0,0 +1,29 @@
> +/* kill.c -- remove a process.
> + *
> + * Copyright (c) 1995 Cygnus Support
> + *
> + * 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<_ansi.h>
> +#define __MYPID 1
> +
> +/*
> + * kill -- go out via exit...
> + */
> +int
> +_DEFUN (kill, (pid, sig),
> +        int pid _AND
> +        int sig)
> +{
> +  if(pid == __MYPID)
> +    _exit(sig);
> +  return 0;
> +}
> diff -ruN newlib.orig/libgloss/tic6x/sbrk.c newlib-c6x/libgloss/tic6x/sbrk.c
> --- newlib.orig/libgloss/tic6x/sbrk.c	1969-12-31 16:00:00.000000000 -0800
> +++ newlib-c6x/libgloss/tic6x/sbrk.c	2010-10-01 15:47:12.000000000 -0700
> @@ -0,0 +1,59 @@
> +/* sbrk.c -- Implementation of the low-level sbrk() routine
> + *
> + * Copyright (c) 2004 National Semiconductor Corporation
> + *
> + * The authors hereby grant permission to use, copy, modify, distribute,
> + * and license this software and its documentation for any purpose, provided
> + * that existing copyright notices are retained in all copies and that this
> + * notice is included verbatim in any distributions. No written agreement,
> + * license, or royalty fee is required for any of the authorized uses.
> + * Modifications to this software may be copyrighted by their authors
> + * and need not follow the licensing terms described here, provided that
> + * the new terms are clearly indicated on the first page of each file where
> + * they apply.
> + */
> +
> +#include<errno.h>
> +#include<stddef.h>  /* where ptrdiff_t is defined */
> +#include<stdlib.h>
> +
> +/* Start of the heap.  */
> +extern const char _HEAP_START __attribute__((section(".heap")));
> +/* End of the heap (maximum value of heap_ptr).  */
> +extern const char _HEAP_MAX __attribute__((section(".heap")));
> +
> +/* Extend heap space by size bytes.
> +   Return start of new space allocated, or -1 for errors
> +   Error cases:
> +    1. Allocation is not within heap range */
> +
> +void * sbrk (ptrdiff_t size)
> +{
> +  /*
> +  * The following two memory locations should be defined in the linker script file
> +  */
> +
> +  static const char * heap_ptr;  /* pointer to head of heap */
> +  const char * old_heap_ptr;
> +  static unsigned char init_sbrk = 0;
> +
> +  /* heap_ptr is initialized to HEAP_START */
> +  if (init_sbrk == 0)
> +  {
> +    heap_ptr =&_HEAP_START;
> +    init_sbrk = 1;
> +  }
> +
> +  old_heap_ptr = heap_ptr;
> +
> +  if ((heap_ptr + size)>  &_HEAP_MAX)
> +  {
> +    /* top of heap is bigger than _HEAP_MAX */
> +    errno = ENOMEM;
> +    return (void *) -1;
> +  }
> +
> +  /* success: update heap_ptr and return previous value */
> +  heap_ptr += size;
> +  return (void *)old_heap_ptr;
> +}
> diff -ruN newlib.orig/libgloss/tic6x/syscalls.c newlib-c6x/libgloss/tic6x/syscalls.c
> --- newlib.orig/libgloss/tic6x/syscalls.c	1969-12-31 16:00:00.000000000 -0800
> +++ newlib-c6x/libgloss/tic6x/syscalls.c	2010-10-01 15:47:12.000000000 -0700
> @@ -0,0 +1,361 @@
> +/* Copyright (c) 2010 CodeSourcery, Inc.
> +   All rights reserved.
> +
> +   Redistribution and use in source and binary forms, with or without
> +   modification, are permitted provided that the following conditions are met:
> +    * Redistributions of source code must retain the above copyright
> +      notice, this list of conditions and the following disclaimer.
> +    * Redistributions in binary form must reproduce the above copyright
> +      notice, this list of conditions and the following disclaimer in the
> +      documentation and/or other materials provided with the distribution.
> +    * Neither the name of CodeSourcery nor the
> +      names of its contributors may be used to endorse or promote products
> +      derived from this software without specific prior written permission.
> +
> +    THIS SOFTWARE IS PROVIDED BY CODESOURCERY, INC. ``AS IS'' AND ANY
> +    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> +    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> +    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CODESOURCERY BE LIABLE
> +    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> +    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
> +    OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
> +    BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
> +    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> +    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
> +    USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> +    DAMAGE.  */
> +
> +#include<stdio.h>
> +#include<string.h>
> +#include<time.h>
> +#include<sys/time.h>
> +#include<sys/stat.h>
> +#include<errno.h>
> +
> +#define _DTOPEN 0xf0
> +#define _DTCLOSE 0xf1
> +#define _DTREAD 0xf2
> +#define _DTWRITE 0xf3
> +#define _DTLSEEK 0xf4
> +#define _DTUNLINK 0xf5
> +#define _DTGETENV 0xf6
> +#define _DTRENAME 0xf7
> +#define _DTGETTIME 0xf8
> +#define _DTGETCLK 0xf9
> +#define _DTSYNC 0xff
> +
> +#define CIOBUFSIZ (BUFSIZ + 32)
> +
> +struct __attribute__((packed)) cio_open_to_host
> +{
> +  /* Suggested file descriptor (little endian).  */
> +  short fd;
> +  /* Flags (little endian).  */
> +  short flags;
> +};
> +
> +struct __attribute__((packed)) cio_open_from_host
> +{
> +  /* File descriptor (little endian).  */
> +  short fd;
> +};
> +
> +struct __attribute__((packed)) cio_close_to_host
> +{
> +  /* File descriptor (little endian).  */
> +  short fd;
> +};
> +
> +struct __attribute__((packed)) cio_close_from_host
> +{
> +  /* Result (little endian).  */
> +  short result;
> +};
> +
> +struct __attribute__((packed)) cio_read_to_host
> +{
> +  /* File descriptor (little endian).  */
> +  short fd;
> +  /* Length (little endian).  */
> +  short length;
> +};
> +
> +struct __attribute__((packed)) cio_read_from_host
> +{
> +  /* Result (little endian).  */
> +  short result;
> +};
> +
> +struct __attribute__((packed)) cio_write_to_host
> +{
> +  /* File descriptor (little endian).  */
> +  short fd;
> +  /* Length (little endian).  */
> +  short length;
> +};
> +
> +struct __attribute__((packed)) cio_write_from_host
> +{
> +  /* Result (little endian).  */
> +  short result;
> +};
> +
> +struct __attribute__((packed)) cio_lseek_to_host
> +{
> +  /* File descriptor (little endian).  */
> +  short fd;
> +  /* Offset (little endian).  */
> +  int offset;
> +  /* Whence (little endian).  */
> +  short whence;
> +};
> +
> +struct __attribute__((packed)) cio_lseek_from_host
> +{
> +  /* Result (little endian).  */
> +  int result;
> +};
> +
> +struct __attribute__((packed)) cio_unlink_to_host
> +{
> +  /* Empty.  */
> +};
> +
> +struct __attribute__((packed)) cio_unlink_from_host
> +{
> +  /* Result (little endian).  */
> +  short result;
> +};
> +
> +struct __attribute__((packed)) cio_rename_to_host
> +{
> +  /* Empty.  */
> +};
> +
> +struct __attribute__((packed)) cio_rename_from_host
> +{
> +  /* Result (little endian).  */
> +  short result;
> +};
> +
> +struct __attribute__((packed)) cio_gettime_to_host
> +{
> +  /* Empty.  */
> +};
> +
> +struct __attribute__((packed)) cio_gettime_from_host
> +{
> +  /* Time (little endian).  */
> +  int time;
> +};
> +
> +struct __attribute__((packed)) cio_to_host
> +{
> +  /* Data length (target endian).  */
> +  unsigned int length;
> +  /* Command.  */
> +  unsigned char command;
> +  /* Parameters.  */
> +  union
> +  {
> +    unsigned char buf[8];
> +    struct cio_open_to_host open;
> +    struct cio_close_to_host close;
> +    struct cio_read_to_host read;
> +    struct cio_write_to_host write;
> +    struct cio_lseek_to_host lseek;
> +    struct cio_unlink_to_host unlink;
> +    struct cio_rename_to_host rename;
> +    struct cio_gettime_to_host gettime;
> +  } parms;
> +  /* Variable-length data.  */
> +  unsigned char data[];
> +};
> +
> +struct __attribute__((packed)) cio_from_host
> +{
> +  /* Length (target endian).  */
> +  unsigned int length;
> +  /* Parameters.  */
> +  union
> +  {
> +    unsigned char buf[8];
> +    struct cio_open_from_host open;
> +    struct cio_close_from_host close;
> +    struct cio_read_from_host read;
> +    struct cio_write_from_host write;
> +    struct cio_lseek_from_host lseek;
> +    struct cio_unlink_from_host unlink;
> +    struct cio_rename_from_host rename;
> +    struct cio_gettime_from_host gettime;
> +  } parms;
> +  /* Data.  */
> +  unsigned char data[];
> +};
> +
> +union
> +{
> +  unsigned char buf[CIOBUFSIZ];
> +  int align;
> +  union
> +  {
> +    struct cio_to_host to_host;
> +    struct cio_from_host from_host;
> +  } u;
> +} _CIOBUF_ __attribute__((section(".cio")));
> +
> +#ifdef _BIG_ENDIAN
> +#define SWAPSHORT(s)	((short)((((s)&  0xff)<<  8) | (((s)&  0xff00)>>  8)))
> +#define SWAPINT(i)	(__builtin_bswap32 (i))
> +#else
> +#define SWAPSHORT(s)	(s)
> +#define SWAPINT(i)	(i)
> +#endif
> +
> +static void __attribute__((noinline))
> +do_semi_call (void)
> +{
> +  asm volatile (".globl C$$IO$$\nnop\nC$$IO$$:nop" : "+m" (_CIOBUF_));
> +}
> +
> +static inline void
> +semi_call_wrapper (unsigned char command, const char *data,
> +		   unsigned int length)
> +{
> +  _CIOBUF_.u.to_host.length = length;
> +  _CIOBUF_.u.to_host.command = command;
> +  if (data != NULL)
> +    memcpy (_CIOBUF_.u.to_host.data, data, length);
> +  do_semi_call ();
> +}
> +
> +static inline void
> +semi_call_wrapper2 (unsigned char command, const char *data1,
> +		    unsigned int length1, const char *data2,
> +		    unsigned int length2)
> +{
> +  _CIOBUF_.u.to_host.length = length1 + length2;
> +  _CIOBUF_.u.to_host.command = command;
> +  if (data1 != NULL)
> +    memcpy (_CIOBUF_.u.to_host.data, data1, length1);
> +  if (data2 != NULL)
> +    memcpy (_CIOBUF_.u.to_host.data + length1, data2, length2);
> +  do_semi_call ();
> +}
> +
> +void
> +_exit (int status)
> +{
> +  /* The semihosting interface appears to provide no way to return an
> +     exit status.  */
> +  asm volatile (".globl C$$EXIT\nnop\nC$$EXIT:nop");
> +}
> +
> +int
> +open (const char *path, int flags, ...)
> +{
> +  /* ??? It's not clear what the suggested fd is for.  */
> +  static short suggest_fd = 3;
> +  short ret_fd;
> +  ++suggest_fd;
> +  _CIOBUF_.u.to_host.parms.open.fd = SWAPSHORT (suggest_fd);
> +  _CIOBUF_.u.to_host.parms.open.flags = SWAPSHORT (flags);
> +  semi_call_wrapper (_DTOPEN, path, strlen (path) + 1);
> +  ret_fd = SWAPSHORT (_CIOBUF_.u.from_host.parms.open.fd);
> +  if (ret_fd == -1)
> +    return -1;
> +  return suggest_fd;
> +}
> +
> +int
> +close (int fd)
> +{
> +  _CIOBUF_.u.to_host.parms.close.fd = SWAPSHORT (fd);
> +  semi_call_wrapper (_DTCLOSE, NULL, 0);
> +  return SWAPSHORT (_CIOBUF_.u.from_host.parms.close.result);
> +}
> +
> +int
> +read (int fd, char *ptr, int len)
> +{
> +  if (len>  BUFSIZ)
> +    len = BUFSIZ;
> +  _CIOBUF_.u.to_host.parms.read.fd = SWAPSHORT (fd);
> +  _CIOBUF_.u.to_host.parms.read.length = SWAPSHORT (len);
> +  semi_call_wrapper (_DTREAD, NULL, 0);
> +  memcpy (ptr, _CIOBUF_.u.from_host.data, _CIOBUF_.u.from_host.length);
> +  return SWAPSHORT (_CIOBUF_.u.from_host.parms.read.result);
> +}
> +
> +int
> +write (int fd, char *ptr, int len)
> +{
> +  if (len>  BUFSIZ)
> +    len = BUFSIZ;
> +  _CIOBUF_.u.to_host.parms.write.fd = SWAPSHORT (fd);
> +  _CIOBUF_.u.to_host.parms.write.length = SWAPSHORT (len);
> +  semi_call_wrapper (_DTWRITE, ptr, len);
> +  return SWAPSHORT (_CIOBUF_.u.from_host.parms.write.result);
> +}
> +
> +int
> +lseek (int fd, int offset, int whence)
> +{
> +  _CIOBUF_.u.to_host.parms.lseek.fd = SWAPSHORT (fd);
> +  _CIOBUF_.u.to_host.parms.lseek.offset = SWAPINT (offset);
> +  _CIOBUF_.u.to_host.parms.lseek.whence = SWAPSHORT (whence);
> +  semi_call_wrapper (_DTLSEEK, NULL, 0);
> +  return SWAPINT (_CIOBUF_.u.from_host.parms.lseek.result);
> +}
> +
> +int
> +unlink (const char *path)
> +{
> +  semi_call_wrapper (_DTUNLINK, path, strlen (path) + 1);
> +  return SWAPSHORT (_CIOBUF_.u.from_host.parms.unlink.result);
> +}
> +
> +int
> +rename (const char *oldpath, const char *newpath)
> +{
> +  semi_call_wrapper2 (_DTRENAME, oldpath, strlen (oldpath) + 1,
> +		      newpath, strlen (newpath) + 1);
> +  return SWAPSHORT (_CIOBUF_.u.from_host.parms.rename.result);
> +}
> +
> +int
> +gettimeofday (struct timeval *tp, void *tzvp)
> +{
> +  struct timezone *tzp = tzvp;
> +
> +  if (tp)
> +    {
> +      semi_call_wrapper (_DTGETTIME, NULL, 0);
> +      tp->tv_sec = SWAPINT (_CIOBUF_.u.from_host.parms.gettime.time);
> +      tp->tv_usec = 0;
> +    }
> +
> +  if (tzp)
> +    {
> +      tzp->tz_minuteswest = 0;
> +      tzp->tz_dsttime = 0;
> +    }
> +
> +  return 0;
> +}
> +
> +int
> +isatty (int file __attribute__((unused)))
> +{
> +  errno = ENOSYS;
> +  return 0;
> +}
> +
> +int
> +fstat (int fd, struct stat *buf)
> +{
> +  buf->st_mode = S_IFCHR;	/* Always pretend to be a tty */
> +  buf->st_blksize = 0;
> +
> +  return (0);
> +}
> diff -ruN newlib.orig/newlib/configure.host newlib-c6x/newlib/configure.host
> --- newlib.orig/newlib/configure.host	2010-07-23 11:11:26.000000000 -0700
> +++ newlib-c6x/newlib/configure.host	2010-10-01 15:47:12.000000000 -0700
> @@ -249,6 +249,9 @@
>     tic4x|c4x)
>   	machine_dir=tic4x
>   	;;
> +  tic6x)
> +	machine_dir=tic6x
> +	;;
>     tic80*)
>   	machine_dir=tic80
>   	;;
> @@ -496,6 +499,10 @@
>   	  have_crt0="no"
>   	fi
>   	;;
> +  tic6x*)
> +	newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
> +	have_crt0="no"
> +	;;
>     tic80*)
>   	sys_dir=tic80
>   	;;
> @@ -762,6 +769,9 @@
>   	  newlib_cflags="${newlib_cflags} -DARM_RDI_MONITOR"
>   	fi
>   	;;
> +  tic6x*)
> +	syscall_dir=
> +	;;
>     tic80*)
>   	syscall_dir=syscalls
>   	;;
> diff -ruN newlib.orig/newlib/libc/include/machine/ieeefp.h newlib-c6x/newlib/libc/include/machine/ieeefp.h
> --- newlib.orig/newlib/libc/include/machine/ieeefp.h	2010-06-18 09:26:25.000000000 -0700
> +++ newlib-c6x/newlib/libc/include/machine/ieeefp.h	2010-10-01 15:47:12.000000000 -0700
> @@ -166,6 +166,14 @@
>   #define _DOUBLE_IS_32BITS
>   #endif
>
> +#ifdef __TMS320C6X__
> +#ifdef _BIG_ENDIAN
> +#define __IEEE_BIG_ENDIAN
> +#else
> +#define __IEEE_LITTLE_ENDIAN
> +#endif
> +#endif
> +
>   #ifdef __TIC80__
>   #define __IEEE_LITTLE_ENDIAN
>   #endif
> diff -ruN newlib.orig/newlib/libc/include/machine/setjmp.h newlib-c6x/newlib/libc/include/machine/setjmp.h
> --- newlib.orig/newlib/libc/include/machine/setjmp.h	2009-12-17 11:24:22.000000000 -0800
> +++ newlib-c6x/newlib/libc/include/machine/setjmp.h	2010-10-01 15:47:12.000000000 -0700
> @@ -174,6 +174,10 @@
>   #define _JBLEN 9
>   #endif
>
> +#ifdef __TMS320C6X__
> +#define _JBLEN 13
> +#endif
> +
>   #ifdef __TIC80__
>   #define _JBLEN 13
>   #endif
> diff -ruN newlib.orig/newlib/libc/machine/configure.in newlib-c6x/newlib/libc/machine/configure.in
> --- newlib.orig/newlib/libc/machine/configure.in	2010-02-24 12:59:48.000000000 -0800
> +++ newlib-c6x/newlib/libc/machine/configure.in	2010-10-01 15:47:12.000000000 -0700
> @@ -58,6 +58,7 @@
>   	sparc) AC_CONFIG_SUBDIRS(sparc) ;;
>   	spu) AC_CONFIG_SUBDIRS(spu) ;;
>   	tic4x) AC_CONFIG_SUBDIRS(tic4x) ;;
> +	tic6x) AC_CONFIG_SUBDIRS(tic6x) ;;
>   	tic80) AC_CONFIG_SUBDIRS(tic80) ;;
>   	v850) AC_CONFIG_SUBDIRS(v850) ;;
>   	w65) AC_CONFIG_SUBDIRS(w65) ;;
> diff -ruN newlib.orig/newlib/libc/machine/tic6x/Makefile.am newlib-c6x/newlib/libc/machine/tic6x/Makefile.am
> --- newlib.orig/newlib/libc/machine/tic6x/Makefile.am	1969-12-31 16:00:00.000000000 -0800
> +++ newlib-c6x/newlib/libc/machine/tic6x/Makefile.am	2010-10-01 15:47:12.000000000 -0700
> @@ -0,0 +1,16 @@
> +## Process this file with automake to generate Makefile.in
> +
> +AUTOMAKE_OPTIONS = cygnus
> +
> +INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
> +
> +AM_CCASFLAGS = $(INCLUDES)
> +
> +noinst_LIBRARIES = lib.a
> +
> +lib_a_SOURCES = setjmp.S
> +lib_a_CCASFLAGS=$(AM_CCASFLAGS)
> +lib_a_CFLAGS=$(AM_CFLAGS)
> +
> +ACLOCAL_AMFLAGS = -I ../../.. -I ../../../..
> +CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
> diff -ruN newlib.orig/newlib/libc/machine/tic6x/configure.in newlib-c6x/newlib/libc/machine/tic6x/configure.in
> --- newlib.orig/newlib/libc/machine/tic6x/configure.in	1969-12-31 16:00:00.000000000 -0800
> +++ newlib-c6x/newlib/libc/machine/tic6x/configure.in	2010-10-01 15:47:12.000000000 -0700
> @@ -0,0 +1,14 @@
> +dnl This is the newlib/libc/machine/tic6x configure.in file.
> +dnl Process this file with autoconf to produce a configure script.
> +
> +AC_PREREQ(2.59)
> +AC_INIT([newlib],[NEWLIB_VERSION])
> +AC_CONFIG_SRCDIR([setjmp.S])
> +
> +dnl Can't be done in NEWLIB_CONFIGURE because that confuses automake.
> +AC_CONFIG_AUX_DIR(../../../..)
> +
> +NEWLIB_CONFIGURE(../../..)
> +
> +AC_CONFIG_FILES([Makefile])
> +AC_OUTPUT
> diff -ruN newlib.orig/newlib/libc/machine/tic6x/setjmp.S newlib-c6x/newlib/libc/machine/tic6x/setjmp.S
> --- newlib.orig/newlib/libc/machine/tic6x/setjmp.S	1969-12-31 16:00:00.000000000 -0800
> +++ newlib-c6x/newlib/libc/machine/tic6x/setjmp.S	2010-10-01 15:47:12.000000000 -0700
> @@ -0,0 +1,96 @@
> +;******************************************************************************
> +;* SETJMP  v7.2.0I10181                                                       *
> +;*                                                                            *
> +;* Copyright (c) 1996-2010 Texas Instruments Incorporated                     *
> +;* http://www.ti.com/                                                         *
> +;*                                                                            *
> +;*  Redistribution and  use in source  and binary forms, with  or without     *
> +;*  modification,  are permitted provided  that the  following conditions     *
> +;*  are met:                                                                  *
> +;*                                                                            *
> +;*     Redistributions  of source  code must  retain the  above copyright     *
> +;*     notice, this list of conditions and the following disclaimer.          *
> +;*                                                                            *
> +;*     Redistributions in binary form  must reproduce the above copyright     *
> +;*     notice, this  list of conditions  and the following  disclaimer in     *
> +;*     the  documentation  and/or   other  materials  provided  with  the     *
> +;*     distribution.                                                          *
> +;*                                                                            *
> +;*     Neither the  name of Texas Instruments Incorporated  nor the names     *
> +;*     of its  contributors may  be used to  endorse or  promote products     *
> +;*     derived  from   this  software  without   specific  prior  written     *
> +;*     permission.                                                            *
> +;*                                                                            *
> +;*  THIS SOFTWARE  IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS     *
> +;*  "AS IS"  AND ANY  EXPRESS OR IMPLIED  WARRANTIES, INCLUDING,  BUT NOT     *
> +;*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR     *
> +;*  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT     *
> +;*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,     *
> +;*  SPECIAL,  EXEMPLARY,  OR CONSEQUENTIAL  DAMAGES  (INCLUDING, BUT  NOT     *
> +;*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,     *
> +;*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY     *
> +;*  THEORY OF  LIABILITY, WHETHER IN CONTRACT, STRICT  LIABILITY, OR TORT     *
> +;*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE     *
> +;*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.      *
> +;*                                                                            *
> +;******************************************************************************
> +
> +.text
> +.globl setjmp
> +.type setjmp,%function
> +setjmp:
> +	MV .L2X    A4, B4
> +||	STW .D1T2  B3, *+A4(48)
> +
> +	STW .D1T1  A10, *+A4(0)
> +||	STW .D2T2  B10, *+B4(4)
> +||	RET .S2    B3
> +
> +	STW .D1T1  A11, *+A4(8)
> +||	STW .D2T2  B11, *+B4(12)
> +
> +	STW .D1T1  A12, *+A4(16)
> +||	STW .D2T2  B12, *+B4(20)
> +
> +	STW .D1T1  A13, *+A4(24)
> +||	STW .D2T2  B13, *+B4(28)
> +
> +	STW .D1T1  A14, *+A4(32)
> +||	STW .D2T2  B14, *+B4(36)
> +
> +	STW .D1T1  A15, *+A4(40)
> +||	STW .D2T2  B15, *+B4(44)
> +||	ZERO .S1   A4
> +.size setjmp, . - setjmp
> +
> +.globl longjmp
> +.type longjmp,%function
> +longjmp:
> +	 LDW .D1T1  *+A4(48), A3
> +
> +	 MV .L2X    A4, B6
> +||	 MV .S1     A4, A6
> +||	 MV .D2     B4, B2
> +
> +	 LDW .D1T1  *+A6(0), A10
> +||	 LDW .D2T2  *+B6(4), B10
> +|| [B2]  MV .L1X    B4, A4
> +|| [!B2] MVK .S1    1, A4
> +
> +	 LDW .D1T1  *+A6(8), A11
> +||	 LDW .D2T2  *+B6(12), B11
> +
> +	 LDW .D1T1  *+A6(16), A12
> +||	 LDW .D2T2  *+B6(20), B12
> +
> +	 LDW .D1T1  *+A6(24), A13
> +||	 LDW .D2T2  *+B6(28), B13
> +
> +	 LDW .D1T1  *+A6(32), A14
> +||	 LDW .D2T2  *+B6(36), B14
> +
> +	 LDW .D1T1  *+A6(40), A15
> +||	 LDW .D2T2  *+B6(44), B15
> +||	 RET .S2X   A3
> +	 NOP    5
> +.size longjmp, . - longjmp
>



More information about the Newlib mailing list