[PATCH] FT32: add support in libgloss

Jeff Johnston jjohnstn@redhat.com
Fri Sep 4 18:44:00 GMT 2015


Patch applied.  In the future please provide a ChangeLog in the notes
for the patch here.

-- Jeff J.

----- Original Message -----
> FT32 is a new high performance 32-bit RISC core developed by FTDI for
> embedded applications.
> 
> Support for FT32 has already been added to binutils, gdb and gcc.
> This patch adds libgloss support.
> 
> I also propose to update config.sub from the gnuconfig project.
> 
> 
> Please can someone review it, and if appropriate approve it for commit?
> 
> The FSF have acknowledged receipt of FTDI's copyright assignment papers.
> 
> Thanks very much.
> 
> 
> 
> --
> James Bowman
> FTDI Open Source Liaison
> 
> 
> 
> From: James Bowman <james.bowman@ftdichip.com>
> Date: Fri, 4 Sep 2015 09:02:25 -0700
> Subject: [PATCH] libgloss FT32 support
> 
> ---
>  libgloss/configure.in      |    3 ++
>  libgloss/ft32/Makefile.in  |  129
>  ++++++++++++++++++++++++++++++++++++++++++++
>  libgloss/ft32/configure.in |   55 +++++++++++++++++++
>  libgloss/ft32/crt0.S       |   73 +++++++++++++++++++++++++
>  libgloss/ft32/fstat.c      |   30 +++++++++++
>  libgloss/ft32/getpid.c     |   25 +++++++++
>  libgloss/ft32/isatty.c     |   27 ++++++++++
>  libgloss/ft32/kill.c       |   30 +++++++++++
>  libgloss/ft32/sbrk.c       |   45 ++++++++++++++++
>  libgloss/ft32/sim-close.S  |   37 +++++++++++++
>  libgloss/ft32/sim-exit.S   |   34 ++++++++++++
>  libgloss/ft32/sim-inbyte.c |   26 +++++++++
>  libgloss/ft32/sim-lseek.S  |   32 +++++++++++
>  libgloss/ft32/sim-lseek.c  |   32 +++++++++++
>  libgloss/ft32/sim-open.S   |   39 ++++++++++++++
>  libgloss/ft32/sim-read.S   |   39 ++++++++++++++
>  libgloss/ft32/sim-time.c   |   47 ++++++++++++++++
>  libgloss/ft32/sim-unlink.S |   37 +++++++++++++
>  libgloss/ft32/sim-write.S  |   56 +++++++++++++++++++
>  libgloss/ft32/sim.ld       |   56 +++++++++++++++++++
>  libgloss/ft32/stat.c       |   30 +++++++++++
>  21 files changed, 882 insertions(+)
>  create mode 100644 libgloss/ft32/Makefile.in
>  create mode 100644 libgloss/ft32/configure.in
>  create mode 100644 libgloss/ft32/crt0.S
>  create mode 100644 libgloss/ft32/fstat.c
>  create mode 100644 libgloss/ft32/getpid.c
>  create mode 100644 libgloss/ft32/isatty.c
>  create mode 100644 libgloss/ft32/kill.c
>  create mode 100644 libgloss/ft32/sbrk.c
>  create mode 100644 libgloss/ft32/sim-close.S
>  create mode 100644 libgloss/ft32/sim-exit.S
>  create mode 100644 libgloss/ft32/sim-inbyte.c
>  create mode 100644 libgloss/ft32/sim-lseek.S
>  create mode 100644 libgloss/ft32/sim-lseek.c
>  create mode 100644 libgloss/ft32/sim-open.S
>  create mode 100644 libgloss/ft32/sim-read.S
>  create mode 100644 libgloss/ft32/sim-time.c
>  create mode 100644 libgloss/ft32/sim-unlink.S
>  create mode 100644 libgloss/ft32/sim-write.S
>  create mode 100644 libgloss/ft32/sim.ld
>  create mode 100644 libgloss/ft32/stat.c
> 
> diff --git a/libgloss/configure.in b/libgloss/configure.in
> index ab3224a..e11eb7d 100644
> --- a/libgloss/configure.in
> +++ b/libgloss/configure.in
> @@ -105,6 +105,9 @@ case "${target}" in
>    frv*-*-*)
>  	AC_CONFIG_SUBDIRS([frv])
>  	;;
> +  ft32*-*-*)
> +	AC_CONFIG_SUBDIRS([ft32])
> +	;;
>    lm32*-*-*)
>  	AC_CONFIG_SUBDIRS([lm32])
>  	;;
> diff --git a/libgloss/ft32/Makefile.in b/libgloss/ft32/Makefile.in
> new file mode 100644
> index 0000000..21f9e82
> --- /dev/null
> +++ b/libgloss/ft32/Makefile.in
> @@ -0,0 +1,129 @@
> +# Copyright (C) 2015 FTDI (support@ftdichip.com)
> +#
> +# 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.
> +
> +# Makefile for libgloss/spro. This is the board support code for the
> +# ft32 target.
> +
> +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)
> +
> +# Multilib support variables.
> +# TOP is used instead of MULTI{BUILD,SRC}TOP.
> +MULTIDIRS =
> +MULTISUBDIR =
> +MULTIDO = true
> +MULTICLEAN = true
> +
> +INSTALL = @INSTALL@
> +INSTALL_PROGRAM = @INSTALL_PROGRAM@
> +INSTALL_DATA = @INSTALL_DATA@
> +
> +SHELL = /bin/sh
> +
> +CC = @CC@
> +
> +AS = @AS@
> +AR = @AR@
> +LD = @LD@
> +RANLIB = @RANLIB@
> +AR_FLAGS = rc
> +
> +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`
> +
> +LD_SCRIPTS = ft32-elf-common.ld sim.ld
> +
> +CRT0 = crt0.o
> +SIM_BSP = libsim.a
> +SIM_OBJS = fstat.o \
> +	   getpid.o \
> +	   isatty.o \
> +	   kill.o \
> +	   sbrk.o \
> +	   sim-close.o \
> +	   sim-exit.o \
> +	   sim-inbyte.o \
> +	   sim-lseek.o \
> +	   sim-open.o \
> +	   sim-read.o \
> +	   sim-time.o \
> +	   sim-unlink.o \
> +	   sim-write.o \
> +	   stat.o
> +
> +#### Host specific Makefile fragment comes in here.
> +@host_makefile_frag@
> +
> +all: $(CRT0) $(SIM_BSP)
> +
> +$(SIM_BSP): $(SIM_OBJS)
> +	$(AR) $(ARFLAGS) $@ $?
> +	$(RANLIB) $@
> +
> +fstat.o: $(srcdir)/fstat.c
> +getpid.o: $(srcdir)/getpid.c
> +isatty.o: $(srcdir)/isatty.c
> +kill.o: $(srcdir)/kill.c
> +putnum.o: $(srcdir)/putnum.c
> +sbrk.o: $(srcdir)/sbrk.c
> +sim-close.o: $(srcdir)/sim-close.S
> +sim-exit.o: $(srcdir)/sim-exit.S
> +sim-inbyte.o: $(srcdir)/sim-inbyte.c
> +sim-lseek.o: $(srcdir)/sim-lseek.c
> +sim-open.o: $(srcdir)/sim-open.S
> +sim-read.o: $(srcdir)/sim-read.S
> +sim-time.o: $(srcdir)/sim-time.c
> +sim-unlink.o: $(srcdir)/sim-unlink.S
> +sim-write.o: $(srcdir)/sim-write.S
> +stat.o: $(srcdir)/stat.c
> +
> +install: $($(CPU)_INSTALL)
> +	$(INSTALL_DATA) $(CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(CRT0)
> +	$(INSTALL_DATA) $(SIM_BSP)
> $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(SIM_BSP)
> +	for x in ${LD_SCRIPTS}; do \
> +	  ${INSTALL_DATA} ${srcdir}/$$x $(DESTDIR)${tooldir}/lib/$$x; \
> +	done;
> +
> +clean mostlyclean:
> +	rm -f *.o *.a
> +
> +distclean maintainer-clean realclean: clean
> +	rm -f Makefile config.cache config.log config.status
> +
> +.PHONY: info dvi doc install-info clean-info
> +info doc dvi:
> +install-info:
> +clean-info:
> +
> +Makefile: Makefile.in config.status @host_makefile_frag_path@
> +	$(SHELL) config.status
> +
> +config.status: configure
> +	$(SHELL) config.status --recheck
> diff --git a/libgloss/ft32/configure.in b/libgloss/ft32/configure.in
> new file mode 100644
> index 0000000..04169f1
> --- /dev/null
> +++ b/libgloss/ft32/configure.in
> @@ -0,0 +1,55 @@
> +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 --git a/libgloss/ft32/crt0.S b/libgloss/ft32/crt0.S
> new file mode 100644
> index 0000000..bb09d65
> --- /dev/null
> +++ b/libgloss/ft32/crt0.S
> @@ -0,0 +1,73 @@
> +/* crt0.S -- startup file for FT32
> + *
> + * Copyright (c) 2015  FTDI
> + *
> + * 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.
> + */
> +
> +	.globl	__start
> +	.weak	_start
> +	.text
> +	.type	__start,@function
> +
> +__start:
> +_start:
> +
> +    jmp   truestart
> +    jmp   truestart
> +
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +    reti
> +
> +truestart:
> +	ldk.l   $sp, 0xfffc	/* set the top of stack */
> +	ldk.l   $fp,0   	/* zero fp to allow unwinders to stop */
> +
> +	/* Set argc and argv to zero */
> +	ldk.l	$r0, 0
> +	ldk.l	$r1, 0
> +
> +	sub.l   $sp,$sp,24    # room for the args to main
> +	call	main
> +	call	exit
> +
> +.Lend:
> +	.size	__start,(.Lend-__start)
> diff --git a/libgloss/ft32/fstat.c b/libgloss/ft32/fstat.c
> new file mode 100644
> index 0000000..208a5cd
> --- /dev/null
> +++ b/libgloss/ft32/fstat.c
> @@ -0,0 +1,30 @@
> +/* fstat.c -- get status of a file.
> + *
> + * Copyright (C) 2015 FTDI (support@ftdichip.com)
> + *
> + * 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/stat.h>
> +#include "glue.h"
> +
> +/*
> + * fstat -- Since we have no file system, we just return an error.
> + */
> +int
> +_DEFUN (_fstat, (fd, buf),
> +       int fd _AND
> +       struct stat *buf)
> +{
> +  buf->st_mode = S_IFCHR;	/* Always pretend to be a tty */
> +  buf->st_blksize = 0;
> +
> +  return (0);
> +}
> diff --git a/libgloss/ft32/getpid.c b/libgloss/ft32/getpid.c
> new file mode 100644
> index 0000000..b4f520a
> --- /dev/null
> +++ b/libgloss/ft32/getpid.c
> @@ -0,0 +1,25 @@
> +/* getpid.c -- get the current process id.
> + *
> + * Copyright (C) 2015 FTDI (support@ftdichip.com)
> + *
> + * 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 "glue.h"
> +
> +/*
> + * getpid -- only one process, so just return 1.
> + */
> +int
> +_DEFUN (_getpid, (),
> +	)
> +{
> +  return __MYPID;
> +}
> diff --git a/libgloss/ft32/isatty.c b/libgloss/ft32/isatty.c
> new file mode 100644
> index 0000000..449410e
> --- /dev/null
> +++ b/libgloss/ft32/isatty.c
> @@ -0,0 +1,27 @@
> +/* isatty.c -- chek the terminal device.
> + *
> + * Copyright (C) 2015 FTDI (support@ftdichip.com)
> + *
> + * 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 "glue.h"
> +
> +/*
> + * isatty -- returns 1 if connected to a terminal device,
> + *           returns 0 if not. Since we're hooked up to a
> + *           serial port, we'll say yes _AND return a 1.
> + */
> +int
> +_DEFUN (_isatty, (fd),
> +       int fd)
> +{
> +  return (1);
> +}
> diff --git a/libgloss/ft32/kill.c b/libgloss/ft32/kill.c
> new file mode 100644
> index 0000000..258785f
> --- /dev/null
> +++ b/libgloss/ft32/kill.c
> @@ -0,0 +1,30 @@
> +/* kill.c -- remove a process.
> + *
> + * Copyright (C) 2015 FTDI (support@ftdichip.com)
> + *
> + * 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 "glue.h"
> +
> +extern void _exit (int) __attribute__((__noreturn__));
> +
> +/*
> + * kill -- go out via exit...
> + */
> +int
> +_DEFUN (_kill, (pid, sig),
> +	int pid _AND
> +	int sig)
> +{
> +  if(pid == __MYPID)
> +    _exit(sig);
> +  return 0;
> +}
> diff --git a/libgloss/ft32/sbrk.c b/libgloss/ft32/sbrk.c
> new file mode 100644
> index 0000000..8e6743e
> --- /dev/null
> +++ b/libgloss/ft32/sbrk.c
> @@ -0,0 +1,45 @@
> +/* sbrk.c -- allocate memory dynamically.
> + *
> + *
> + * Copyright (C) 2015 FTDI (support@ftdichip.com)
> + *
> + * 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 "glue.h"
> +
> +char *__heap_ptr = (char *)&_end;
> +
> +/*
> + * sbrk -- changes heap size size. Get nbytes more
> + *         RAM. We just increment a pointer in what's
> + *         left of memory on the board.
> + */
> +char *
> +_sbrk (nbytes)
> +     int nbytes;
> +{
> +  char *base;
> +  char *sp;
> +  char canary;
> +
> +  if ((__heap_ptr + nbytes) < (&canary - 2000))
> +    {
> +      base = __heap_ptr;
> +      __heap_ptr += nbytes;
> +      return base;
> +    }
> +    else
> +    {
> +      errno = ENOMEM;
> +      return ((char *)-1);
> +    }
> +}
> diff --git a/libgloss/ft32/sim-close.S b/libgloss/ft32/sim-close.S
> new file mode 100644
> index 0000000..8dbd5c0
> --- /dev/null
> +++ b/libgloss/ft32/sim-close.S
> @@ -0,0 +1,37 @@
> +/*
> + * sim-close.S -- close interface for FT32 simulator
> + *
> + * Copyright (C) 2015 FTDI (support@ftdichip.com)
> + *
> + * 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 "syscall.h"
> +
> +/*
> + * Input:
> + * $r0	  -- File descriptor to close.
> + *
> + * Output:
> + * $r0	  -- 0 or -1.
> + * errno  -- Set if an error
> + */
> +
> +	.globl	_close
> +	.type	_close,@function
> +	.weak	close
> +	.text
> +_close:
> +close:
> +# 	swi	SYS_close
> +	return
> +.Lend:
> +	.size	_close,.Lend-_close
> diff --git a/libgloss/ft32/sim-exit.S b/libgloss/ft32/sim-exit.S
> new file mode 100644
> index 0000000..7e6d90a
> --- /dev/null
> +++ b/libgloss/ft32/sim-exit.S
> @@ -0,0 +1,34 @@
> +/*
> + * sim-exit.S -- _exit interface for FT32 simulator
> + *
> + * Copyright (C) 2015 FTDI (support@ftdichip.com)
> + *
> + * 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 "syscall.h"
> +
> +/*
> + * Input:
> + * $r0	-- exit value
> + *
> + * Output:
> + * none
> + */
> +
> +	.globl	_exit
> +	.type	_exit,@function
> +	.text
> +_exit:
> +	# swi	SYS_exit
> +	sta.l   0x1fffc,$r0
> +.Lend:
> +	.size	_exit,.Lend-_exit
> diff --git a/libgloss/ft32/sim-inbyte.c b/libgloss/ft32/sim-inbyte.c
> new file mode 100644
> index 0000000..9df0e1f
> --- /dev/null
> +++ b/libgloss/ft32/sim-inbyte.c
> @@ -0,0 +1,26 @@
> +/*
> + * sim-inbyte.c -- read a character from standard input.
> + *
> + * Copyright (C) 2015 FTDI (support@ftdichip.com)
> + *
> + * 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.
> + */
> +
> +int
> +inbyte ()
> +{
> +  char c;
> +
> +  if (read (0, &c, 1) <= 0)
> +    return -1;
> +
> +  return c;
> +}
> diff --git a/libgloss/ft32/sim-lseek.S b/libgloss/ft32/sim-lseek.S
> new file mode 100644
> index 0000000..2dfde16
> --- /dev/null
> +++ b/libgloss/ft32/sim-lseek.S
> @@ -0,0 +1,32 @@
> +/*
> + * sim-lseek.S -- write interface for FT32 simulator
> + *
> + * Copyright (C) 2015 FTDI (support@ftdichip.com)
> + *
> + * 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 <errno.h>
> +
> +/*
> + * lseek -- Since a simulated serial port is non-seekable, we return
> + * an error.
> + */
> +off_t
> +_DEFUN (_lseek, (fd,  offset, whence),
> +       int fd _AND
> +       off_t offset _AND
> +       int whence)
> +{
> +  errno = ESPIPE;
> +  return ((off_t)-1);
> +}
> diff --git a/libgloss/ft32/sim-lseek.c b/libgloss/ft32/sim-lseek.c
> new file mode 100644
> index 0000000..297de2b
> --- /dev/null
> +++ b/libgloss/ft32/sim-lseek.c
> @@ -0,0 +1,32 @@
> +/*
> + * sim-lseek.S -- write interface for FT32 simulator
> + *
> + * Copyright (C) 2015 FTDI (support@ftdichip.com)
> + *
> + * 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 <errno.h>
> +
> +/*
> + * lseek -- Since a simulated serial port is non-seekable, we return
> + * an error.
> + */
> +off_t
> +_DEFUN (_lseek, (fd,  offset, whence),
> +       int fd _AND
> +       off_t offset _AND
> +       int whence)
> +{
> +  /*   errno = ESPIPE; */
> +  return ((off_t)-1);
> +}
> diff --git a/libgloss/ft32/sim-open.S b/libgloss/ft32/sim-open.S
> new file mode 100644
> index 0000000..8ec4a9e
> --- /dev/null
> +++ b/libgloss/ft32/sim-open.S
> @@ -0,0 +1,39 @@
> +/*
> + * sim-open.S -- open interface for FT32 simulator
> + *
> + * Copyright (C) 2015 FTDI (support@ftdichip.com)
> + *
> + * 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 "syscall.h"
> +
> +/*
> + * Input:
> + * $r0	    -- File name to open.
> + * $r1      -- open mode.
> + * -0x12($fp) -- optionally, the permission bits to set the file to.
> + *
> + * Output:
> + * $r0	  -- file descriptor or -1.
> + * errno  -- Set if an error
> + */
> +
> +	.globl	_open
> +	.type	_open,@function
> +	.weak	open
> +	.text
> +_open:
> +open:
> +	# swi	SYS_open
> +	return
> +.Lend:
> +	.size	_open,.Lend-_open
> diff --git a/libgloss/ft32/sim-read.S b/libgloss/ft32/sim-read.S
> new file mode 100644
> index 0000000..d078de3
> --- /dev/null
> +++ b/libgloss/ft32/sim-read.S
> @@ -0,0 +1,39 @@
> +/*
> + * sim-read.S -- read interface for FT32 simulator
> + *
> + * Copyright (C) 2015 FTDI (support@ftdichip.com)
> + *
> + * 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 "syscall.h"
> +
> +/*
> + * Input:
> + * $r0	      -- File descriptor.
> + * $r1	      -- Buffer to be read into.
> + * -0x12($fp) -- Length of the buffer.
> + *
> + * Output:
> + * $r0	  -- Length read or -1.
> + * errno  -- Set if an error
> + */
> +
> +	.globl	_read
> +	.type	_read,@function
> +	.weak	read
> +	.text
> +_read:
> +read:
> +	# swi	SYS_read
> +	return
> +.Lend:
> +	.size	_read,.Lend-_read
> diff --git a/libgloss/ft32/sim-time.c b/libgloss/ft32/sim-time.c
> new file mode 100644
> index 0000000..b04c19f
> --- /dev/null
> +++ b/libgloss/ft32/sim-time.c
> @@ -0,0 +1,47 @@
> +/* sim-time.c -- stubs so clock can be linked in.
> + *
> + * Copyright (C) 2015 FTDI (support@ftdichip.com)
> + *
> + * 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 <sys/time.h>
> +#include <sys/times.h>
> +#include "glue.h"
> +
> +/*
> + * _times -- no clock, so return an error.
> + */
> +int
> +_DEFUN (_times, _times (buf),
> +	struct tms *buf)
> +{
> +  errno = EINVAL;
> +  return (-1);
> +}
> +
> +/*
> + * _gettimeofday -- implement in terms of time, which means we can't return
> the
> + * microseconds.
> + */
> +int
> +_DEFUN (_gettimeofday, _gettimeofday (tv, tz),
> +	struct timeval *tv _AND
> +	void *tzvp)
> +{
> +  struct timezone *tz = tzvp;
> +  if (tz)
> +    tz->tz_minuteswest = tz->tz_dsttime = 0;
> +
> +  tv->tv_usec = 0;
> +  tv->tv_sec = 0;
> +  return 0;
> +}
> diff --git a/libgloss/ft32/sim-unlink.S b/libgloss/ft32/sim-unlink.S
> new file mode 100644
> index 0000000..db125e2
> --- /dev/null
> +++ b/libgloss/ft32/sim-unlink.S
> @@ -0,0 +1,37 @@
> +/*
> + * sim-unlink.S -- write interface for FT32 simulator
> + *
> + * Copyright (C) 2015 FTDI (support@ftdichip.com)
> + *
> + * 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 "syscall.h"
> +
> +	.globl	_unlink
> +	.type	_unlink,@function
> +	.weak	unlink
> +	.text
> +_unlink:
> +unlink:
> +	return
> +.Lend:
> +	.size	_unlink,.Lend-_unlink
> +
> +	.globl	_link
> +	.type	_link,@function
> +	.weak	link
> +	.text
> +_link:
> +link:
> +	return
> +.Lend1:
> +	.size	_link,.Lend1-_link
> diff --git a/libgloss/ft32/sim-write.S b/libgloss/ft32/sim-write.S
> new file mode 100644
> index 0000000..68cd36d
> --- /dev/null
> +++ b/libgloss/ft32/sim-write.S
> @@ -0,0 +1,56 @@
> +/*
> + * sim-write.S -- write interface for FT32 simulator
> + *
> + * Copyright (C) 2015 FTDI (support@ftdichip.com)
> + *
> + * 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 "syscall.h"
> +
> +/*
> + * Input:
> + * $r0	    -- File descriptor.
> + * $r1	    -- String to be printed.
> + * $r2      -- Length of the string.
> + *
> + * Output:
> + * $r0	  -- Length written or -1.
> + * errno  -- Set if an error
> + */
> +
> +	.globl	_write
> +	.type	_write,@function
> +	.weak	write
> +	.text
> +_write:
> +write:
> +
> +#         LDI.l   $r1,$r0,0
> +#         STA.l   MAGIC,$r1
> +#         jmp     .f
> +#
> +# .loop:
> +#         sta.l   0x10000,$r2
> +#         add.l   $r0,$r0,1
> +# .f:
> +#         ldi.b   $r2,$r0,0
> +#         cmp.b   $r2,0
> +#         jmpc    nz,.loop
> +
> +	ldk.l   $r3,0x10000
> +	streamout.b $r3,$r1,$r2
> +	move.l  $r0,$r2
> +
> +	return
> +
> +.Lend:
> +	.size	_write,.Lend-_write
> diff --git a/libgloss/ft32/sim.ld b/libgloss/ft32/sim.ld
> new file mode 100644
> index 0000000..58de031
> --- /dev/null
> +++ b/libgloss/ft32/sim.ld
> @@ -0,0 +1,56 @@
> +OUTPUT_FORMAT("elf32-ft32")
> +OUTPUT_ARCH(ft32)
> +
> +SEARCH_DIR(.)
> +GROUP(-lsim -lc -lgcc -lsim)
> +
> +MEMORY
> +{
> +  flash     (rx)   : ORIGIN = 0, LENGTH = 256K
> +  ram       (rw!x) : ORIGIN = 0x800000, LENGTH = 64K
> +}
> +SECTIONS
> +{
> +  .text :
> +  {
> +    *(.text*)
> +    *(.strings)
> +    *(._pm*)
> +    *(.init)
> +    *(.fini)
> +     _etext = . ;
> +  }  > flash
> +  .tors :
> +  {
> +    ___ctors = . ;
> +    *(.ctors)
> +    ___ctors_end = . ;
> +    ___dtors = . ;
> +    *(.dtors)
> +    ___dtors_end = . ;
> +  } > ram
> +  .data	  : AT (ADDR (.text) + SIZEOF (.text))
> +  {
> +    *(.data)
> +    *(.rodata)
> +    *(.rodata*)
> +     _edata = . ;
> +  }  > ram
> +  .bss  SIZEOF(.data) + ADDR(.data) :
> +  {
> +     _bss_start = . ;
> +    *(.bss)
> +    *(COMMON)
> +     _end = . ;
> +  }  > ram
> +   __data_load_start = LOADADDR(.data);
> +   __data_load_end = __data_load_start + SIZEOF(.data);
> +  .stab 0 (NOLOAD) :
> +  {
> +    *(.stab)
> +  }
> +  .stabstr 0 (NOLOAD) :
> +  {
> +    *(.stabstr)
> +  }
> +}
> diff --git a/libgloss/ft32/stat.c b/libgloss/ft32/stat.c
> new file mode 100644
> index 0000000..580e2ca
> --- /dev/null
> +++ b/libgloss/ft32/stat.c
> @@ -0,0 +1,30 @@
> +/* stat.c -- Get the status of a file.
> + *
> + * Copyright (C) 2015 FTDI (support@ftdichip.com)
> + *
> + * 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/stat.h>
> +#include <errno.h>
> +#include "glue.h"
> +
> +/*
> + * stat -- Since we have no file system, we just return an error.
> + */
> +int
> +_DEFUN (_stat, (path, buf),
> +       const char *path _AND
> +       struct stat *buf)
> +{
> +  errno = EIO;
> +  return (-1);
> +}
> +
> --
> 1.7.9.5
> 
> 



More information about the Newlib mailing list