[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