diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/.gitignore b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..a0810c1619be3d5c2b6f21c54002c960b5ff871c
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/.gitignore
@@ -0,0 +1,16 @@
+downloaded
+objdir
+newlib-obj
+lib
+gcc
+dist
+log
+binutils-*
+gcc-*
+gdb-*
+gmp-*
+mpc-*
+mpfr-*
+newlib-*
+expat-*
+lpc21isp.c
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/Readme.txt b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/Readme.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c4cb758c1c358fb75f29a3c7e8ad314eacb19be9
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/Readme.txt
@@ -0,0 +1,79 @@
+This is the readme for installing the arm-miosix-eabi-gcc compiler,
+required to build Miosix.
+Currently this can only be done on Linux, even when compiling a
+compiler that will work for Windows.
+===================================================================
+
+
+Step 1
+------
+Copy this folder in a path without spaces, or compiling will fail.
+Example:
+/home/foo/temp                          OK
+/home/foo/directory with spaces/temp    NO!!
+
+
+Step 2
+------
+Install the following dependencies:
+gcc, g++, make, ncurses, byacc, flex, texinfo, patch, tar, unzip, lzip, libelf perl libexpat
+
+For example, for Ubuntu/Kubuntu open a shell and type:
+sudo apt-get install gcc g++ make libncurses5-dev byacc flex texinfo patch tar unzip lzip libelf-dev perl libexpat1-dev
+
+While on Fedora:
+sudo yum intall gcc gcc-c++ make ncurses-devel byacc flex texinfo patch tar unzip lzip elfutils-libelf-devel perl libexpat-devel
+
+Note: these scripts require "sudo" unless you want to intall the compiler locally.
+If you use a distro like Fedora where sudo is not enabled by default, use "visudo" to enable sudo for your account.
+
+Step 3
+------
+Download the the required sources with the download script:
+
+./download.sh
+
+
+Step 4
+------
+After meeting these prerequisites, install:
+
+./install-script.sh -j`nproc`
+./cleanup.sh
+
+Both scripts will prompt for root password at some point. It is normal,
+since they need to write in /opt and /usr/bin.
+The cleanup script won't remove the compressed files downloaded with the
+download script. You might want to do so manually to save space on your disk.
+
+
+Step 5
+------
+Test the compiler by typing in a shell
+
+arm-miosix-eabi-gcc -v
+
+If you get something like
+
+bash: arm-miosix-eabi-gcc: command not found
+
+it means something did not work.
+
+
+Step 6
+------
+If required, also install OpenOCD for in circuit debugging.
+There are no scripts for doing that, since it is rather independent on the
+gcc version. On many distros it is also available thrugh package managers,
+for example on Ubuntu/Kubuntu you can install it with
+
+sudo apt-get install openocd
+
+Uninstalling the compiler
+=========================
+In case you need to uninstall the compiler (perhaps because you need to install
+an upgraded version as part of a new Miosix release) you can run the
+
+./uninstall.sh
+
+script.
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/TODO b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/TODO
new file mode 100644
index 0000000000000000000000000000000000000000..22aab9e84d0087a5cfb70b5d367af6b70e71edcf
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/TODO
@@ -0,0 +1,86 @@
+
+Add libsyscalls to the compiler and have gcc link with it be default by
+creating a specs file, remove stubs.c in newlib. Also, build newlib without
+libnosys and the other unused stub libraries.
+
+Reduce MAXNAMLEN in newlib from 1024 to 256, it is used to allocate a buffer
+on the stack in newlib/libc/posix/execvp.c
+
+Make ino_t a long long, to support, e.g, greater than 128GByte SD cards.
+Would require changes to the filesystems meant to support very large disks, such
+as fat32 too.
+
+Fix newlib so that the lstat syscall function prototype is made available,
+and maybe add prototype for _lstat_r too
+
+Update sys/lock.h make pthread_mutex_t compatible with future decisions to
+replace the custom list with IntrusiveList.
+Update _pthreadtypes.h removing the forward declaration of WaitingList and
+change pthread_cond_t to be two opaque pointers, comment that it should have
+a memory layout compatible with IntrusiveList.
+
+In libstdc++ header condition_variable the __wait_until_impl checks for timeout
+in this way:
+__gthread_cond_timedwait(&_M_cond, __lock.mutex()->native_handle(), &__ts);
+return (__clock_t::now() < __atime ? cv_status::no_timeout : cv_status::timeout);
+use the return value of pthread_cond_timedwait instead to optimize code
+
+In libstdc++ header condition_variable condition_variable::wait_for calls both clock_gettime(CLOCK_REALTIME... and clock_gettime(CLOCK_MONOTONIC...
+This is not needed as pthread_cond_timedwait in Miosix refuses to follow the
+(broken) standard on purpose and accepts the timeout directly in terms of
+CLOCK_MONOTONIC.
+defiitions are in time.h, CLOCK_REALTIME is 1, wile CLOCK_MONOTONIC is 4
+Some test code:
+
+#include <cstdio>
+#include <cstring>
+#include <chrono>
+#include <thread>
+#include <mutex>
+#include <condition_variable>
+#include "miosix.h"
+
+using namespace std;
+using namespace std::chrono;
+using namespace miosix;
+
+mutex t25_m1;
+condition_variable t25_c1;
+
+void fail(const char *s) { iprintf("Fail %s\n",s); for(;;) ; }
+
+int main()
+{
+    {
+        unique_lock<mutex> l(t25_m1);
+        auto a=chrono::steady_clock::now().time_since_epoch().count();
+        if(t25_c1.wait_for(l,10ms)!=cv_status::timeout) fail("timedwait (1)");
+        auto b=chrono::steady_clock::now().time_since_epoch().count();
+        //iprintf("delta=%lld\n",b-a-10000000);
+        if(llabs(b-a-10000000)>200000) fail("timedwait (2)");
+    }
+    {
+        unique_lock<mutex> l(t25_m1);
+        auto start=chrono::steady_clock::now();
+        auto a=start.time_since_epoch().count();
+        if(t25_c1.wait_until(l,start+10ms)!=cv_status::timeout) fail("timedwait (3)");
+        auto b=chrono::steady_clock::now().time_since_epoch().count();
+        //iprintf("delta=%lld\n",b-a-10000000);
+        if(llabs(b-a-10000000)>200000) fail("timedwait (4)");
+    }
+    {
+        thread t([]{
+            this_thread::sleep_for(30ms);
+            t25_c1.notify_one();
+        });
+        auto a=chrono::steady_clock::now().time_since_epoch().count();
+        unique_lock<mutex> l(t25_m1);
+        if(t25_c1.wait_for(l,100ms)!=cv_status::no_timeout) fail("timedwait (5)");
+        auto b=chrono::steady_clock::now().time_since_epoch().count();
+        //iprintf("delta=%lld\n",b-a-30000000);
+        if(llabs(b-a-30000000)>500000) fail("timedwait (6)");
+        t.join();
+    }
+
+    for(;;) ;
+}
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/autotools/Autohell.txt b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/autotools/Autohell.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b09f4115c28c6af4723c7cc199fbd3b73c64c0e9
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/autotools/Autohell.txt
@@ -0,0 +1,81 @@
+
+One way ticket to (autotools) hell and back.
+============================================
+
+A quick guide on how to make autotools work well enough in newlib to make patches.
+
+First of all the main part of the solution: autoreconf
+
+When adding new source files to a directory, use
+
+$ autoreconf --no-recursive
+$ find . -name autom4te.cache | xargs rm -rf
+
+The first command does the job. The --no-recursive option is to prevent it
+from trying to 'fix' configure files in all subdirectories. The second
+command removes all temporary files generated by the first.
+
+When adding a new directory with source files, you've got to add a configure.in
+and Makefile.am, by copying them from another directory and tweaking them.
+Then, go up one directory, open configure.in and add AC_CONFIG_SUBDIRS(newdir)
+where newdir is the new directory. After that, do a
+
+$ autoreconf
+$ find . -name autom4te.cache | xargs rm -rf
+
+Is this all? No, obviously. First of all, a small notice: never do an
+autoreconf in the top level directory. At most do an autoreconf in the
+newlib subdirectory.
+
+Then, the big trouble: autoconf and automake, the two tools behind all this
+autoconfiguration magic are neither forward nor backward compatible. If you
+try to autoreconf with a different version than the one used in newlib,
+they'll try to heavily modify each and every configure they come across,
+resulting in a diff from the previous version of several megabytes.
+
+So, you've got to download the exact version of autoconf and automake,
+make an autotools directory, copy the autoconf and automake of the exact
+version taken from the GNU website, and then
+
+$ wget https://ftpmirror.gnu.org/autoconf/autoconf-2.68.tar.bz2
+$ wget https://ftpmirror.gnu.org/automake/automake-1.11.6.tar.gz
+$ mkdir autobins && cd autobins
+$ PFX=`pwd`
+$ cd ..
+$ tar xjvf autoconf-2.68.tar.bz2 
+$ cd autoconf-2.68
+$ ./configure --prefix=$PFX
+$ make
+$ make install
+$ cd ..
+$ tar xzvf automake-1.11.6.tar.gz
+$ cd automake-1.11.6
+$ ./configure --prefix=$PFX
+$ make
+$ make install
+$ cd ../autobins/share
+$ ln -s `pwd`/aclocal-1.11 aclocal
+
+Note that the last command is necessary because during installation an
+aclocal-1.11 directory is created, but the scripts expect an aclocal directory.
+Essentially, the make install of automake is broken, go figure...
+
+After that, before running autoreconf do an export PATH=<dir>:$PATH, where
+<dir> is the bin directory where autoconf and automake were installed.
+
+But wait, there's more fail!
+The old autotools scripts fail to run with the new perl interpreter...
+
+$ automake --version
+Unescaped left brace in regex is illegal here in regex; marked by <-- HERE in m/\${ <-- HERE ([^ \t=:+{}]+)}/ at /home/fede/Documents/programmazione/miosix/newcompiler/compiler/autotools/autobins/bin/automake line 4159.
+
+If it does so, fix it like this:
+http://gnu-automake.7480.n7.nabble.com/bug-23602-Unescaped-left-brace-in-regex-is-deprecated-passed-through-in-regex-td22201.html
+
+sub substitute_ac_subst_variables ($)
+{
+  my ($text) = @_;
+# $text =~ s/\${([^ \t=:+{}]+)}/&substitute_ac_subst_variables_worker ($1)/ge;
+  $text =~ s/\$\{([^ \t=:+{}]+)\}/substitute_ac_subst_variables_worker ($1)/ge;
+  return $text;
+}
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/cleanup.sh b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/cleanup.sh
new file mode 100755
index 0000000000000000000000000000000000000000..885e4be08c226dcea0cc46efeb4faed1fe1a737b
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/cleanup.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+# After running install-script.sh, this script will clean up temporary files.
+# It will not remove the files created by the download.sh script, so that
+# running install-script.sh is possible without re-downloading them.
+
+rm -rf binutils-2.32 gcc-9.2.0 gdb-9.1 gdb-obj newlib-3.1.0 newlib-obj \
+	gmp-6.2.1 mpfr-4.0.2 mpc-1.1.0 make-4.2.1 expat-2.2.10 ncurses-6.1 \
+	makeself-2.4.5 lib quickfix lpc21isp.c
+
+rm -rf objdir/ log/
+if [[ $? -ne 0 ]]; then
+	sudo rm -rf objdir/ log/
+fi
+
+# Installer scripts generated by the build scripts on macOS
+rm -rf installers/macos/Scripts
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/download.sh b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/download.sh
new file mode 100755
index 0000000000000000000000000000000000000000..36d84143944e8ca3349373d00fdc98d9b985d0cd
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/download.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# This simple script will download all the required source files
+# for compiling arm-miosix-eabi-gcc
+
+mkdir downloaded || exit
+cd downloaded
+
+# macOS does not ship with wget, check if it exists and otherwise use curl
+if command -v wget > /dev/null; then
+	WGET=wget
+else
+	WGET='curl -LO'
+fi
+
+$WGET https://ftpmirror.gnu.org/binutils/binutils-2.32.tar.xz
+$WGET https://ftpmirror.gnu.org/gcc/gcc-9.2.0/gcc-9.2.0.tar.xz
+$WGET ftp://sourceware.org/pub/newlib/newlib-3.1.0.tar.gz
+$WGET https://ftpmirror.gnu.org/gdb/gdb-9.1.tar.xz
+$WGET https://ftpmirror.gnu.org/gmp/gmp-6.2.1.tar.xz
+$WGET https://ftpmirror.gnu.org/mpfr/mpfr-4.0.2.tar.xz
+$WGET https://ftpmirror.gnu.org/mpc/mpc-1.1.0.tar.gz
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/install-script.sh b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/install-script.sh
new file mode 100755
index 0000000000000000000000000000000000000000..2673d0b20b9706963440b8ef76f337741d7cdd67
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/install-script.sh
@@ -0,0 +1,747 @@
+#!/usr/bin/env bash
+
+# Script to build the gcc compiler required for Miosix.
+# Usage: ./install-script -j`nproc`
+# The -j parameter is passed to make for parallel compilation
+#
+# Building Miosix is officially supported only through the gcc compiler built
+# with this script. This is because this script patches the compiler.
+# Starting from Miosix 1.58 the use of the arm-miosix-eabi-gcc compiler built
+# by this script has become mandatory due to patches related to posix threads
+# in newlib. The kernel *won't* compile unless the correct compiler is used.
+#
+# Starting from 04/2014 this script is also used to build binary releases
+# of the Miosix compiler for both linux and windows. Most users will want to
+# download the binary relase from http://miosix.org instead of compiling GCC
+# using this script.
+#
+# This script will install arm-miosix-eabi-gcc in /opt, creating links to
+# binaries in /usr/bin.
+# It should be run without root privileges, but it will ask for the root
+# password when installing files to /opt and /usr/bin
+
+#### Configuration tunables -- begin ####
+
+__GCCPATCUR='mp3.3' # Can't autodetect this one easily from gcc.patch
+
+# Uncomment if installing globally on this system
+PREFIX=/opt/arm-miosix-eabi
+DESTDIR=
+SUDO=sudo
+# Uncomment if installing locally on this system, sudo isn't necessary
+#PREFIX=`pwd`/gcc/arm-miosix-eabi
+#DESTDIR=
+#SUDO=
+# Uncomment for producing a package for redistribution. The prefix is set to the
+# final install directory, but when this script does "make install" files are
+# copied with $DESTDIR as prefix. When doing a redistibutable build you also
+# have to specify HOST or (on Mac OS), BUILD, see below.
+# When compiling the Windows installer, do not change the default values!
+# WARNING: Please note that since the already installed version of
+# arm-miosix-eabi-gcc is used to build the standard libraries, it
+# MUST BE THE EXACT SAME VERSION, including miosix-specific patches. Thus when
+# adding new patches you need to first install the new compiler system-wide and
+# only after that build the redistributable one
+#PREFIX=/opt/arm-miosix-eabi
+#DESTDIR=`pwd`/dist
+#SUDO=
+
+# Uncomment if targeting a local install. This will use -march= -mtune= flags
+# to optimize for your processor, but the code won't be portable to other
+# architectures, so don't distribute it
+BUILD=
+HOST=
+# Uncomment if targeting linux 64 bit (distributable)
+#BUILD=
+#HOST=x86_64-linux-gnu
+# Uncomment if targeting windows 64 bit (distributable)
+# You have to run this script from Linux anyway (see canadian cross compiling).
+# Must first install the mingw-w64 toolchain.
+#BUILD=
+#HOST=x86_64-w64-mingw32
+# Uncomment if targeting macOS 64 bit Intel (distributable), compiling on Linux
+# Must first install the osxcross toolchain
+#BUILD=
+#HOST=x86_64-apple-darwin18
+# Uncomment if targeting macOS 64 bit Intel (distributable), compiling on macOS.
+# The script must be run under macOS and without canadian cross compiling
+# because it confuses autotools's configuration scripts. Instead we set the
+# compiler options for macOS minimum version and architecture in order to be
+# able to deploy the binaries on older machines and OS versions. We also must
+# force --build and --host to specify a x86_64 cpu to avoid
+# architecture-dependent code.
+#BUILD=x86_64-apple-darwin17
+#HOST=
+#export CFLAGS='-mmacos-version-min=10.13 -O3'
+#export CXXFLAGS='-mmacos-version-min=10.13 -O3'
+# Uncomment if targeting macOS 64 bit ARM64 (distributable).
+# Run the script under arm64 macOS.
+#BUILD=aarch64-apple-darwin20
+#HOST=
+#export CFLAGS='-mmacos-version-min=11.0 -O3'
+#export CXXFLAGS='-mmacos-version-min=11.0 -O3'
+
+#### Configuration tunables -- end ####
+
+# Libraries are compiled statically, so they are never installed in the system
+LIB_DIR=`pwd`/lib
+
+# Program versions
+BINUTILS=binutils-2.32
+GCC=gcc-9.2.0
+NEWLIB=newlib-3.1.0
+GDB=gdb-9.1
+GMP=gmp-6.2.1
+MPFR=mpfr-4.0.2
+MPC=mpc-1.1.0
+NCURSES=ncurses-6.1
+MAKE=make-4.2.1
+MAKESELF=makeself-2.4.5
+EXPAT=expat-2.2.10
+
+quit() {
+	echo $1
+	exit 1
+}
+
+# Is it a redistributable build?
+if [[ $DESTDIR ]]; then
+	if [[ $SUDO ]]; then
+		quit ":: Error global install distributable compiling are mutually exclusive"
+	fi
+	if [[ $(uname -s) == 'Darwin' ]]; then
+		if [[ -z $BUILD ]]; then
+			quit ":: Error distributable compiling but no BUILD specifed"
+		fi
+	else
+		if [[ -z $HOST ]]; then
+			quit ":: Error distributable compiling but no HOST specifed"
+		fi
+	fi
+	# Since we do not install the bootstrapped arm-miosix-eabi-gcc during the
+	# build process, for making libc, libstdc++, ... we need the same version of
+	# arm-miosix-eabi-gcc that we are going to compile already installed locally
+	# in the system from which we are compiling.
+	__GCCVER=`arm-miosix-eabi-gcc --version | perl -ne \
+		'next unless(/(\d+\.\d+.\d+)/); print "gcc-$1\n";'`;
+	__GCCPAT=`arm-miosix-eabi-gcc -dM -E - < /dev/null | perl -e \
+		'my $M, my $m;
+		 while(<>) {
+		 	$M=$1 if(/_MIOSIX_GCC_PATCH_MAJOR (\d+)/);
+		 	$m=$1 if(/_MIOSIX_GCC_PATCH_MINOR (\d+)/);
+		 }
+		 print "mp$M.$m";'`;
+	if [[ ($__GCCVER != $GCC) || ($__GCCPAT != $__GCCPATCUR) ]]; then
+		quit ":: Error must first install $GCC$__GCCPATCUR system-wide"
+	fi
+	if [[ ! -e $PREFIX/bin/arm-miosix-eabi-gcc ]]; then
+		quit ":: Error To use \$DESTDIR you must first install $GCC$__GCCPATCUR in the same prefix"
+	fi
+else
+	if [[ $HOST || $BUILD ]]; then
+		# NOTE: doing a non redistributable build but specifying HOST or BUILD
+		# may work, but is untested. Remove this line if you want to try.
+		quit ":: Specifying either HOST or BUILD without DESTDIR is not supported"
+	fi
+	# For local builds assume there's no existing miosix compiler installed,
+	# add the install prefix to the path in order to ensure tools are available
+	# as soon as we build them.
+	export PATH=$PREFIX/bin:$PATH
+fi
+
+# Are we canadian cross compiling?
+if [[ $HOST ]]; then
+	# Canadian cross compiling requires the compiler for the host machine
+	which "$HOST-gcc" > /dev/null || quit ":: Error must have host cross compiler"
+
+	HOSTCC="$HOST-gcc"
+	HOSTSTRIP="$HOST-strip"
+	if [[ $HOST == *mingw* ]]; then
+		HOSTCXX="$HOST-g++ -static -s" # For windows not to depend on libstdc++.dll
+		EXT=".exe"
+	else
+		HOSTCXX="$HOST-g++"
+		EXT=
+	fi
+else
+	HOSTCC=gcc
+	HOSTCXX=g++
+	HOSTSTRIP=strip
+	EXT=
+fi
+
+if [[ $1 == '' ]]; then
+	PARALLEL="-j1"
+else
+	PARALLEL=$1;
+fi
+
+#
+# Part 1/2: extract data, apply patches
+#
+
+extract()
+{
+	label=$1
+	filename=$2
+	shift 2
+	directory=${filename%.tar*}
+	
+	if [[ -e $directory ]]; then
+		echo "Skipping extraction/patching of $label, directory $directory exists"
+	else
+		echo "Extracting $label..."
+		tar -xf "downloaded/$filename" || quit ":: Error extracting $label"
+		for patchfile in $@; do
+			echo "Applying ${patchfile}..."
+			patch -p0 < "$patchfile" || quit ":: Failed patching $label"
+		done
+	fi
+}
+
+extract 'binutils' $BINUTILS.tar.xz patches/binutils.patch
+if [[ ( $(uname -s) == 'Darwin' ) && ( $(uname -m) == 'arm64' ) ]]; then
+	extract 'gcc' $GCC.tar.xz patches/gcc.patch patches/gcc_mac_arm64.patch
+else
+	extract 'gcc' $GCC.tar.xz patches/gcc.patch
+fi
+extract 'newlib' $NEWLIB.tar.gz patches/newlib.patch
+extract 'gdb' $GDB.tar.xz patches/gdb.patch
+extract 'gmp' $GMP.tar.xz patches/gmp_arm64.patch
+extract 'mpfr' $MPFR.tar.xz
+extract 'mpc' $MPC.tar.gz
+
+if [[ $HOST == *mingw* ]]; then
+	extract 'make' $MAKE.tar.gz
+fi
+if [[ $HOST == *linux* ]]; then
+	extract 'ncurses' $NCURSES.tar.gz
+fi
+if [[ $DESTDIR ]]; then
+	extract 'expat' $EXPAT.tar.xz
+fi
+
+unzip -o lpc21isp_148_src.zip || quit ":: Error extracting lpc21isp"
+mkdir log
+
+#
+# Part 3: compile libraries
+#
+
+cd $GMP
+
+if [[ $HOST ]]; then
+	# GMP's configure script is bugged and does not properly handle canadian cross
+	# compiling, so we need to properly inform it manually by setting these
+	# environment variables. See also: https://gmplib.org/list-archives/gmp-discuss/2020-July/006519.html
+	export CC_FOR_BUILD='gcc'
+	export CPP_FOR_BUILD='g++'
+fi
+
+./configure \
+	--build=$BUILD \
+	--host=$HOST \
+	--prefix=$LIB_DIR \
+	--enable-static --disable-shared \
+	2> ../log/z.gmp.a.txt					|| quit ":: Error configuring gmp"
+
+make all $PARALLEL 2>../log/z.gmp.b.txt		|| quit ":: Error compiling gmp"
+
+if [[ ! $HOST ]]; then
+	# Don't check if cross-compiling
+	make check $PARALLEL 2> ../log/z.gmp.c.txt	|| quit ":: Error testing gmp"
+fi
+
+make install 2>../log/z.gmp.d.txt			|| quit ":: Error installing gmp"
+
+if [[ $HOST ]]; then
+	unset CC_FOR_BUILD
+	unset CPP_FOR_BUILD
+fi
+
+cd ..
+
+cd $MPFR
+
+./configure \
+	--build=$BUILD \
+	--host=$HOST \
+	--prefix=$LIB_DIR \
+	--enable-static --disable-shared \
+	--with-gmp=$LIB_DIR \
+	2> ../log/z.mpfr.a.txt					|| quit ":: Error configuring mpfr"
+
+make all $PARALLEL 2>../log/z.mpfr.b.txt	|| quit ":: Error compiling mpfr"
+
+if [[ ! $HOST ]]; then
+	# Don't check if cross-compiling
+	make check $PARALLEL 2> ../log/z.mpfr.c.txt	|| quit ":: Error testing mpfr"
+fi
+
+make install 2>../log/z.mpfr.d.txt			|| quit ":: Error installing mpfr"
+
+cd ..
+
+cd $MPC
+
+./configure \
+	--build=$BUILD \
+	--host=$HOST \
+	--prefix=$LIB_DIR \
+	--enable-static --disable-shared \
+	--with-gmp=$LIB_DIR \
+	--with-mpfr=$LIB_DIR \
+	2> ../log/z.mpc.a.txt					|| quit ":: Error configuring mpc"
+
+make all $PARALLEL 2>../log/z.mpc.b.txt		|| quit ":: Error compiling mpc"
+
+if [[ ! $HOST ]]; then
+	# Don't check if cross-compiling for windows
+	make check $PARALLEL 2> ../log/z.mpc.c.txt	|| quit ":: Error testing mpc"
+fi
+
+make install 2>../log/z.mpc.d.txt			|| quit ":: Error installing mpc"
+
+cd ..
+
+#
+# Part 4: compile and install binutils
+#
+
+cd $BINUTILS
+
+./configure \
+	--build=$BUILD \
+	--host=$HOST \
+	--target=arm-miosix-eabi \
+	--prefix=$PREFIX \
+	--enable-interwork \
+	--enable-multilib \
+	--enable-lto \
+	--disable-werror 2>../log/a.txt			|| quit ":: Error configuring binutils"
+
+make all $PARALLEL 2>../log/b.txt			|| quit ":: Error compiling binutils"
+
+$SUDO make install DESTDIR=$DESTDIR 2>../log/c.txt || quit ":: Error installing binutils"
+
+cd ..
+
+#
+# Part 5: compile and install gcc-start
+#
+
+mkdir objdir
+cd objdir
+
+# GCC needs the C headers of the target to configure and build the C++ standard
+# library, therefore when configured --with-headers=[...] the configure script
+# unconditionally copies those headers in the
+# $PREFIX/arm-miosix-eabi/sys-include folder.
+#   This is fine for local installs, (up to a certain point, see later
+# comments), but for distributable builds we already have the headers in
+# $PREFIX/arm-miosix-eabi/include (not in sys-include!) and we don't want to
+# touch the existing install.
+#   However the GCC makefiles are not clever enough to search in `include`
+# rather than `sys-include` when checking if limits.h exists to decide whether
+# to "fix" it. Since `sys-include` does not exists, GCC does not find limits.h
+# and replaces it with its own, which does not include all definitions made
+# by newlib's one. This incorrect file ends up installed and used by the
+# built GCC causing build failures usually related to missing defines used
+# by dirent.h.
+#   Therefore we must differentiate the case in which we are installing
+# or building for redistribution. When we build for redistribution we use
+# --with-sysroot and --with-native-system-header-dir to instruct the GCC
+# configure script to set CROSS_SYSTEM_HEADER_DIR to the place where we already
+# have our headers available, without attempting to copy stuff in $PREFIX.
+if [[ $DESTDIR ]]; then
+	__GCC_CONF_HEADERS_PARAM="--with-sysroot=$PREFIX/arm-miosix-eabi --with-native-system-header-dir=/include"
+else
+	__GCC_CONF_HEADERS_PARAM=--with-headers=../$NEWLIB/newlib/libc/include
+fi
+
+$SUDO ../$GCC/configure \
+	--build=$BUILD \
+	--host=$HOST \
+	--target=arm-miosix-eabi \
+	--with-gmp=$LIB_DIR \
+	--with-mpfr=$LIB_DIR \
+	--with-mpc=$LIB_DIR \
+	MAKEINFO=missing \
+	--prefix=$PREFIX \
+	--disable-shared \
+	--disable-libssp \
+	--disable-nls \
+	--enable-libgomp \
+	--disable-libstdcxx-pch \
+	--disable-libstdcxx-dual-abi \
+	--disable-libstdcxx-filesystem-ts \
+	--enable-threads=miosix \
+	--enable-languages="c,c++" \
+	--enable-lto \
+	--disable-wchar_t \
+	--with-newlib \
+	${__GCC_CONF_HEADERS_PARAM} \
+	2>../log/d.txt							|| quit ":: Error configuring gcc-start"
+
+$SUDO make all-gcc $PARALLEL 2>../log/e.txt || quit ":: Error compiling gcc-start"
+
+$SUDO make install-gcc DESTDIR=$DESTDIR 2>../log/f.txt || quit ":: Error installing gcc-start"
+
+if [[ -z $DESTDIR ]]; then
+	# Remove the sys-include directory if we are installing locally.
+	# There are two reasons why to remove it: first because it is unnecessary,
+	# second because it is harmful.
+	# After gcc is compiled, the installation of newlib places the headers in the
+	# include dirctory and at that point the sys-include headers aren't necessary anymore
+	# Now, to see why the're harmful, consider the header newlib.h It is initially
+	# empty and is filled in by the newlib's ./configure with the appropriate options
+	# Now, since the configure process happens after, the newlib.h in sys-include
+	# is the wrong (empty) one, while the one in include is the correct one.
+	# This causes troubles because newlib.h contains the _WANT_REENT_SMALL used to
+	# select the appropriate _Reent struct. This error is visible to user code since
+	# GCC seems to take the wrong newlib.h and user code gets the wrong _Reent struct
+	$SUDO rm -rf $PREFIX/arm-miosix-eabi/sys-include
+	
+	# Another fix, looks like export PATH isn't enough for newlib, it fails
+	# running arm-miosix-eabi-ranlib when installing
+	if [[ $SUDO ]]; then
+		# This is actually done also later, but we don't want to add a symlink too
+		$SUDO rm $PREFIX/bin/arm-miosix-eabi-$GCC$EXT
+
+		# Linking to /usr/bin does not work on macOS because of SIP, but newlib
+		# appears to build just fine with export PATH on macOS...
+		if [[ ! ( $(uname -s) == 'Darwin' ) ]]; then
+			$SUDO ln -s $DESTDIR$PREFIX/bin/* /usr/bin
+		fi
+	fi
+fi
+
+cd ..
+
+#
+# Part 6: compile and install newlib
+#
+
+mkdir newlib-obj
+cd newlib-obj
+
+../$NEWLIB/configure \
+	--build=$BUILD \
+	--host=$HOST \
+	--target=arm-miosix-eabi \
+	--prefix=$PREFIX \
+	--enable-multilib \
+	--enable-newlib-reent-small \
+	--enable-newlib-multithread \
+	--enable-newlib-io-long-long \
+	--disable-newlib-io-c99-formats \
+	--disable-newlib-io-long-double \
+	--disable-newlib-io-pos-args \
+	--disable-newlib-mb \
+	--disable-newlib-supplied-syscalls \
+	2>../log/g.txt							|| quit ":: Error configuring newlib"
+
+make $PARALLEL 2>../log/h.txt				|| quit ":: Error compiling newlib"
+
+$SUDO make install DESTDIR=$DESTDIR 2>../log/i.txt || quit ":: Error installing newlib"
+
+cd ..
+
+#
+# Part 7: compile and install gcc-end
+#
+
+cd objdir
+
+$SUDO make all $PARALLEL 2>../log/j.txt		|| quit ":: Error compiling gcc-end"
+
+$SUDO make install DESTDIR=$DESTDIR 2>../log/k.txt || quit ":: Error installing gcc-end"
+
+cd ..
+
+#
+# Part 8: Fixup and verify multilibs
+#
+
+# 8A: remove root multilib.
+# GCC apparently assumes that when no appropriate multilib is found, it is
+# always safe to link without multilibs (i.e. with the libraries found directly
+# in /lib). However, for the ARM architecture this assumption is completely
+# wrong, due to (1) the presence of 3 mutually incompatible instruction sets
+# (ARM, Thumb and Thumb2) and (2) the fact that the default compilation options
+# build for an extremely old configuration (-mcpu=arm7tdmi -marm) which produces
+# code not runnable on any modern ARM microcontroller CPU.
+# This line removes all the libraries not included in a multilib to prevent
+# GCC from producing broken binaries silently.
+# As a result, the use of compilation options not supported by the toolchain
+# will result in a link-time failure to find the libraries, hinting that
+# something is wrong.
+
+find "$DESTDIR$PREFIX/arm-miosix-eabi/lib" -mindepth 1 ! -path '*/arm/*' ! -path '*/thumb/*' -print -delete
+
+# 8B: check that all multilibs have been built.
+# This check has been added after an attempt to build arm-miosix-eabi-gcc on Fedora
+# where newlib's multilibs were not built. Gcc produced binaries that failed on
+# Cortex M3 because the first call to a libc function was a blx into ARM instruction
+# set, but since Cortex M3 only has the thumb2 instruction set, the CPU locked.
+# By checking that all multilibs are correctly built, this error can be spotted
+# immediately instead of leaving a gcc that produces wrong code in the wild.
+
+check_multilibs() {
+	if [[ ! -f $1/libc.a ]]; then
+		quit "::Error, $1/libc.a not installed"
+	fi
+	if [[ ! -f $1/libm.a ]]; then
+		quit "::Error, $1/libm.a not installed"
+	fi
+	if [[ ! -f $1/libg.a ]]; then
+		quit "::Error, $1/libg.a not installed"
+	fi
+	if [[ ! -f $1/libatomic.a ]]; then
+		quit "::Error, $1/libatomic.a not installed"
+	fi
+	if [[ ! -f $1/libstdc++.a ]]; then
+		quit "::Error, $1/libstdc++.a not installed"
+	fi
+	if [[ ! -f $1/libsupc++.a ]]; then
+		quit "::Error, $1/libsupc++.a not installed"
+	fi 
+}
+
+check_multilibs $DESTDIR$PREFIX/arm-miosix-eabi/lib/arm/v4t/nofp
+check_multilibs $DESTDIR$PREFIX/arm-miosix-eabi/lib/thumb/v4t/nofp
+check_multilibs $DESTDIR$PREFIX/arm-miosix-eabi/lib/thumb/v6-m/nofp
+check_multilibs $DESTDIR$PREFIX/arm-miosix-eabi/lib/thumb/v7-m/nofp
+check_multilibs $DESTDIR$PREFIX/arm-miosix-eabi/lib/thumb/v7e-m+dp/hard
+check_multilibs $DESTDIR$PREFIX/arm-miosix-eabi/lib/thumb/v7e-m+fp/hard
+check_multilibs $DESTDIR$PREFIX/arm-miosix-eabi/lib/thumb/v8-m.base/nofp
+check_multilibs $DESTDIR$PREFIX/arm-miosix-eabi/lib/thumb/v8-m.main+dp/hard
+check_multilibs $DESTDIR$PREFIX/arm-miosix-eabi/lib/thumb/v8-m.main+fp/hard
+check_multilibs $DESTDIR$PREFIX/arm-miosix-eabi/lib/thumb/v6-m/nofp/pie/single-pic-base
+check_multilibs $DESTDIR$PREFIX/arm-miosix-eabi/lib/thumb/v7-m/nofp/pie/single-pic-base
+check_multilibs $DESTDIR$PREFIX/arm-miosix-eabi/lib/thumb/v7e-m+dp/hard/pie/single-pic-base
+check_multilibs $DESTDIR$PREFIX/arm-miosix-eabi/lib/thumb/v7e-m+fp/hard/pie/single-pic-base
+check_multilibs $DESTDIR$PREFIX/arm-miosix-eabi/lib/thumb/v8-m.base/nofp/pie/single-pic-base
+check_multilibs $DESTDIR$PREFIX/arm-miosix-eabi/lib/thumb/v8-m.main+dp/hard/pie/single-pic-base
+check_multilibs $DESTDIR$PREFIX/arm-miosix-eabi/lib/thumb/v8-m.main+fp/hard/pie/single-pic-base
+echo "::All multilibs have been built. OK"
+
+#
+# Part 9: compile and install gdb
+#
+
+# GDB on linux/windows needs expat
+if [[ $DESTDIR ]]; then
+	cd $EXPAT
+
+	./configure \
+		--build=$BUILD \
+		--host=$HOST \
+		--prefix=$LIB_DIR \
+		--enable-static=yes \
+		--enable-shared=no \
+		2> ../log/z.expat.a.txt					|| quit ":: Error configuring expat"
+
+	make all $PARALLEL 2>../log/z.expat.b.txt	|| quit ":: Error compiling expat"
+
+	make install 2>../log/z.expat.d.txt			|| quit ":: Error installing expat"
+
+	cd ..
+fi
+
+# GDB on linux requires ncurses, and not to depend on them when doing a
+# redistributable linux build we build a static version
+# Based on previous gdb that when run with --tui reported as error
+# "Error opening terminal: xterm-256color" we now build this terminal as
+# fallback within ncurses itself.
+if [[ $HOST == *linux* ]]; then
+	cd $NCURSES
+
+	./configure \
+		--build=$BUILD \
+		--host=$HOST \
+		--prefix=$LIB_DIR \
+		--with-normal --without-shared \
+		--without-ada --without-cxx-binding --without-debug \
+		--with-fallbacks='xterm-256color' \
+		--without-manpages --without-progs --without-tests \
+		2> ../log/z.ncurses.a.txt				|| quit ":: Error configuring ncurses"
+
+	make all $PARALLEL 2>../log/z.ncurses.b.txt	|| quit ":: Error compiling ncurses"
+
+	make install 2>../log/z.ncurses.d.txt		|| quit ":: Error installing ncurses"
+
+	cd ..
+fi
+
+mkdir gdb-obj
+cd gdb-obj
+
+# CXX=$HOSTCXX to avoid having to distribute libstdc++.dll on windows
+CXX=$HOSTCXX ../$GDB/configure \
+	--build=$BUILD \
+	--host=$HOST \
+	--target=arm-miosix-eabi \
+	--prefix=$PREFIX \
+	--with-libmpfr-prefix=$LIB_DIR \
+	--with-libexpat-prefix=$LIB_DIR \
+	--with-system-zlib=no \
+	--with-lzma=no \
+	--with-python=no \
+	--enable-interwork \
+	--enable-multilib \
+	--disable-werror 2>../log/l.txt			|| quit ":: Error configuring gdb"
+
+# Specify a dummy MAKEINFO binary to work around an issue in the gdb makefiles
+# where compilation fails if MAKEINFO is not installed.
+# https://sourceware.org/bugzilla/show_bug.cgi?id=14678
+make all MAKEINFO=/usr/bin/true $PARALLEL 2>../log/m.txt || quit ":: Error compiling gdb"
+
+$SUDO make install MAKEINFO=/usr/bin/true DESTDIR=$DESTDIR 2>../log/n.txt || quit ":: Error installing gdb"
+
+cd ..
+
+#
+# Part 10: install the postlinker
+#
+cd mx-postlinker
+make CXX="$HOSTCXX" SUFFIX=$EXT				|| quit ":: Error compiling mx-postlinker"
+$SUDO make install CXX="$HOSTCXX" SUFFIX=$EXT \
+	INSTALL_DIR=$DESTDIR$PREFIX/bin \
+											|| quit ":: Error installing mx-postlinker"
+make CXX="$HOSTCXX" SUFFIX=$EXT clean
+cd ..
+
+#
+# Part 11: compile and install lpc21isp.c
+#
+
+$HOSTCC -o lpc21isp$EXT lpc21isp.c						|| quit ":: Error compiling lpc21isp"
+
+$SUDO mv lpc21isp$EXT $DESTDIR$PREFIX/bin || quit ":: Error installing lpc21isp"
+
+#
+# Part 12: install GNU make and rm (windows release only)
+#
+
+if [[ $HOST == *mingw* ]]; then
+
+	cd $MAKE
+
+	./configure \
+		--build=$BUILD \
+		--host=$HOST \
+		--prefix=$PREFIX 2> z.make.a.txt || quit ":: Error configuring make"
+
+	make all $PARALLEL 2>../log/z.make.b.txt || quit ":: Error compiling make"
+
+	make install DESTDIR=$DESTDIR 2>../log/z.make.c.txt || quit ":: Error installing make"
+
+	cd ..
+
+	# FIXME get a better rm to distribute for windows
+	$HOSTCC -o rm$EXT -O2 installers/windows/rm.c || quit ":: Error compiling rm"
+
+	mv rm$EXT $DESTDIR$PREFIX/bin || quit ":: Error installing rm"
+fi
+
+#
+# Part 13: Final fixups
+#
+
+# Remove this since its name is not arm-miosix-eabi-
+$SUDO rm $DESTDIR$PREFIX/bin/arm-miosix-eabi-$GCC$EXT
+
+# Strip stuff that is very large when having debug symbols to save disk space
+# This simple thing can easily save 500+MB
+find $DESTDIR$PREFIX -name cc1$EXT     | $SUDO xargs $HOSTSTRIP
+find $DESTDIR$PREFIX -name cc1plus$EXT | $SUDO xargs $HOSTSTRIP
+find $DESTDIR$PREFIX -name lto1$EXT    | $SUDO xargs $HOSTSTRIP
+$SUDO $HOSTSTRIP $DESTDIR$PREFIX/bin/*
+
+
+
+# Installers, env variables and other stuff
+if [[ $DESTDIR ]]; then
+	if [[ ( $(uname -s) == 'Linux' ) && ( $HOST == *linux* ) ]]; then
+		# Build a makeself installer
+		# Distribute the installer and uninstaller too
+		sed -E "s|/opt/arm-miosix-eabi|$PREFIX|g" installers/linux/installer.sh > $DESTDIR$PREFIX/installer.sh
+		sed -E "s|/opt/arm-miosix-eabi|$PREFIX|g" uninstall.sh > $DESTDIR$PREFIX/uninstall.sh
+		chmod +x $DESTDIR$PREFIX/installer.sh $DESTDIR$PREFIX/uninstall.sh
+		sh downloaded/$MAKESELF.run
+		# NOTE: --keep-umask otherwise the installer extracts files setting to 0
+		# permissions to group and other, resulting in an unusable installation
+		./$MAKESELF/makeself.sh --xz --keep-umask \
+			$DESTDIR$PREFIX \
+			MiosixToolchainInstaller9.2.0mp3.2.run \
+			"Miosix toolchain for Linux (GCC 9.2.0-mp3.2)" \
+			"./installer.sh"
+	elif [[ ( $(uname -s) == 'Linux' ) && ( $HOST == *mingw* ) ]]; then
+		# Build an executable installer for Windows
+		cd installers/windows
+		wine "C:\Program Files (x86)\Inno Setup 6\Compil32.exe" /cc MiosixInstaller.iss
+		cd ../..
+	elif [[ ( $(uname -s) == 'Linux' ) && ( $HOST == *darwin* ) ]]; then
+		echo "TODO: there seems to be no way to produce a .pkg mac installer"
+		echo "from Linux as the pkgbuild/productbuild tools aren't available"
+	elif [[ $(uname -s) == 'Darwin' ]]; then
+		# Build a .pkg installer for macOS if we are on macOS and we are building for it
+		cp uninstall.sh $DESTDIR$PREFIX
+		# Prepare the postinstall script by replacing the correct prefix
+		mkdir -p installers/macos/Scripts
+		cat installers/macos/ScriptsTemplates/postinstall | \
+			sed -e 's|PREFIX=|PREFIX='"$PREFIX"'|' > \
+				installers/macos/Scripts/postinstall
+		chmod +x installers/macos/Scripts/postinstall
+		# Build a standard macOS package.
+		# The wizard steps are configured by the Distribution.xml file.
+		# Documentation:
+		#   https://developer.apple.com/library/archive/documentation/
+		#   DeveloperTools/Reference/DistributionDefinitionRef/Chapters/
+		#   Introduction.html#//apple_ref/doc/uid/TP40005370-CH1-SW1
+		# Also see `man productbuild` and `man pkgbuild`.
+		min_osx_ver='10.13'
+		distr_script='installers/macos/Distribution_Intel.xml'
+		suffix='Intel'
+		if [[ $BUILD == aarch64* ]]; then
+		        min_osx_ver='11.0'
+		        distr_script='installers/macos/Distribution_ARM.xml'
+		        suffix='ARM'
+		fi
+		pkgbuild \
+			--identifier 'org.miosix.toolchain.gcc-9.2.0-mp3.2' \
+			--version '9.2.0.3.2' \
+			--min-os-version ${min_osx_ver} \
+			--install-location / \
+			--scripts installers/macos/Scripts \
+			--root $DESTDIR \
+			'gcc-9.2.0-mp3.2.pkg'
+		productbuild \
+			--distribution ${distr_script} \
+			--resources installers/macos/Resources \
+			--package-path ./ \
+			"./MiosixToolchainInstaller9.2.0mp3.2_${suffix}.pkg"
+	fi
+else
+	# Install the uninstaller too
+	chmod +x uninstall.sh
+	$SUDO cp uninstall.sh $DESTDIR$PREFIX
+	# If sudo not an empty variable and we are not on macOS, make symlinks to
+	# /usr/bin. else make a script to override PATH
+	if [[ ( $(uname -s) != 'Darwin' ) && $SUDO ]]; then
+		$SUDO ln -s $DESTDIR$PREFIX/bin/* /usr/bin
+	else
+		echo '# Used when installing the compiler locally to test it' > env.sh
+		echo '# usage: $ . ./env.sh' >> env.sh
+		echo '# or     $ source ./env.sh' >> env.sh
+		echo "export PATH=$PREFIX/bin:"'$PATH' >> env.sh
+		chmod +x env.sh
+	fi
+fi
+
+#
+# The end.
+#
+
+echo ":: Successfully installed"
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/additional-download.sh b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/additional-download.sh
new file mode 100644
index 0000000000000000000000000000000000000000..c243dfc065ac2b8065d99637f2af793669943a76
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/additional-download.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# This simple script will download additional sources required to make a
+# distributable release build for linux/windows
+
+# Meant to be run from the main compiler directory (./installers/additional-download.sh)
+cd downloaded || exit
+
+# macOS does not ship with wget, check if it exists and otherwise use curl
+if command -v wget > /dev/null; then
+	WGET=wget
+else
+	WGET='curl -LO'
+fi
+
+# Linux
+$WGET https://ftpmirror.gnu.org/ncurses/ncurses-6.1.tar.gz
+$WGET https://github.com/megastep/makeself/releases/download/release-2.4.5/makeself-2.4.5.run
+
+# Windows
+$WGET https://ftpmirror.gnu.org/make/make-4.2.1.tar.gz
+$WGET https://jrsoftware.org/download.php/is.exe
+mv is.exe innosetup.exe
+
+# All
+$WGET https://github.com/libexpat/libexpat/releases/download/R_2_2_10/expat-2.2.10.tar.xz
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/checkdeps-windows.sh b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/checkdeps-windows.sh
new file mode 100755
index 0000000000000000000000000000000000000000..6939f7428a094c14d0c5fcbe4561ee86f544e95f
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/checkdeps-windows.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# When making a redistributable windows installation, use this
+# to check the required librearies after it's installed on
+# another machine
+
+# Meant to be run from the main compiler directory (./installers/checkdeps-windows.sh)
+strings gcc/arm-miosix-eabi/bin/*.exe | grep '\.dll' | sort -u
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/checkdeps.sh b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/checkdeps.sh
new file mode 100755
index 0000000000000000000000000000000000000000..137f7c3af3fb41c9812df9f561d2e7b7669d1ad0
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/checkdeps.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+# When making a redistributable linux installation, use this
+# to check the required librearies after it's installed on
+# another machine
+
+# Meant to be run from the main compiler directory (./installers/checkdeps.sh)
+
+ldd gcc/arm-miosix-eabi/bin/* | perl -ne 'next unless(/\s+(\S+.so(\S+))\s+/);print "$1\n";' | sort -u
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/linux/installer.sh b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/linux/installer.sh
new file mode 100644
index 0000000000000000000000000000000000000000..7a595a93635995794807b8aadf5dbf51d11db9bc
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/linux/installer.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+echo "Checking if a previous version of the Miosix Toolchain is installed"
+echo "and uninstalling it ..."
+
+./uninstall.sh
+
+quit() {
+	echo $1
+	exit 1
+}
+
+echo "Installing the Miosix toolchain ..."
+# NOTE: "" around pwd as the directory may contain spaces
+sudo cp -R "`pwd`" /opt/arm-miosix-eabi			|| quit "Error: can't install to /opt/arm-miosix-eabi"
+sudo ln -s /opt/arm-miosix-eabi/bin/* /usr/bin	|| quit "Error: can't make symlinks to /usr/bin"
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/.gitignore b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..d55d4650112fb6f1757bc626d5ea4ebb11820649
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/.gitignore
@@ -0,0 +1 @@
+Scripts
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/Distribution_ARM.xml b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/Distribution_ARM.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8b767bb4746313f6782728ff4f3547793fcd3bf0
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/Distribution_ARM.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<installer-gui-script minSpecVersion="1">
+    <title>Miosix Toolchain for macOS (Apple Silicon)</title>
+    
+    <options customize="never" hostArchitectures="arm64" require-scripts="true" allow-external-scripts="true"/>
+    <installation-check script="checkShell()"/>
+    <script>
+//<![CDATA[
+    function checkShell()
+    {
+       unkShell = system.run('/bin/bash', '-c', '[[ $(/usr/bin/dscl . -read "/Users/${USER}" shell) =~ .*shell:(.+/)?(tcsh|bash|zsh) ]]');
+       if (unkShell)
+       {
+           my.result.type = 'Warning';
+           my.result.title = 'Unrecognized login shell for current user, cannot update PATH';
+           my.result.message = 'After installation completes, you need to add the Miosix toolchain to your shell\'s binary search path manually.\n\nPlease refer to the documentation of your shell on how to find and modify the shell profile file for your user in order to add "\\opt\\arm-miosix-eabi\\bin" to your PATH environment variable.';
+           return false;
+       }
+       system.log('Preliminary shell check passed');
+       return true;
+    }
+//]]></script>
+    
+    <welcome file="welcome.rtf" uti="public.rtf"/>
+    <license file="license.txt" uti="public.text"/>
+    
+    <domains enable_anywhere="false" enable_currentUserHome="false" enable_localSystem="true"/>
+    <pkg-ref id="org.miosix.toolchain.gcc-9.2.0-mp3.2" onConclusion="none">gcc-9.2.0-mp3.2.pkg</pkg-ref>
+    <choice id="org.miosix.toolchain.gcc-9.2.0-mp3.2" visible="false">
+        <pkg-ref id="org.miosix.toolchain.gcc-9.2.0-mp3.2"/>
+    </choice>
+    <choices-outline>
+        <line choice="org.miosix.toolchain.gcc-9.2.0-mp3.2"/>
+    </choices-outline>
+</installer-gui-script>
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/Distribution_Intel.xml b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/Distribution_Intel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c2aa1dcc16311103366a41cc38596b106d3d95a3
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/Distribution_Intel.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<installer-gui-script minSpecVersion="1">
+    <title>Miosix Toolchain for macOS (Intel)</title>
+    
+    <options customize="never" hostArchitectures="x86_64" require-scripts="true" allow-external-scripts="true"/>
+    <installation-check script="checkShell()"/>
+    <script>
+//<![CDATA[
+    function checkShell()
+    {
+       unkShell = system.run('/bin/bash', '-c', '[[ $(/usr/bin/dscl . -read "/Users/${USER}" shell) =~ .*shell:(.+/)?(tcsh|bash|zsh) ]]');
+       if (unkShell)
+       {
+           my.result.type = 'Warning';
+           my.result.title = 'Unrecognized login shell for current user, cannot update PATH';
+           my.result.message = 'After installation completes, you need to add the Miosix toolchain to your shell\'s binary search path manually.\n\nPlease refer to the documentation of your shell on how to find and modify the shell profile file for your user in order to add "\\opt\\arm-miosix-eabi\\bin" to your PATH environment variable.';
+           return false;
+       }
+       system.log('Preliminary shell check passed');
+       return true;
+    }
+//]]></script>
+    
+    <welcome file="welcome.rtf" uti="public.rtf"/>
+    <license file="license.txt" uti="public.text"/>
+    
+    <domains enable_anywhere="false" enable_currentUserHome="false" enable_localSystem="true"/>
+    <pkg-ref id="org.miosix.toolchain.gcc-9.2.0-mp3.2" onConclusion="none">gcc-9.2.0-mp3.2.pkg</pkg-ref>
+    <choice id="org.miosix.toolchain.gcc-9.2.0-mp3.2" visible="false">
+        <pkg-ref id="org.miosix.toolchain.gcc-9.2.0-mp3.2"/>
+    </choice>
+    <choices-outline>
+        <line choice="org.miosix.toolchain.gcc-9.2.0-mp3.2"/>
+    </choices-outline>
+</installer-gui-script>
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/Resources/license.txt b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/Resources/license.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f36ca140a34ce1e7ef8f1ef06a42b0adbc9b2a19
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/Resources/license.txt
@@ -0,0 +1,1779 @@
+=== GCC, Binutils, GDB, Make License ===
+
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+
+=== GCC, Binutils, GDB Runtime Library License ===
+
+		   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions. 
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version. 
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
+
+=== Newlib License ===
+
+The newlib subdirectory is a collection of software from several sources.
+
+Each file may have its own copyright/license that is embedded in the source 
+file.  Unless otherwise noted in the body of the source file(s), the following copyright
+notices will apply to the contents of the newlib subdirectory:
+
+(1) Red Hat Incorporated
+
+Copyright (c) 1994-2009  Red Hat, Inc. All rights reserved.
+
+This copyrighted material is made available to anyone wishing to use,
+modify, copy, or redistribute it subject to the terms and conditions
+of the BSD License.   This program is distributed in the hope that 
+it will be useful, but WITHOUT ANY WARRANTY expressed or implied, 
+including the implied warranties of MERCHANTABILITY or FITNESS FOR 
+A PARTICULAR PURPOSE.  A copy of this license is available at 
+http://www.opensource.org/licenses. Any Red Hat trademarks that are
+incorporated in the source code or documentation are not subject to
+the BSD License and may only be used or replicated with the express
+permission of Red Hat, Inc.
+
+(2) University of California, Berkeley
+
+Copyright (c) 1981-2000 The Regents of the University of California.
+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 the University 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.
+
+(3) David M. Gay (AT&T 1991, Lucent 1998)
+
+The author of this software is David M. Gay.
+
+Copyright (c) 1991 by AT&T.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose without fee is hereby granted, provided that this entire notice
+is included in all copies of any software which is or includes a copy
+or modification of this software and in all copies of the supporting
+documentation for such software.
+
+THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTY.  IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY
+REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
+OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+
+-------------------------------------------------------------------
+
+The author of this software is David M. Gay.
+
+Copyright (C) 1998-2001 by Lucent Technologies
+All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all
+copies and that both that the copyright notice and this
+permission notice and warranty disclaimer appear in supporting
+documentation, and that the name of Lucent or any of its entities
+not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
+SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+
+
+(4) Advanced Micro Devices
+
+Copyright 1989, 1990 Advanced Micro Devices, Inc.
+
+This software is the property of Advanced Micro Devices, Inc  (AMD)  which
+specifically  grants the user the right to modify, use and distribute this
+software provided this notice is not removed or altered.  All other rights
+are reserved by AMD.
+
+AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS
+SOFTWARE.  IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL
+DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR
+USE OF THIS SOFTWARE.
+
+So that all may benefit from your experience, please report  any  problems
+or  suggestions about this software to the 29K Technical Support Center at
+800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131  in  the  UK,  or
+0031-11-1129 in Japan, toll free.  The direct dial number is 512-462-4118.
+
+Advanced Micro Devices, Inc.
+29K Support Products
+Mail Stop 573
+5900 E. Ben White Blvd.
+Austin, TX 78741
+800-292-9263
+
+(5) 
+
+(6)
+
+(7) Sun Microsystems
+
+Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+
+Developed at SunPro, a Sun Microsystems, Inc. business.
+Permission to use, copy, modify, and distribute this
+software is freely granted, provided that this notice is preserved.
+
+(8) Hewlett Packard
+
+(c) Copyright 1986 HEWLETT-PACKARD COMPANY
+
+To anyone who acknowledges that this file is provided "AS IS"
+without any express or implied warranty:
+    permission to use, copy, modify, and distribute this file
+for any purpose is hereby granted without fee, provided that
+the above copyright notice and this notice appears in all
+copies, and that the name of Hewlett-Packard Company not be
+used in advertising or publicity pertaining to distribution
+of the software without specific, written prior permission.
+Hewlett-Packard Company makes no representations about the
+suitability of this software for any purpose.
+
+(9) Hans-Peter Nilsson
+
+Copyright (C) 2001 Hans-Peter Nilsson
+
+Permission to use, copy, modify, and distribute this software is
+freely granted, provided that the above copyright notice, this notice
+and the following disclaimer are preserved with no changes.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.
+
+(10) Stephane Carrez (m68hc11-elf/m68hc12-elf targets only)
+
+Copyright (C) 1999, 2000, 2001, 2002 Stephane Carrez (stcarrez@nerim.fr)
+
+The authors hereby grant permission to use, copy, modify, distribute,
+and license this software and its documentation for any purpose, provided
+that existing copyright notices are retained in all copies and that this
+notice is included verbatim in any distributions. No written agreement,
+license, or royalty fee is required for any of the authorized uses.
+Modifications to this software may be copyrighted by their authors
+and need not follow the licensing terms described here, provided that
+the new terms are clearly indicated on the first page of each file where
+they apply.
+
+(11) Christopher G. Demetriou
+
+Copyright (c) 2001 Christopher G. Demetriou
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+
+(12) SuperH, Inc.
+
+Copyright 2002 SuperH, Inc. All rights reserved
+
+This software is the property of SuperH, Inc (SuperH) which specifically
+grants the user the right to modify, use and distribute this software
+provided this notice is not removed or altered.  All other rights are
+reserved by SuperH.
+
+SUPERH MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO
+THIS SOFTWARE.  IN NO EVENT SHALL SUPERH BE LIABLE FOR INDIRECT, SPECIAL,
+INCIDENTAL OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH OR ARISING FROM
+THE FURNISHING, PERFORMANCE, OR USE OF THIS SOFTWARE.
+
+So that all may benefit from your experience, please report any problems
+or suggestions about this software to the SuperH Support Center via
+e-mail at softwaresupport@superh.com .
+
+SuperH, Inc.
+405 River Oaks Parkway
+San Jose
+CA 95134
+USA
+
+(13) Royal Institute of Technology
+
+Copyright (c) 1999 Kungliga Tekniska Högskolan
+(Royal Institute of Technology, Stockholm, Sweden).
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+2. 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.
+
+3. Neither the name of KTH 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 KTH AND ITS 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 KTH OR ITS 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.
+
+(14) Alexey Zelkin
+
+Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+(15) Andrey A. Chernov
+
+Copyright (C) 1997 by Andrey A. Chernov, Moscow, Russia.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 REGENTS 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.
+
+(16) FreeBSD
+
+Copyright (c) 1997-2002 FreeBSD Project.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+(17) S. L. Moshier
+
+Author:  S. L. Moshier.
+
+Copyright (c) 1984,2000 S.L. Moshier
+
+Permission to use, copy, modify, and distribute this software for any
+purpose without fee is hereby granted, provided that this entire notice
+is included in all copies of any software which is or includes a copy
+or modification of this software and in all copies of the supporting
+documentation for such software.
+
+THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTY.  IN PARTICULAR,  THE AUTHOR MAKES NO REPRESENTATION
+OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
+SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+
+(18) Citrus Project
+
+Copyright (c)1999 Citrus Project,
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+(19) Todd C. Miller
+
+Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED ``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 AUTHOR 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.
+
+(20) DJ Delorie (i386)
+Copyright (C) 1991 DJ Delorie
+All rights reserved.
+
+Redistribution, modification, and use in source and binary forms is permitted
+provided that the above copyright notice and following paragraph are
+duplicated in all such forms.
+
+This file is distributed WITHOUT ANY WARRANTY; without even the implied
+warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+(21) Free Software Foundation LGPL License (*-linux* targets only)
+
+   Copyright (C) 1990-1999, 2000, 2001    Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301 USA.
+
+(22) Xavier Leroy LGPL License (i[3456]86-*-linux* targets only)
+
+Copyright (C) 1996 Xavier Leroy (Xavier.Leroy@inria.fr)
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+(23) Intel (i960)
+
+Copyright (c) 1993 Intel Corporation
+
+Intel hereby grants you permission to copy, modify, and distribute this
+software and its documentation.  Intel grants this permission provided
+that the above copyright notice appears in all copies and that both the
+copyright notice and this permission notice appear in supporting
+documentation.  In addition, Intel grants this permission provided that
+you prominently mark as "not part of the original" any modifications
+made to this software or documentation, and that the name of Intel
+Corporation not be used in advertising or publicity pertaining to
+distribution of the software or the documentation without specific,
+written prior permission.
+
+Intel Corporation provides this AS IS, WITHOUT ANY WARRANTY, EXPRESS OR
+IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE.  Intel makes no guarantee or
+representations regarding the use of, or the results of the use of,
+the software and documentation in terms of correctness, accuracy,
+reliability, currentness, or otherwise; and you rely on the software,
+documentation and results solely at your own risk.
+
+IN NO EVENT SHALL INTEL BE LIABLE FOR ANY LOSS OF USE, LOSS OF BUSINESS,
+LOSS OF PROFITS, INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES
+OF ANY KIND.  IN NO EVENT SHALL INTEL'S TOTAL LIABILITY EXCEED THE SUM
+PAID TO INTEL FOR THE PRODUCT LICENSED HEREUNDER.
+
+(24) Hewlett-Packard  (hppa targets only)
+
+(c) Copyright 1986 HEWLETT-PACKARD COMPANY
+
+To anyone who acknowledges that this file is provided "AS IS"
+without any express or implied warranty:
+    permission to use, copy, modify, and distribute this file
+for any purpose is hereby granted without fee, provided that
+the above copyright notice and this notice appears in all
+copies, and that the name of Hewlett-Packard Company not be
+used in advertising or publicity pertaining to distribution
+of the software without specific, written prior permission.
+Hewlett-Packard Company makes no representations about the
+suitability of this software for any purpose.
+
+(25) Henry Spencer (only *-linux targets)
+
+Copyright 1992, 1993, 1994 Henry Spencer.  All rights reserved.
+This software is not subject to any license of the American Telephone
+and Telegraph Company or of the Regents of the University of California.
+
+Permission is granted to anyone to use this software for any purpose on
+any computer system, and to alter it and redistribute it, subject
+to the following restrictions:
+
+1. The author is not responsible for the consequences of use of this
+   software, no matter how awful, even if they arise from flaws in it.
+
+2. The origin of this software must not be misrepresented, either by
+   explicit claim or by omission.  Since few users ever read sources,
+   credits must appear in the documentation.
+
+3. Altered versions must be plainly marked as such, and must not be
+   misrepresented as being the original software.  Since few users
+   ever read sources, credits must appear in the documentation.
+
+4. This notice may not be removed or altered.
+
+(26) Mike Barcroft
+
+Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+(27) Konstantin Chuguev (--enable-newlib-iconv)
+
+Copyright (c) 1999, 2000
+   Konstantin Chuguev.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+   iconv (Charset Conversion Library) v2.0
+
+(28) Artem Bityuckiy (--enable-newlib-iconv)
+
+Copyright (c) 2003, Artem B. Bityuckiy, SoftMine Corporation.
+Rights transferred to Franklin Electronic Publishers.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+(29) IBM, Sony, Toshiba (only spu-* targets)
+
+  (C) Copyright 2001,2006,
+  International Business Machines Corporation,
+  Sony Computer Entertainment, Incorporated,
+  Toshiba Corporation,
+
+  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 names of the copyright holders nor the names of their
+      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.
+
+(30) - Alex Tatmanjants (targets using libc/posix)
+
+  Copyright (c) 1995 Alex Tatmanjants <alex@elvisti.kiev.ua>
+ 		at Electronni Visti IA, Kiev, Ukraine.
+ 			All rights reserved.
+ 
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. 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.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+
+(31) - M. Warner Losh (targets using libc/posix)
+
+  Copyright (c) 1998, M. Warner Losh <imp@freebsd.org>
+  All rights reserved.
+ 
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. 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.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+(32) - Andrey A. Chernov (targets using libc/posix)
+
+  Copyright (C) 1996 by Andrey A. Chernov, Moscow, Russia.
+  All rights reserved.
+ 
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. 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.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 REGENTS 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.
+
+(33) - Daniel Eischen (targets using libc/posix)
+
+  Copyright (c) 2001 Daniel Eischen <deischen@FreeBSD.org>.
+  All rights reserved.
+ 
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. 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.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 REGENTS 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.
+
+
+(34) - Jon Beniston (only lm32-* targets)
+
+ Contributed by Jon Beniston <jon@beniston.com>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+
+(35) - ARM Ltd (arm and thumb variant targets only)
+
+ Copyright (c) 2009 ARM Ltd
+ All rights reserved.
+ 
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ 2. 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.
+ 3. The name of the company may not be used to endorse or promote
+    products derived from this software without specific prior written
+    permission.
+
+ THIS SOFTWARE IS PROVIDED BY ARM LTD ``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 ARM LTD 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.
+
+(36) - Xilinx, Inc. (microblaze-* and powerpc-* targets)
+
+Copyright (c) 2004, 2009 Xilinx, 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:
+
+1.  Redistributions source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2.  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.
+
+3.  Neither the name of Xilinx 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 HOLDER 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
+HOLDER 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.
+
+
+(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.
+
+(38) National Semiconductor (cr16-* and crx-* targets)
+
+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. 
+
+(39) - Adapteva, Inc. (epiphany-* targets)
+
+Copyright (c) 2011, Adapteva, 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 Adapteva 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 HOLDER 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.
+
+=== lpc21isp License ===
+
+Copyright: (c) Martin Maurer 2003-2014, All rights reserved
+Portions Copyright (c) by Aeolus Development 2004 http://www.aeolusdevelopment.com
+
+This file is part of lpc21isp.
+lpc21isp is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+any later version.
+lpc21isp is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+You should have received a copy of the GNU Lesser General Public License
+and GNU General Public License along with lpc21isp.
+If not, see <http://www.gnu.org/licenses/>. 
+
+=== mx-postlinker License ===
+
+Copyright (C) 2012 by Luigi Rucco and Terraneo Federico
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, see <http://www.gnu.org/licenses/> 
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/Resources/welcome.rtf b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/Resources/welcome.rtf
new file mode 100644
index 0000000000000000000000000000000000000000..d62bfd769836af12144e158c788334a881f58af9
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/Resources/welcome.rtf
@@ -0,0 +1,39 @@
+{\rtf1\ansi\ansicpg1252\cocoartf2759
+\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica-Bold;\f1\fswiss\fcharset0 Helvetica;\f2\fmodern\fcharset238 Courier;
+\f3\fswiss\fcharset0 Helvetica-Oblique;}
+{\colortbl;\red255\green255\blue255;}
+{\*\expandedcolortbl;;}
+{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}}
+{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}}
+\paperw11900\paperh16840\margl1440\margr1440\vieww13100\viewh10880\viewkind0
+\pard\tx686\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
+
+\f0\b\fs28 \cf0 Miosix Toolchain for macOS\
+
+\fs24 (GCC 9.2.0-mp3.2)
+\f1\b0 \
+\
+This package will install the following components to the "
+\f2 \\opt\\arm-miosix-eabi
+\f1 " directory:\
+\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0
+\ls1\ilvl0\cf0 {\listtext	\uc0\u8226 	}GNU GCC with Miosix-specific patches\
+{\listtext	\uc0\u8226 	}GNU Binutils\
+{\listtext	\uc0\u8226 	}GNU GDB\
+{\listtext	\uc0\u8226 	}GNU Make\
+{\listtext	\uc0\u8226 	}Newlib\
+{\listtext	\uc0\u8226 	}lpc21isp\
+{\listtext	\uc0\u8226 	}mx-postlinker\
+\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0
+\cf0 \
+\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
+\cf0 It will also update the current user's shell profile script in order to add "
+\f2 \\opt\\arm-miosix-eabi\\bin
+\f1 " to the PATH (only if the user's shell is 
+\f3\i bash
+\f1\i0 , 
+\f3\i zsh
+\f1\i0  or 
+\f3\i tcsh
+\f1\i0 ).\
+}
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/ScriptsTemplates/postinstall b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/ScriptsTemplates/postinstall
new file mode 100755
index 0000000000000000000000000000000000000000..39fd27f5a4e4e3dd4763617f5a124babb7240d59
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/macos/ScriptsTemplates/postinstall
@@ -0,0 +1,83 @@
+#!/bin/bash
+
+# The following script is inspired by the one used by macports, so credit
+# to them for figuring out how to detect and handle each different shell.
+#  It is tradition for macOS power users to use a shell of their own liking
+# and Apple itself has switched from bash to zsh in macOS 10.15 so we must
+# take that into account.
+
+PREFIX=
+BINPATH=${PREFIX}/bin
+DSCL=/usr/bin/dscl
+
+fail()
+{
+  echo "$1"
+  exit 0
+}
+
+echo 'Modifying PATH for current user.'
+
+# Determine the user's shell, in order to choose an appropriate configuration file we'll be tweaking.
+# Exit nicely if the shell is any other than bash or tcsh, as that's considered non-standard.
+USHELL=$(${DSCL} . -read "/Users/${USER}" shell) || fail "error: could not determine shell name!"
+# leave full path to shell
+USHELL=${USHELL#*shell: }
+
+case "${USHELL}" in
+    */tcsh)
+        echo "Detected tcsh"
+        ENV_COMMAND="setenv"
+        ASSIGN=" "
+        if [[ -f "${HOME}/.tcshrc" ]]; then
+            CONF_FILE=tcshrc
+        elif [[ -f "${HOME}/.cshrc" ]]; then
+            CONF_FILE=cshrc
+        else
+            CONF_FILE=tcshrc
+        fi
+        ;;
+    */bash)
+        echo "Detected bash"
+        ENV_COMMAND="export"
+        ASSIGN="="
+        if [[ -f "${HOME}/.bash_profile" ]]; then
+            CONF_FILE=bash_profile
+        elif [[ -f "${HOME}/.bash_login" ]]; then
+            CONF_FILE=bash_login
+        else
+            CONF_FILE=profile
+        fi
+        ;;
+    */zsh)
+        echo "Detected zsh"
+        ENV_COMMAND="export"
+        ASSIGN="="
+        CONF_FILE="zprofile"
+        ;;
+    *)
+        fail "error: unknown shell ($USHELL)!"
+        ;;
+esac
+
+# Adding our setting to the PATH variable if not already there:
+# Run as the $USER: /usr/bin/su $USER -l
+# Run a command in the shell: -c "/usr/bin/printenv PATH"
+# Only process the last line output (profile may print info): tail -n 1
+# Output each path on its own line: tr ":" "\n"
+# Look for exactly the BINPATH: grep "^${BINPATH}$"
+if /usr/bin/su "${USER}" -l -c "/usr/bin/printenv PATH" | tail -n 1 | tr ":" "\n" | grep "^${BINPATH}$" > /dev/null; then
+    echo "Your shell already has the right PATH environment variable!"
+    exit 0
+fi
+
+if [[ -f "${HOME}/.${CONF_FILE}" ]]; then
+    echo "Backing up ${HOME}/.${CONF_FILE} to ${HOME}/.${CONF_FILE}.tmp"
+    /bin/cp -fp "${HOME}/.${CONF_FILE}" "${HOME}/.${CONF_FILE}.tmp" || fail 'Could not backup profile'
+fi
+{
+    echo -e "# Miosix toolchain PATH addition"
+    echo "${ENV_COMMAND} PATH${ASSIGN}${BINPATH}:\$PATH"
+} >> "${HOME}/.${CONF_FILE}"
+chown "${USER}" "${HOME}/.${CONF_FILE}" || echo "warning: unable to fix permissions on ${HOME}/.${CONF_FILE}!"
+echo "Modification of user PATH completed."
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/windows/MiosixInstaller.iss b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/windows/MiosixInstaller.iss
new file mode 100644
index 0000000000000000000000000000000000000000..200287f2c3013b0c9bb344b9347bbc92670cb45f
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/windows/MiosixInstaller.iss
@@ -0,0 +1,136 @@
+
+#define MyAppName "Miosix Toolchain"
+#define MyAppVersion "GCC 9.2.0mp3.2"
+#define MyAppURL "https://miosix.org"
+#define MyAppGUID "{{5270879A-9707-4BCB-930F-2FC7B5621061}"
+
+[Setup]
+; NOTE: The value of AppId uniquely identifies this application.
+; Do not use the same AppId value in installers for other applications.
+AppId={#MyAppGUID}
+AppName={#MyAppName}
+AppVersion={#MyAppVersion}
+AppPublisherURL={#MyAppURL}
+AppSupportURL={#MyAppURL}
+AppUpdatesURL={#MyAppURL}
+DefaultDirName=C:\arm-miosix-eabi
+; Forcefully install in this directory (GCC hates having spaces in the path)
+DisableDirPage=yes
+DefaultGroupName={#MyAppName}
+; Allow user to disable adding stuff to the start menu
+AllowNoIcons=yes
+; Produce an installer named MiosixToolchainInstaller9.2.0mp3.2.exe
+OutputBaseFilename=MiosixToolchainInstaller9.2.0mp3.2
+Compression=lzma
+; Compress everything into one lzma stream
+SolidCompression=yes
+LicenseFile=license.txt
+; The change in %PATH% takes effect after a restart
+AlwaysRestart=yes
+
+[Languages]
+Name: "english"; MessagesFile: "compiler:Default.isl"
+
+[Files]
+; Source is where the InnoSetup compiler finds the directory to install
+Source: "..\..\dist\opt\arm-miosix-eabi\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
+; NOTE: Don't use "Flags: ignoreversion" on any shared system files
+
+[Icons]
+; Add stuff to the start menu
+Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
+
+; Add C:\arm-miosix-eabi to %PATH%, found on stackoverflow
+; http://stackoverflow.com/questions/3304463/how-do-i-modify-the-path-environment-variable-when-running-an-inno-setup-install
+
+[Registry]
+Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment";    \
+    ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};C:\arm-miosix-eabi\bin"; \
+    Check: NeedsAddPath('C:\arm-miosix-eabi\bin')
+
+[Code]
+
+function NeedsAddPath(Param: string): boolean;
+var
+  OrigPath: string;
+begin
+  if not RegQueryStringValue(HKLM,'SYSTEM\CurrentControlSet\Control\Session Manager\Environment','Path', OrigPath)
+  then begin
+    Result := True;
+    exit;
+  end;
+  // look for the path with leading and trailing semicolon
+  Result := Pos(';' + UpperCase(Param) + ';', ';' + UpperCase(OrigPath) + ';') = 0;
+end;
+
+// Make the installer uninstall the previous version
+// http://stackoverflow.com/questions/2000296/innosetup-how-to-automatically-uninstall-previous-installed-version
+
+function FindUninstaller(): String;
+var
+  UnistallerRegKey1: String;
+  UnistallerRegKey2: String;
+begin
+  // The uninstaller path can be in four places, according to stackoverflow
+  UnistallerRegKey1 := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1');
+  UnistallerRegKey2 := ExpandConstant('Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1');
+  if RegQueryStringValue(HKLM, UnistallerRegKey1, 'UninstallString', Result) then
+  begin
+    Exit;
+  end;
+  if RegQueryStringValue(HKCU, UnistallerRegKey1, 'UninstallString', Result) then
+  begin
+    Exit;
+  end;
+  if RegQueryStringValue(HKLM, UnistallerRegKey2, 'UninstallString', Result) then
+  begin
+    Exit;
+  end;
+  if RegQueryStringValue(HKCU, UnistallerRegKey2, 'UninstallString', Result) then
+  begin
+    Exit;
+  end;
+  Result := '';
+end;
+
+function InitializeSetup(): Boolean;  
+var
+  Uninstaller : String;
+  ResultCode: Integer;
+  i: Integer;
+begin
+  // FileExists doesn't like quotes
+  Uninstaller := RemoveQuotes(FindUninstaller());
+  Log('Uninstaller variable is set to "'+Uninstaller+'"');
+  if not FileExists(Uninstaller) then
+  begin
+    Result := True;
+    Exit;
+  end;
+  if MsgBox('A previous version is already installed. Replace it?', mbInformation, MB_YESNO) <> IDYES then
+  begin
+    Result := False;
+    Exit;
+  end;
+  if Exec(Uninstaller, '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_SHOW, ewWaitUntilTerminated, ResultCode) = False then
+  begin
+    MsgBox('Error: the uninstaller failed', mbError, MB_OK);
+    Result := False;
+    Exit;
+  end;
+  // Workaround for "the uninstaller returns before the uninstaller is deleted"
+  // http://stackoverflow.com/questions/18902060/disk-caching-issue-with-inno-setup
+  i := 0;
+  repeat
+    Sleep(500);
+    i := i + 1;
+  until not FileExists(Uninstaller) or (i >= 30);
+  if (i >= 30) then
+  begin
+    MsgBox('Error: the previous uninstaller was not deleted', mbError, MB_OK);
+    Result := False;
+    Exit;
+  end;
+  Log('Uninstaller completed');
+  Result := True;
+end;
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/windows/license.txt b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/windows/license.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9dc809fc8db609358084ff575579ed6ef1f30114
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/windows/license.txt
@@ -0,0 +1,1788 @@
+The following installer will install:
+GNU GCC with Miosix-specific patches
+GNU Binutils
+GNU GDB
+GNU Make
+Newlib
+lpc21isp
+mx-postlinker
+
+=== GCC, Binutils, GDB, Make License ===
+
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+
+=== GCC, Binutils, GDB Runtime Library License ===
+
+		   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions. 
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version. 
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
+
+=== Newlib License ===
+
+The newlib subdirectory is a collection of software from several sources.
+
+Each file may have its own copyright/license that is embedded in the source 
+file.  Unless otherwise noted in the body of the source file(s), the following copyright
+notices will apply to the contents of the newlib subdirectory:
+
+(1) Red Hat Incorporated
+
+Copyright (c) 1994-2009  Red Hat, Inc. All rights reserved.
+
+This copyrighted material is made available to anyone wishing to use,
+modify, copy, or redistribute it subject to the terms and conditions
+of the BSD License.   This program is distributed in the hope that 
+it will be useful, but WITHOUT ANY WARRANTY expressed or implied, 
+including the implied warranties of MERCHANTABILITY or FITNESS FOR 
+A PARTICULAR PURPOSE.  A copy of this license is available at 
+http://www.opensource.org/licenses. Any Red Hat trademarks that are
+incorporated in the source code or documentation are not subject to
+the BSD License and may only be used or replicated with the express
+permission of Red Hat, Inc.
+
+(2) University of California, Berkeley
+
+Copyright (c) 1981-2000 The Regents of the University of California.
+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 the University 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.
+
+(3) David M. Gay (AT&T 1991, Lucent 1998)
+
+The author of this software is David M. Gay.
+
+Copyright (c) 1991 by AT&T.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose without fee is hereby granted, provided that this entire notice
+is included in all copies of any software which is or includes a copy
+or modification of this software and in all copies of the supporting
+documentation for such software.
+
+THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTY.  IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY
+REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
+OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+
+-------------------------------------------------------------------
+
+The author of this software is David M. Gay.
+
+Copyright (C) 1998-2001 by Lucent Technologies
+All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all
+copies and that both that the copyright notice and this
+permission notice and warranty disclaimer appear in supporting
+documentation, and that the name of Lucent or any of its entities
+not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
+SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+
+
+(4) Advanced Micro Devices
+
+Copyright 1989, 1990 Advanced Micro Devices, Inc.
+
+This software is the property of Advanced Micro Devices, Inc  (AMD)  which
+specifically  grants the user the right to modify, use and distribute this
+software provided this notice is not removed or altered.  All other rights
+are reserved by AMD.
+
+AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS
+SOFTWARE.  IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL
+DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR
+USE OF THIS SOFTWARE.
+
+So that all may benefit from your experience, please report  any  problems
+or  suggestions about this software to the 29K Technical Support Center at
+800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131  in  the  UK,  or
+0031-11-1129 in Japan, toll free.  The direct dial number is 512-462-4118.
+
+Advanced Micro Devices, Inc.
+29K Support Products
+Mail Stop 573
+5900 E. Ben White Blvd.
+Austin, TX 78741
+800-292-9263
+
+(5) 
+
+(6)
+
+(7) Sun Microsystems
+
+Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+
+Developed at SunPro, a Sun Microsystems, Inc. business.
+Permission to use, copy, modify, and distribute this
+software is freely granted, provided that this notice is preserved.
+
+(8) Hewlett Packard
+
+(c) Copyright 1986 HEWLETT-PACKARD COMPANY
+
+To anyone who acknowledges that this file is provided "AS IS"
+without any express or implied warranty:
+    permission to use, copy, modify, and distribute this file
+for any purpose is hereby granted without fee, provided that
+the above copyright notice and this notice appears in all
+copies, and that the name of Hewlett-Packard Company not be
+used in advertising or publicity pertaining to distribution
+of the software without specific, written prior permission.
+Hewlett-Packard Company makes no representations about the
+suitability of this software for any purpose.
+
+(9) Hans-Peter Nilsson
+
+Copyright (C) 2001 Hans-Peter Nilsson
+
+Permission to use, copy, modify, and distribute this software is
+freely granted, provided that the above copyright notice, this notice
+and the following disclaimer are preserved with no changes.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.
+
+(10) Stephane Carrez (m68hc11-elf/m68hc12-elf targets only)
+
+Copyright (C) 1999, 2000, 2001, 2002 Stephane Carrez (stcarrez@nerim.fr)
+
+The authors hereby grant permission to use, copy, modify, distribute,
+and license this software and its documentation for any purpose, provided
+that existing copyright notices are retained in all copies and that this
+notice is included verbatim in any distributions. No written agreement,
+license, or royalty fee is required for any of the authorized uses.
+Modifications to this software may be copyrighted by their authors
+and need not follow the licensing terms described here, provided that
+the new terms are clearly indicated on the first page of each file where
+they apply.
+
+(11) Christopher G. Demetriou
+
+Copyright (c) 2001 Christopher G. Demetriou
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+
+(12) SuperH, Inc.
+
+Copyright 2002 SuperH, Inc. All rights reserved
+
+This software is the property of SuperH, Inc (SuperH) which specifically
+grants the user the right to modify, use and distribute this software
+provided this notice is not removed or altered.  All other rights are
+reserved by SuperH.
+
+SUPERH MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO
+THIS SOFTWARE.  IN NO EVENT SHALL SUPERH BE LIABLE FOR INDIRECT, SPECIAL,
+INCIDENTAL OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH OR ARISING FROM
+THE FURNISHING, PERFORMANCE, OR USE OF THIS SOFTWARE.
+
+So that all may benefit from your experience, please report any problems
+or suggestions about this software to the SuperH Support Center via
+e-mail at softwaresupport@superh.com .
+
+SuperH, Inc.
+405 River Oaks Parkway
+San Jose
+CA 95134
+USA
+
+(13) Royal Institute of Technology
+
+Copyright (c) 1999 Kungliga Tekniska Högskolan
+(Royal Institute of Technology, Stockholm, Sweden).
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+2. 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.
+
+3. Neither the name of KTH 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 KTH AND ITS 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 KTH OR ITS 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.
+
+(14) Alexey Zelkin
+
+Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+(15) Andrey A. Chernov
+
+Copyright (C) 1997 by Andrey A. Chernov, Moscow, Russia.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 REGENTS 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.
+
+(16) FreeBSD
+
+Copyright (c) 1997-2002 FreeBSD Project.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+(17) S. L. Moshier
+
+Author:  S. L. Moshier.
+
+Copyright (c) 1984,2000 S.L. Moshier
+
+Permission to use, copy, modify, and distribute this software for any
+purpose without fee is hereby granted, provided that this entire notice
+is included in all copies of any software which is or includes a copy
+or modification of this software and in all copies of the supporting
+documentation for such software.
+
+THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTY.  IN PARTICULAR,  THE AUTHOR MAKES NO REPRESENTATION
+OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
+SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+
+(18) Citrus Project
+
+Copyright (c)1999 Citrus Project,
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+(19) Todd C. Miller
+
+Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED ``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 AUTHOR 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.
+
+(20) DJ Delorie (i386)
+Copyright (C) 1991 DJ Delorie
+All rights reserved.
+
+Redistribution, modification, and use in source and binary forms is permitted
+provided that the above copyright notice and following paragraph are
+duplicated in all such forms.
+
+This file is distributed WITHOUT ANY WARRANTY; without even the implied
+warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+(21) Free Software Foundation LGPL License (*-linux* targets only)
+
+   Copyright (C) 1990-1999, 2000, 2001    Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301 USA.
+
+(22) Xavier Leroy LGPL License (i[3456]86-*-linux* targets only)
+
+Copyright (C) 1996 Xavier Leroy (Xavier.Leroy@inria.fr)
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+(23) Intel (i960)
+
+Copyright (c) 1993 Intel Corporation
+
+Intel hereby grants you permission to copy, modify, and distribute this
+software and its documentation.  Intel grants this permission provided
+that the above copyright notice appears in all copies and that both the
+copyright notice and this permission notice appear in supporting
+documentation.  In addition, Intel grants this permission provided that
+you prominently mark as "not part of the original" any modifications
+made to this software or documentation, and that the name of Intel
+Corporation not be used in advertising or publicity pertaining to
+distribution of the software or the documentation without specific,
+written prior permission.
+
+Intel Corporation provides this AS IS, WITHOUT ANY WARRANTY, EXPRESS OR
+IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE.  Intel makes no guarantee or
+representations regarding the use of, or the results of the use of,
+the software and documentation in terms of correctness, accuracy,
+reliability, currentness, or otherwise; and you rely on the software,
+documentation and results solely at your own risk.
+
+IN NO EVENT SHALL INTEL BE LIABLE FOR ANY LOSS OF USE, LOSS OF BUSINESS,
+LOSS OF PROFITS, INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES
+OF ANY KIND.  IN NO EVENT SHALL INTEL'S TOTAL LIABILITY EXCEED THE SUM
+PAID TO INTEL FOR THE PRODUCT LICENSED HEREUNDER.
+
+(24) Hewlett-Packard  (hppa targets only)
+
+(c) Copyright 1986 HEWLETT-PACKARD COMPANY
+
+To anyone who acknowledges that this file is provided "AS IS"
+without any express or implied warranty:
+    permission to use, copy, modify, and distribute this file
+for any purpose is hereby granted without fee, provided that
+the above copyright notice and this notice appears in all
+copies, and that the name of Hewlett-Packard Company not be
+used in advertising or publicity pertaining to distribution
+of the software without specific, written prior permission.
+Hewlett-Packard Company makes no representations about the
+suitability of this software for any purpose.
+
+(25) Henry Spencer (only *-linux targets)
+
+Copyright 1992, 1993, 1994 Henry Spencer.  All rights reserved.
+This software is not subject to any license of the American Telephone
+and Telegraph Company or of the Regents of the University of California.
+
+Permission is granted to anyone to use this software for any purpose on
+any computer system, and to alter it and redistribute it, subject
+to the following restrictions:
+
+1. The author is not responsible for the consequences of use of this
+   software, no matter how awful, even if they arise from flaws in it.
+
+2. The origin of this software must not be misrepresented, either by
+   explicit claim or by omission.  Since few users ever read sources,
+   credits must appear in the documentation.
+
+3. Altered versions must be plainly marked as such, and must not be
+   misrepresented as being the original software.  Since few users
+   ever read sources, credits must appear in the documentation.
+
+4. This notice may not be removed or altered.
+
+(26) Mike Barcroft
+
+Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+(27) Konstantin Chuguev (--enable-newlib-iconv)
+
+Copyright (c) 1999, 2000
+   Konstantin Chuguev.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+   iconv (Charset Conversion Library) v2.0
+
+(28) Artem Bityuckiy (--enable-newlib-iconv)
+
+Copyright (c) 2003, Artem B. Bityuckiy, SoftMine Corporation.
+Rights transferred to Franklin Electronic Publishers.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. 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.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+(29) IBM, Sony, Toshiba (only spu-* targets)
+
+  (C) Copyright 2001,2006,
+  International Business Machines Corporation,
+  Sony Computer Entertainment, Incorporated,
+  Toshiba Corporation,
+
+  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 names of the copyright holders nor the names of their
+      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.
+
+(30) - Alex Tatmanjants (targets using libc/posix)
+
+  Copyright (c) 1995 Alex Tatmanjants <alex@elvisti.kiev.ua>
+ 		at Electronni Visti IA, Kiev, Ukraine.
+ 			All rights reserved.
+ 
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. 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.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+
+(31) - M. Warner Losh (targets using libc/posix)
+
+  Copyright (c) 1998, M. Warner Losh <imp@freebsd.org>
+  All rights reserved.
+ 
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. 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.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+(32) - Andrey A. Chernov (targets using libc/posix)
+
+  Copyright (C) 1996 by Andrey A. Chernov, Moscow, Russia.
+  All rights reserved.
+ 
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. 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.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 REGENTS 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.
+
+(33) - Daniel Eischen (targets using libc/posix)
+
+  Copyright (c) 2001 Daniel Eischen <deischen@FreeBSD.org>.
+  All rights reserved.
+ 
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. 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.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 REGENTS 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.
+
+
+(34) - Jon Beniston (only lm32-* targets)
+
+ Contributed by Jon Beniston <jon@beniston.com>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+
+(35) - ARM Ltd (arm and thumb variant targets only)
+
+ Copyright (c) 2009 ARM Ltd
+ All rights reserved.
+ 
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ 2. 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.
+ 3. The name of the company may not be used to endorse or promote
+    products derived from this software without specific prior written
+    permission.
+
+ THIS SOFTWARE IS PROVIDED BY ARM LTD ``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 ARM LTD 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.
+
+(36) - Xilinx, Inc. (microblaze-* and powerpc-* targets)
+
+Copyright (c) 2004, 2009 Xilinx, 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:
+
+1.  Redistributions source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2.  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.
+
+3.  Neither the name of Xilinx 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 HOLDER 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
+HOLDER 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.
+
+
+(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.
+
+(38) National Semiconductor (cr16-* and crx-* targets)
+
+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. 
+
+(39) - Adapteva, Inc. (epiphany-* targets)
+
+Copyright (c) 2011, Adapteva, 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 Adapteva 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 HOLDER 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.
+
+=== lpc21isp License ===
+
+Copyright: (c) Martin Maurer 2003-2014, All rights reserved
+Portions Copyright (c) by Aeolus Development 2004 http://www.aeolusdevelopment.com
+
+This file is part of lpc21isp.
+lpc21isp is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+any later version.
+lpc21isp is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+You should have received a copy of the GNU Lesser General Public License
+and GNU General Public License along with lpc21isp.
+If not, see <http://www.gnu.org/licenses/>. 
+
+=== mx-postlinker License ===
+
+Copyright (C) 2012 by Luigi Rucco and Terraneo Federico
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, see <http://www.gnu.org/licenses/> 
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/windows/rm.c b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/windows/rm.c
new file mode 100644
index 0000000000000000000000000000000000000000..c130c36371d1c4331f5b0a703ce9e2a7e7430435
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/installers/windows/rm.c
@@ -0,0 +1,17 @@
+/*
+ * FIXME: try to crosscompile coreutils for windows, so as to get a real rm.exe
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+int main(int argc, char *argv[])
+{
+	int i;
+	for(i=0;i<argc;i++)
+	{
+		if(strlen(argv[i])>0 && argv[i][0]!='-')
+			remove(argv[i]);
+	}
+	return 0;
+}
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/lpc21isp_148_src.zip b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/lpc21isp_148_src.zip
new file mode 100644
index 0000000000000000000000000000000000000000..ccded9c388e0a9673c9a2fd6733035a325835e34
Binary files /dev/null and b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/lpc21isp_148_src.zip differ
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/mx-postlinker/Makefile b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/mx-postlinker/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..8806a6182bfd37088655cd3612804504c8b645d5
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/mx-postlinker/Makefile
@@ -0,0 +1,20 @@
+CXX:= g++
+CXXFLAGS:= -MMD -MP -O2 -c
+OBJ:= postlinker.o main.o
+
+#create program target
+
+mx-postlinker: $(OBJ)
+	$(CXX) -o $@${SUFFIX} $(OBJ)
+
+install: mx-postlinker
+	cp mx-postlinker${SUFFIX} $(INSTALL_DIR)
+
+clean:
+	-rm mx-postlinker${SUFFIX} *.o *.d
+
+%.o: %.cpp
+	$(CXX) $(CXXFLAGS) $? -o $@
+
+#pull in dependecy info for existing .o files
+-include $(OBJ:.o=.d)
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/mx-postlinker/elf_types.h b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/mx-postlinker/elf_types.h
new file mode 100644
index 0000000000000000000000000000000000000000..8fc3525d6a1a11d7119779bdb147563592101d6b
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/mx-postlinker/elf_types.h
@@ -0,0 +1,208 @@
+/***************************************************************************
+ *   Copyright (C) 2012 by Luigi Rucco and Terraneo Federico               *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   As a special exception, if other files instantiate templates or use   *
+ *   macros or inline functions from this file, or you compile this file   *
+ *   and link it with other works to produce a work based on this file,    *
+ *   this file does not by itself cause the resulting work to be covered   *
+ *   by the GNU General Public License. However the source code for this   *
+ *   file must still be made available in accordance with the GNU General  *
+ *   Public License. This exception does not invalidate any other reasons  *
+ *   why a work based on this file might be covered by the GNU General     *
+ *   Public License.                                                       *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, see <http://www.gnu.org/licenses/>   *
+ ***************************************************************************/
+
+#pragma once
+
+#include <inttypes.h>
+
+namespace miosix {
+
+// elf-specific types
+typedef uint32_t Elf32_Word;
+typedef int32_t  Elf32_Sword;
+typedef uint16_t Elf32_Half;
+typedef uint32_t Elf32_Off;
+typedef uint32_t Elf32_Addr;
+
+// Size of e_ident in the elf header
+const int EI_NIDENT=16;
+
+/*
+ * Elf header
+ */
+struct Elf32_Ehdr
+{
+    unsigned char e_ident[EI_NIDENT]; // Ident bytes
+    Elf32_Half e_type;                // File type, any of the ET_* constants
+    Elf32_Half e_machine;             // Target machine
+    Elf32_Word e_version;             // File version
+    Elf32_Addr e_entry;               // Start address
+    Elf32_Off e_phoff;                // Phdr file offset
+    Elf32_Off e_shoff;                // Shdr file offset
+    Elf32_Word e_flags;               // File flags
+    Elf32_Half e_ehsize;              // Sizeof ehdr
+    Elf32_Half e_phentsize;           // Sizeof phdr
+    Elf32_Half e_phnum;               // Number phdrs
+    Elf32_Half e_shentsize;           // Sizeof shdr
+    Elf32_Half e_shnum;               // Number shdrs
+    Elf32_Half e_shstrndx;            // Shdr string index
+} __attribute__((packed));
+
+// Values for e_type
+const Elf32_Half ET_NONE = 0; // Unknown type
+const Elf32_Half ET_REL  = 1; // Relocatable
+const Elf32_Half ET_EXEC = 2; // Executable
+const Elf32_Half ET_DYN  = 3; // Shared object
+const Elf32_Half ET_CORE = 4; // Core file
+
+// Values for e_version
+const Elf32_Word EV_CURRENT = 1;
+
+// Values for e_machine
+const Elf32_Half EM_ARM  = 0x28;
+
+// Values for e_flags
+const Elf32_Word EF_ARM_EABIMASK   = 0xff000000;
+const Elf32_Word EF_ARM_EABI_VER5  = 0x05000000;
+const Elf32_Word EF_ARM_VFP_FLOAT  = 0x400;
+const Elf32_Word EF_ARM_SOFT_FLOAT = 0x200;
+
+/*
+ * Elf program header
+ */
+struct Elf32_Phdr
+{
+    Elf32_Word p_type;   // Program header type, any of the PH_* constants
+    Elf32_Off  p_offset; // Segment start offset in file
+    Elf32_Addr p_vaddr;  // Segment virtual address
+    Elf32_Addr p_paddr;  // Segment physical address
+    Elf32_Word p_filesz; // Segment size in file
+    Elf32_Word p_memsz;  // Segment size in memory
+    Elf32_Word p_flags;  // Segment flasgs, any of the PF_* constants
+    Elf32_Word p_align;  // Segment alignment requirements
+} __attribute__((packed));
+
+// Values for p_type
+const Elf32_Word PT_NULL    = 0; // Unused array entry
+const Elf32_Word PT_LOAD    = 1; // Loadable segment
+const Elf32_Word PT_DYNAMIC = 2; // Segment is the dynamic section
+const Elf32_Word PT_INTERP  = 3; // Shared library interpreter
+const Elf32_Word PT_NOTE    = 4; // Auxiliary information
+
+// Values for p_flags
+const Elf32_Word PF_X = 0x1; // Execute
+const Elf32_Word PF_W = 0x2; // Write
+const Elf32_Word PF_R = 0x4; // Read
+
+/*
+ * Entries of the DYNAMIC segment
+ */
+struct Elf32_Dyn
+{
+    Elf32_Sword d_tag;    // Type of entry
+    union {
+        Elf32_Word d_val; // Value of entry, if number
+        Elf32_Addr d_ptr; // Value of entry, if offset into the file
+    } d_un;
+} __attribute__((packed));
+
+// Values for d_tag
+const int DT_NULL         = 0;
+const int DT_NEEDED       = 1;
+const int DT_PLTRELSZ     = 2;
+const int DT_PLTGOT       = 3;
+const int DT_HASH         = 4;
+const int DT_STRTAB       = 5;
+const int DT_SYMTAB       = 6;
+const int DT_RELA         = 7;
+const int DT_RELASZ       = 8;
+const int DT_RELAENT      = 9;
+const int DT_STRSZ        = 10;
+const int DT_SYMENT       = 11;
+const int DT_INIT         = 12;
+const int DT_FINI         = 13;
+const int DT_SONAME       = 14;
+const int DT_RPATH        = 15;
+const int DT_SYMBOLIC     = 16;
+const int DT_REL          = 17;
+const int DT_RELSZ        = 18;
+const int DT_RELENT       = 19;
+const int DT_PLTREL       = 20;
+const int DT_DEBUG        = 21;
+const int DT_TEXTREL      = 22;
+const int DT_JMPREL       = 23;
+const int DT_BINDNOW      = 24;
+const int DT_MX_RAMSIZE   = 0x10000000; //Miosix specific, RAM size
+const int DT_MX_STACKSIZE = 0x10000001; //Miosix specific, STACK size
+const int DT_MX_ABI       = 0x736f694d; //Miosix specific, ABI version
+const unsigned int DV_MX_ABI_V0 = 0x00007869; //Miosix specific, ABI version 0
+const unsigned int DV_MX_ABI_V1 = 0x01007869; //Miosix specific, ABI version 1
+
+/*
+ * Relocation entries
+ */
+struct Elf32_Rel
+{
+    Elf32_Addr r_offset;
+    Elf32_Word r_info;
+} __attribute__((packed));
+
+// To extract the two fields of r_info
+#define ELF32_R_SYM(i) ((i)>>8)
+#define ELF32_R_TYPE(i) ((unsigned char)(i))
+
+// Possible values for ELF32_R_TYPE(r_info)
+const unsigned char R_ARM_NONE     = 0;
+const unsigned char R_ARM_ABS32    = 2;
+const unsigned char R_ARM_RELATIVE = 23;
+
+/*
+ * Elf Section header
+ */
+struct Elf32_Shdr
+{
+  Elf32_Word sh_name;
+  Elf32_Word sh_type;
+  Elf32_Word sh_flags;
+  Elf32_Addr sh_addr;
+  Elf32_Off  sh_offset;
+  Elf32_Word sh_size;
+  Elf32_Word sh_link;
+  Elf32_Word sh_info;
+  Elf32_Word sh_addralign;
+  Elf32_Word sh_entsize;
+};
+
+// sh_type
+const int SHT_NULL     =   0;               /* inactive */
+const int SHT_PROGBITS =   1;               /* program defined information */
+const int SHT_SYMTAB   =   2;               /* symbol table section */
+const int SHT_STRTAB   =   3;               /* string table section */
+const int SHT_RELA     =   4;               /* relocation section with addends*/
+const int SHT_HASH     =   5;               /* symbol hash table section */
+const int SHT_DYNAMIC  =   6;               /* dynamic section */
+const int SHT_NOTE     =   7;               /* note section */
+const int SHT_NOBITS   =   8;               /* no space section */
+const int SHT_REL      =   9;               /* relation section without addends */
+const int SHT_SHLIB    =   10;              /* reserved - purpose unknown */
+const int SHT_DYNSYM   =   11;              /* dynamic symbol table section */
+const int SHT_LOPROC   =   0x70000000;      /* reserved range for processor */
+const int SHT_HIPROC   =   0x7fffffff;      /* specific section header types */
+const int SHT_LOUSER   =   0x80000000;      /* reserved range for application */
+const int SHT_HIUSER   =   0xffffffff;      /* specific indexes */
+
+} //namespace miosix
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/mx-postlinker/main.cpp b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/mx-postlinker/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..cbec798f53cb07c0f00e24137070c3f15cf1a260
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/mx-postlinker/main.cpp
@@ -0,0 +1,52 @@
+/***************************************************************************
+ *   Copyright (C) 2012 by Luigi Rucco and Terraneo Federico               *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, see <http://www.gnu.org/licenses/>   *
+ ***************************************************************************/
+
+#include <iostream>
+#include "postlinker.h"
+
+using namespace std;
+
+int main(int argc, char *argv[])
+{
+    int stackSize=-1;
+    int ramSize=-1;
+    string prog;
+    bool strip=false;
+    for(int i=1;i<argc;i++)
+    {
+        string opt(argv[i]);
+        if(opt=="--strip-sectheader")
+            strip=true;
+        else if(opt.substr(0,10)=="--ramsize=")
+            ramSize=atoi(opt.substr(10).c_str());
+        else if(opt.substr(0,12)=="--stacksize=")
+            stackSize=atoi(opt.substr(12).c_str());
+        else
+            prog=opt;
+    }
+    if(stackSize<=0 || ramSize<=0 || prog=="")
+    {
+        cerr<<"usage:"<<endl<<"mx-postlinker prog.elf --ramsize=<size>"
+            <<" --stacksize=<size> [--strip-sectheader]"<<endl;
+        return 1;
+    }
+    PostLinker pl(prog);
+    if(strip) pl.removeSectionHeaders();
+    pl.setMxTags(stackSize,ramSize);
+    pl.writeFile();
+    return 0;
+}
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/mx-postlinker/postlinker.cpp b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/mx-postlinker/postlinker.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d27595e0369e41ffad6a4e26851ba0b6085ed634
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/mx-postlinker/postlinker.cpp
@@ -0,0 +1,120 @@
+/***************************************************************************
+ *   Copyright (C) 2012 by Luigi Rucco and Terraneo Federico               *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, see <http://www.gnu.org/licenses/>   *
+ ***************************************************************************/
+
+#include "postlinker.h"
+
+using namespace std;
+
+PostLinker::PostLinker(string s) 
+{
+    elfFile=s;
+    ifstream f(s.c_str(),ios::binary);
+    if(!f.good()) throw runtime_error("File not found");
+    f.seekg(0,ios::end);
+    size=f.tellg();
+    newSize=size;
+    f.seekg(0,ios::beg);
+    int roundedSize=(size+sizeof(Elf32_Word)-1) & ~(sizeof(Elf32_Word)-1);
+    elf=new Elf32_Word[roundedSize/sizeof(Elf32_Word)];
+    memset(elf,0,roundedSize);
+    f.read(reinterpret_cast<char*>(elf),size);
+    static const char magic[EI_NIDENT]={0x7f,'E','L','F',1,1,1};
+    if(size<sizeof(Elf32_Ehdr) || memcmp(getElfHeader()->e_ident,magic,EI_NIDENT))
+        throw runtime_error("Unrecognized format");
+}
+
+void PostLinker::removeSectionHeaders()
+{ 
+    newSize=getElfSection(getElfHeader()->e_shstrndx)->sh_offset;
+    getElfHeader()->e_shoff=0;
+    getElfHeader()->e_shnum=0;
+    getElfHeader()->e_shentsize=0;
+    getElfHeader()->e_shstrndx=0;
+}
+
+void PostLinker::setMxTags(int stackSize, int ramSize)
+{
+    if(stackSize & 0x3)
+        throw runtime_error("stack size not four word aligned");
+    if(ramSize & 0x3)
+        throw runtime_error("ram size not four word aligned");
+    if(getSizeOfDataAndBss()+stackSize>ramSize)
+        throw runtime_error(".data + .bss + stack exceeds ramsize");
+    getElfHeader()->e_type=ET_EXEC; //Force ET_EXEC
+    int ctr=0;
+    pair<Elf32_Dyn *,Elf32_Word> dyn=getDynamic();
+    for(int i=0;i<dyn.second;i++,dyn.first++)
+    {
+        if(dyn.first->d_tag!=DT_NULL) continue;
+        switch(ctr)
+        {
+            case 0:
+                dyn.first->d_tag=DT_MX_RAMSIZE;
+                dyn.first->d_un.d_val=ramSize;
+                break;
+            case 1:
+                dyn.first->d_tag=DT_MX_STACKSIZE;
+                dyn.first->d_un.d_val=stackSize;
+                break;
+            case 2:
+                dyn.first->d_tag=DT_MX_ABI;
+                dyn.first->d_un.d_val=DV_MX_ABI_V1;
+                return;
+        }
+        ctr++;     
+    }
+    throw runtime_error("Not enough null entries");
+}
+
+void PostLinker::writeFile()
+{
+    ofstream o(elfFile.c_str(),ios::binary);
+    o.write(reinterpret_cast<char*>(elf),newSize);
+}
+
+pair<Elf32_Dyn *,Elf32_Word> PostLinker::getDynamic()
+{
+    for(int i=0;i<getElfHeader()->e_phnum;i++)
+    {
+        Elf32_Phdr* phdr=getElfSegment(i);
+        if(phdr->p_type!=PT_DYNAMIC) continue;
+        unsigned char *base=reinterpret_cast<unsigned char*>(elf);
+        unsigned int offset=phdr->p_offset;
+        if(offset+phdr->p_memsz>size)
+            throw std::runtime_error("Dynamic outside file bounds");
+        return make_pair(reinterpret_cast<Elf32_Dyn*>(base+offset),
+                phdr->p_memsz/sizeof(Elf32_Dyn));
+    }
+    throw runtime_error("Dynamic not found");
+}
+
+int PostLinker::getSizeOfDataAndBss()
+{
+    for(int i=0;i<getElfHeader()->e_phnum;i++)
+    {
+        Elf32_Phdr* phdr=getElfSegment(i);
+        if(phdr->p_type!=PT_LOAD) continue;
+        if(!(phdr->p_flags & PF_W) || (phdr->p_flags & PF_X)) continue;
+        return phdr->p_memsz;
+    }
+    throw runtime_error(".data/.bss not found");
+}
+
+PostLinker::~PostLinker() 
+{
+    delete[] elf;
+}
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/mx-postlinker/postlinker.h b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/mx-postlinker/postlinker.h
new file mode 100644
index 0000000000000000000000000000000000000000..ea6e3f4029822d84d7e8942f6412d15461c6340d
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/mx-postlinker/postlinker.h
@@ -0,0 +1,129 @@
+/***************************************************************************
+ *   Copyright (C) 2012 by Luigi Rucco and Terraneo Federico               *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, see <http://www.gnu.org/licenses/>   *
+ ***************************************************************************/
+
+#ifndef POSTLINKER_H
+#define	POSTLINKER_H
+
+#include "elf_types.h"
+#include <cstring>
+#include <iostream>
+#include <exception>
+#include <stdexcept>
+#include <utility>
+#include <cstdlib>
+#include <fstream>
+
+using namespace miosix;
+
+/**
+ * This class performs transformations on an elf file,
+ * including stripping the section header and associated
+ * string table, and setting some Miosix specific options
+ * in the dynamic segment
+ */
+class PostLinker
+{
+public:
+    /**
+     * Constructor
+     * \param s elf file name 
+     */
+    PostLinker(std::string s);
+
+    /**
+     * Remove the section header and string table from the elf file
+     */
+    void removeSectionHeaders();
+
+    /**
+     * Set the Miosix specific options in the dynamic segment
+     * \param stackSize size that the runtime linker-loader will reserve for
+     * the stack of the process
+     * \param ramSize size of the process RAM image that the runtime
+     * linker-loader will allocate for the process
+     */
+    void setMxTags(int stackSize, int ramSize);
+
+    /**
+     * Write changes to disk
+     */
+    void writeFile();
+
+    /**
+     * Destructor
+     */
+    ~PostLinker();
+    
+private:
+    PostLinker(const PostLinker&);
+    PostLinker& operator= (const PostLinker&);
+
+    /**
+     * \return the elf header
+     */
+    Elf32_Ehdr* getElfHeader()
+    {
+        return reinterpret_cast<Elf32_Ehdr*>(elf);
+    }
+
+    /**
+     * Allows to retrieve a section header given its index
+     * \param index a index from 0 to getElfHeader()->e_shnum
+     * \return the corresponding section header
+     */
+    Elf32_Shdr* getElfSection(int index)
+    {
+        unsigned char *base=reinterpret_cast<unsigned char*>(elf);
+        unsigned int offset=getElfHeader()->e_shoff+index*sizeof(Elf32_Shdr);
+        if(offset+sizeof(Elf32_Shdr)>size)
+            throw std::runtime_error("Elf section outside file bounds");
+        return reinterpret_cast<Elf32_Shdr*>(base+offset);
+    }
+    
+    /**
+     * Allows to retrieve a segment header given its index
+     * \param index a index from 0 to getElfHeader()->e_phnum
+     * \return the corresponding secgment header
+     */
+    Elf32_Phdr *getElfSegment(int index)
+    {
+        unsigned char *base=reinterpret_cast<unsigned char*>(elf);
+        unsigned int offset=getElfHeader()->e_phoff+index*sizeof(Elf32_Phdr);
+        if(offset+sizeof(Elf32_Phdr)>size)
+            throw std::runtime_error("Elf segment outside file bounds");
+        return reinterpret_cast<Elf32_Phdr*>(base+offset);
+    }
+    
+    /**
+     * \return the size of the segment that is loaded in RAM, with
+     * .data and .bss
+     */
+    int getSizeOfDataAndBss();
+    
+    /**
+     * \return a pair with a pointer to the first element in the dynamic
+     * segment and the number of entries in the dynamic segment
+     */
+    std::pair<Elf32_Dyn *,Elf32_Word> getDynamic();
+    
+    Elf32_Word* elf;
+    int size;
+    int newSize;
+    std::string elfFile;
+};
+
+#endif	//POSTLINKER_H
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/binutils.patch b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/binutils.patch
new file mode 100644
index 0000000000000000000000000000000000000000..de09528007d8986ce2e0780e3afab986b04a7fe6
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/binutils.patch
@@ -0,0 +1,112 @@
+diff -ruN binutils-2.32-old/bfd/elf32-arm.c binutils-2.32/bfd/elf32-arm.c
+--- binutils-2.32-old/bfd/elf32-arm.c	2019-01-28 18:09:04.000000000 +0100
++++ binutils-2.32/bfd/elf32-arm.c	2020-07-19 15:10:11.522594490 +0200
+@@ -1853,6 +1853,24 @@
+ 	 FALSE),		/* pcrel_offset */
+ };
+ 
++static reloc_howto_type elf32_arm_howto_table_miosix[1] =
++{
++/* 32 bit absolute */
++  HOWTO (R_ARM_MIOSIXPROC_TGT2,		/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 32,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_bitfield,/* complain_on_overflow */
++	 bfd_elf_generic_reloc,	/* special_function */
++	 "R_ARM_MIOSIXPROC_TGT2",		/* name */
++	 FALSE,			/* partial_inplace */
++	 0xffffffff,		/* src_mask */
++	 0xffffffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++};
++
+ /* 249-255 extended, currently unused, relocations:  */
+ static reloc_howto_type elf32_arm_howto_table_3[4] =
+ {
+@@ -1922,6 +1940,10 @@
+   if (r_type >= R_ARM_IRELATIVE
+       && r_type < R_ARM_IRELATIVE + ARRAY_SIZE (elf32_arm_howto_table_2))
+     return &elf32_arm_howto_table_2[r_type - R_ARM_IRELATIVE];
++  
++  if (r_type >= R_ARM_MIOSIXPROC_TGT2
++      && r_type < R_ARM_MIOSIXPROC_TGT2 + ARRAY_SIZE (elf32_arm_howto_table_miosix))
++    return &elf32_arm_howto_table_miosix[r_type - R_ARM_MIOSIXPROC_TGT2];
+ 
+   if (r_type >= R_ARM_RREL32
+       && r_type < R_ARM_RREL32 + ARRAY_SIZE (elf32_arm_howto_table_3))
+@@ -8995,6 +9017,8 @@
+     globals->target2_reloc = R_ARM_ABS32;
+   else if (strcmp (params->target2_type, "got-rel") == 0)
+     globals->target2_reloc = R_ARM_GOT_PREL;
++  else if (strcmp (params->target2_type, "mx-data-rel") == 0) //Miosix OS specific
++    globals->target2_reloc = R_ARM_MIOSIXPROC_TGT2;
+   else
+     {
+       _bfd_error_handler (_("invalid TARGET2 relocation type '%s'"),
+@@ -10431,6 +10455,7 @@
+     case R_ARM_XPC25:
+     case R_ARM_PREL31:
+     case R_ARM_PLT32:
++    case R_ARM_MIOSIXPROC_TGT2:
+       /* Handle relocations which should use the PLT entry.  ABS32/REL32
+ 	 will use the symbol's value, which may point to a PLT entry, but we
+ 	 don't need to handle that here.  If we created a PLT entry, all
+@@ -10480,7 +10505,8 @@
+ 	  && r_type != R_ARM_CALL
+ 	  && r_type != R_ARM_JUMP24
+ 	  && r_type != R_ARM_PREL31
+-	  && r_type != R_ARM_PLT32)
++	  && r_type != R_ARM_PLT32
++	  && r_type != R_ARM_MIOSIXPROC_TGT2) /* No run-time resolution needed */
+ 	{
+ 	  Elf_Internal_Rela outrel;
+ 	  bfd_boolean skip, relocate;
+@@ -10793,6 +10819,33 @@
+ 	  if (branch_type == ST_BRANCH_TO_THUMB)
+ 	    value |= 1;
+ 	  break;
++
++	/*
++	 * R_ARM_MIOSIXPROC_TGT2 is used in Miosix processes to implement TARGET2
++	 * static relocations for C++ exception unwinding tables.
++	 * In Miosix processes, pointers in exception unwinding tables are of the
++	 * DW_EH_PE_datarel type as there's no fixed gap between .ARM.extab and
++	 * .data sections. The unwinding code sums the base of the data segment to
++	 * the statically relocated offset by calling _Unwind_GetDataRelBase.
++	 * Since this is done in code, no run-time relocation should be output in
++	 * the binary file against .ARM.extab which can be readonly.
++	 * Apparently, all the required support was unimplemented in GCC and
++	 * although binutils provided a command-line option to select how TARGET2
++	 * relocations should be treated, the available ones couldn't be made to
++	 * work. Even more, although I tried to implement TARGET2 using an existing
++	 * relocations, I couldn't and I had to add a new one, R_ARM_MIOSIXPROC_TGT2
++	 * which is basically the same as R_ARM_ABS32, except that
++	 * - no run-time relocation should be present
++	 * - 0x4000000 (Miosix processes' DATA_BASE in the linker script) should be
++	 *   subtracted to encode only the data-relative offset
++	 *
++	 * See processes-patch.md in the Miosix kernel tree for the big picture.
++	 */
++	case R_ARM_MIOSIXPROC_TGT2:
++	  value += addend - 0x40000000; /* subtract DATA_BASE */
++	  if (branch_type == ST_BRANCH_TO_THUMB)
++	    value |= 1;
++	  break;
+ 
+ 	case R_ARM_ABS32_NOI:
+ 	  value += addend;
+diff -ruN binutils-2.32-old/include/elf/arm.h binutils-2.32/include/elf/arm.h
+--- binutils-2.32-old/include/elf/arm.h	2019-01-19 17:01:33.000000000 +0100
++++ binutils-2.32/include/elf/arm.h	2020-07-19 11:39:39.783870092 +0200
+@@ -250,6 +250,8 @@
+   RELOC_NUMBER (R_ARM_TLS_LDM32_FDPIC,  166)
+   RELOC_NUMBER (R_ARM_TLS_IE32_FDPIC,   167)
+ 
++  RELOC_NUMBER (R_ARM_MIOSIXPROC_TGT2,  248)   /* data-relative TARGET2 in Miosix processes */
++  
+   /* Extensions?  R=read-only?  */
+   RELOC_NUMBER (R_ARM_RXPC25,         	249)
+   RELOC_NUMBER (R_ARM_RSBREL32,       	250)
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/doc/gcc.txt b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/doc/gcc.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6c8149d4cbd0374c71e17c279b34319977090dd6
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/doc/gcc.txt
@@ -0,0 +1,197 @@
+Rationale for gcc patch
+-----------------------
+
+This patch does the following:
+
+1) It modifies the config/gthr.m4 and libgcc/configure files to add
+   gthr-miosix.h to the build system.
+
+2) It modifies gcc/config.gcc to add the miosix-eabi.h file and t-arm-miosix to
+   the build system.
+
+3) It modifies gcc/configure and gcc/configure.ac to accept the parameter
+   --enable-threads=miosix
+
+4) It adds gcc/config/arm/miosix-eabi.h which defines the builtin _MIOSIX and
+   the miosix patch version.
+
+5) It adds gcc/config/arm/t-arm-miosix to enable multilibs for
+   fpie/msingle-pic-base to implement processes. It also enables multilibs for
+   ARM architecture variants relevant for microcontrollers.
+
+6) Given that Miosix does not have a thread local storage API, but it is
+   required in a couple of places related to C++ exception handling
+   (that is, gcc/unwind-sjlj.c and libsupc++/eh_globals.cc), those files have
+   been modified removing functions to get/set the thread-local variables.
+   Those functions are now implemented within Miosix, in kernel/syscalls.cpp
+
+7) It adds the gcc/gthr-miosix.h specifying the miosix thread model, basically
+   telling the compiler that threadsafe code is required and pointing it to
+   the routines it needs to do so (standard posix routines). Without this
+   modification, arm-miosix-eabi-gcc -v would report "Thread model: single"
+   and generate thread unsafe code.
+
+8) The thread safe initialization of C++ static objects can be implemented
+   more efficiently using the Miosix API rather than the POSIX one, so the
+   functions __cxa_guard_[acquire|release|abort] have been removed from
+   libsupc++/guard.cc and implemented in miosix/kernel/syscalls.cpp
+
+9) It reduces the size of the emergency buffer in
+   libstdc++-v3/libsupc++/eh_alloc.cc, which is used for allocating the
+   std::bad_alloc exception that operator new should throw when the heap is
+   full. By default it is set to a conservative value that is too large when
+   compared with the RAM size of microcontrollers.
+
+10) It makes the verbose terminate handler a weak symbol to save code size.
+
+11) It adds __attribute__((weak)) to some functions that pull in exception
+   support to make them overridable by miosix when compiling without exceptions
+   to minimize code size. The only ones which are not made weak are:
+   - ios_failure: already large code size, so might as well not disable exceptions
+   - regex: same as above
+   - occurrences of _GLIBCXX_THROW_OR_ABORT in headers. Don't know how to fix
+     those, if they are ever used inside a .cc file within libstdc++ itself.
+
+12) It moves some functions from a .cc file within libstdc++ to the header file,
+  as when libstdc++ is compiled, exceptions are enabled. This code then pulls
+  in exception support (and its code size penalty) even when Miosix is built
+  with exceptions disabled. string, condition_variable and thread have
+  been patched to avoid this. For string, removing template instantiation
+  prevention code for basic_string was needed to generate non-exception code
+  that is preferentially linked instead of the one in libstdc++ forcedly
+  instantiated in libstdc++.
+
+NOTES
+-----
+
+Atomicity of libstdc++
+----------------------
+from objdir/arm-miosix-eabi/<arch>/libstdc++-v3/config.log
+                               ARM CM0 CM3 CM4 CM7
+atomic builtins for bool        -   -   Y   Y   Y
+atomic builtins for short       -   -   Y   Y   Y
+atomic builtins for int         -   -   Y   Y   Y
+atomic builtins for long long   -   -   -   -   -
+lock policy for shared_ptr      F   F   Y*  Y*  Y*
+* configure:15883: result: atomic
+Note that:
+- atomic_store still uses mutex anyway, see bits/shared_ptr_atomic.h
+
+Autotools issue
+---------------
+Some configure checks fail because in order to check for the presence of a
+particular function, a sample C program is compiled AND LINKED. Now, the
+GCC for miosix is meant to work if linked to libmiosix.a which isn't there yet,
+so code depending on syscalls causes "undefined reference" link failures.
+Do check the output of configure (configure.log) for check failures and
+add stubs to newlib accordingly.
+Note: look for configure.log in objdir/arm-miosix-eabi subdirectories,
+which curently are libatomic, libgcc, libquadmath and libstdc++-v3.
+The one that does more syscall-dependent configure checks is libstdc++
+
+Checks
+------
+thread_local is not supported, check that an example with thread_local produces
+compile-time errors to avoid giving the false impression that it works.
+
+Types to watch out
+------------------
+Some unexported types are copy-pasted in the kernel, and need to be kept consistent
+struct __cxa_eh_globals in miosix/stdlib_integration/libstdcpp_integration.h
+
+
+Program to check how atomic ops are handled
+-------------------------------------------
+//test code -- begin
+//libsupc++/eh_atomics.h is worth a look
+#include <bits/c++config.h>
+#include <bits/atomic_word.h>
+#include <bits/atomic_lockfree_defines.h>
+_Atomic_word theInt;
+void inc()
+{
+    __atomic_add_fetch (&theInt, 1, __ATOMIC_ACQ_REL);
+}
+bool decTest()
+{
+    return __atomic_sub_fetch (&theInt, 1, __ATOMIC_ACQ_REL) == 0;
+}
+//arm-miosix-eabi-g++ -mthumb -mcpu=cortex-m3 -std=c++11 -O2 -S test.cpp
+// _Z3incv:
+//     dmb    ish
+//     ldr    r3, .L4
+// .L2:
+//     ldrex    r2, [r3]
+//     adds    r2, r2, #1
+//     strex    r1, r2, [r3]
+//     cmp    r1, #0
+//     bne    .L2
+//     dmb    ish
+//     bx    lr
+//arm-miosix-eabi-g++ -mthumb -mcpu=cortex-m0 -std=c++11 -O2 -S test.cpp
+// _Z3incv:
+//     push    {r4, lr}
+//     movs    r2, #4
+//     movs    r1, #1
+//     ldr    r0, .L3
+//     bl    __atomic_fetch_add_4
+//     pop    {r4, pc}
+//test code -- end
+
+
+Calculations to minimize the emergency buffer for throwing std::bad_alloc.
+--------------------------------------------------------------------------
+# Sample program to do the computation -- begin
+//Requires to copy-paste unwind-cxx.h from libsupc++
+#include <stdio.h>
+#include <unwind.h>
+#include "unwind-cxx.h"
+#include <stdexcept>
+int main()
+{
+    printf("sizeof(_Unwind_Exception) %d\n",sizeof(_Unwind_Exception));
+    printf("sizeof(_Atomic_word) %d\n",sizeof(_Atomic_word));
+    printf("sizeof(__cxa_exception) %d\n",sizeof(__cxxabiv1::__cxa_exception));
+    printf("sizeof(__cxa_refcounted_exception) %d\n",sizeof(__cxxabiv1::__cxa_refcounted_exception));
+    printf("sizeof(std::bad_alloc) %d\n",sizeof(std::bad_alloc));
+    printf("sizeof(std::logic_error) %d\n",sizeof(std::logic_error));
+    throw std::bad_alloc();
+}
+# Sample program to do the computation -- end
+
+unwind-cxx.h declares __cxa_refcounted_exception, while unwind-arm-common.h
+declares _Unwind_Exception. Size computations as of Sep 1, 2019.
+
+The size of __cxa_refcounted_exception on ARM is:
+sizeof(_Unwind_Exception) 88
+sizeof(_Atomic_word) 4
+sizeof(__cxa_exception) 120
+sizeof(__cxa_refcounted_exception) 128
+sizeof(std::bad_alloc) 4
+sizeof(std::logic_error) 8
+
+While on other archs is (commenting #ifdef __ARM_EABI_UNWINDER__ part in unwind-cxx.h)
+sizeof(_Unwind_Exception) 88
+sizeof(_Atomic_word) 4
+sizeof(__cxa_exception) 136
+sizeof(__cxa_refcounted_exception) 144
+sizeof(std::bad_alloc) 4
+sizeof(std::logic_error) 8
+
+Thus allocating bad_alloc takes 132Bytes on ARM, and 148Bytes on other archs.
+
+It is recomended to leave some space just in case a different exception is
+thrown, like logic_error or runtime_error and there is no heap to allocate it.
+By seeing stdexcept and stdexcept.cc these classes only contain a string object,
+and sizeof(logic_error) returns 8 bytes (4=vptr 4=string).
+
+Note Jul 5, 2010.
+A testcase started to fail, JTAG debugging found that a bad_alloc was allocated
+that required 132Bytes. Expanding EMERGENCY_OBJ_SIZE to 160 bytes (128+32) to leave
+some margin.
+Note Sep 1, 2019.
+Apparently, nothing changed in 9 years, as bad_alloc still requires 132Bytes.
+
+Conclusion:
+Looks like EMERGENCY_OBJ_SIZE can be shrinked from 512 to 160bytes, for 32bit systems.
+For EMRGENCY_OBJ_COUNT, 3 is good.
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/doc/gcc_multilib.md b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/doc/gcc_multilib.md
new file mode 100644
index 0000000000000000000000000000000000000000..e8d36b97faa906e51e642fa7d8a4413149726bd4
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/doc/gcc_multilib.md
@@ -0,0 +1,174 @@
+# Multilib configuration with config file fragments in GCC
+
+Even though the documentation in https://gcc.gnu.org/onlinedocs/gccint/Target-Fragment.html
+is fairly comprehensive about how config file fragments work, it is missing
+a high-level overview of what is happening and leaves out important details,
+which might make the process of updating these files a bit baffling.
+
+The config file fragments to run are selected by the config.gcc shell script,
+depending on the specified target triple, matched via shell script globs.
+The list of fragments is stored in the tmake_file environment variable, which
+through the magic of autoconf/automake gets copied in the materialized
+Makefile, where they are included just before the declaration of the recipes
+related to target-dependent files. Therefore, these "config" file fragments are
+actually Makefile includes, and do not actually run at config time. Whatever.
+
+The config fragments set the following variables related to multilib:
+
+ - `MULTILIB_OPTIONS`, `MULTILIB_DIRNAMES`: base set of multilibs
+ - `MULTILIB_EXCEPTIONS`: blacklist to be applied to the base set
+ - `MULTILIB_REQUIRED`: whitelist to be applied to the base set after the blacklist
+ - `MULTILIB_MATCHES`: specifies aliases for single options
+ - `MULTILIB_REUSE`: specifies aliases for single option combinations
+
+These variables are processed by a Python script called `genmultilib`, which
+in turn produces a header file called `multilib.h` which is then included
+by the code of GCC. This mechanism effectively "bakes" the multilib directory
+structure in the GCC executable.
+
+## Multilib option expansion
+
+The `MULTILIB_OPTIONS` variable is basically interpreted as a list of
+sets, where the number of sets is defined by the number of options separated by
+spaces, and slashes (/) separe each item in the set. Each set also implicitly
+includes the empty string (for the case in which the option is not specified).
+
+Therefore if
+
+```
+MULTILIB_OPTIONS=mthumb march=armv6s-m/march=armv7-m/march=armv7e-m mfloat-abi=hard/mfloat-abi=softfp
+```
+
+then there are 3 sets with size 2, 4, 3 respectively:
+
+```
+""          ""                   ""
+"mthumb"    "march=armv6s-m"     "mfloat-abi=hard"
+            "march=armv7-m"      "mfloat-abi=softfp"
+            "march=armv7e-m"
+```
+
+The multilib list is generated by cartesian product of the sets, resulting in:
+
+```
+"","",""
+"","","mfloat-abi=hard"
+"","","mfloat-abi=softfp"
+"","march=armv6s-m",""
+"","march=armv6s-m","mfloat-abi=hard"
+"","march=armv6s-m","mfloat-abi=softfp"
+"","march=armv7-m",""
+"","march=armv7-m","mfloat-abi=hard"
+"","march=armv7-m","mfloat-abi=softfp"
+"","march=armv7e-m",""
+"","march=armv7e-m","mfloat-abi=hard"
+"","march=armv7e-m","mfloat-abi=softfp"
+"mthumb","",""
+"mthumb","","mfloat-abi=hard"
+"mthumb","","mfloat-abi=softfp"
+"mthumb","march=armv6s-m",""
+"mthumb","march=armv6s-m","mfloat-abi=hard"
+"mthumb","march=armv6s-m","mfloat-abi=softfp"
+"mthumb","march=armv7-m",""
+"mthumb","march=armv7-m","mfloat-abi=hard"
+"mthumb","march=armv7-m","mfloat-abi=softfp"
+"mthumb","march=armv7e-m",""
+"mthumb","march=armv7e-m","mfloat-abi=hard"
+"mthumb","march=armv7e-m","mfloat-abi=softfp"
+```
+
+And now you know why this way of deciding which multilibs to build wasn't
+exactly the best one... and they introduced `MULTILIB_EXCEPTIONS`,
+`MULTILIB_REQUIRED`, `MULTILIB_MATCHES` and `MULTILIB_REUSE` to patch it up.
+All these variables take the list above and modify it. `MULTILIB_REQUIRED`
+modifies the combinations GCC build time, while the others are implemented
+at GCC runtime.
+
+The `genmultilib` script flattens the sets even more, by repeating all options
+that were *not* chosen, prefixed by a "!", producing basically an (inefficient)
+one-hot encoding of the above. Therefore the list above becomes:
+
+```
+"!mthumb !march=armv6s-m !march=armv7-m !march=armv7e-m !mfloat-abi=hard !mfloat-abi=softfp"
+"!mthumb !march=armv6s-m !march=armv7-m !march=armv7e-m mfloat-abi=hard !mfloat-abi=softfp"
+"!mthumb !march=armv6s-m !march=armv7-m !march=armv7e-m !mfloat-abi=hard mfloat-abi=softfp"
+"!mthumb march=armv6s-m !march=armv7-m !march=armv7e-m !mfloat-abi=hard !mfloat-abi=softfp"
+"!mthumb march=armv6s-m !march=armv7-m !march=armv7e-m mfloat-abi=hard !mfloat-abi=softfp"
+"!mthumb march=armv6s-m !march=armv7-m !march=armv7e-m !mfloat-abi=hard mfloat-abi=softfp"
+...
+```
+
+You get the idea...
+
+## Multilib selection process
+
+When choosing a multilib, GCC first normalizes (in a target-dependent way)
+the command line options related to the architecture to a certain degree
+(mainly adds -march=... if it has been implied by a more complex sequence of
+options, and also adds any default option if it has not been specifically
+overridden) and then picks the multilib directory via the `set_multilib_dir()`
+function (in gcc/gcc.c).
+
+This function first check if there is an exclusion (`MULTILIB_EXCEPTIONS`)
+that matches all the specified arguments. In that case it quits immediately,
+which results in not choosing any multilib.
+Otherwise, it checks every available multilib and alias (`MULTILIB_REUSE`)
+for a match with the given options. Options in the multilib specification and
+the command line are compared via plain old string comparison (!).
+The algorithm looks like this, in pseudocode (assuming I didn't read it wrong,
+the original implementation of the logic is unnecessarily convoluted):
+
+```
+for combination in multilibs:
+  ok = true
+  for option in combination:
+    # gcc/gcc.c:8944 (gcc 9.2.0)
+    if option was specified because it's a default:
+      continue
+    # gcc/gcc.c:8930 (gcc 9.2.0)
+    in_cmd_line = option was specified in the command line
+    should_be_in_cmd_line = option is specified for this multilib (not prefixed with !)
+    if in_cmd_line != should_be_in_cmd_line:
+      ok = false
+      break
+  # gcc/gcc.c:8951 (gcc 9.2.0)
+  if ok:
+    return directory of this combination
+# no multilib found
+return root lib directory
+```
+
+In other words, options that are not contemplated by the multilib configuration
+are ignored. Amongst the options contemplated, a multilib matches if all
+non-default options given to gcc (after normalization) match exactly with the
+ones that were enabled for that multilib.
+
+Note that options set as default via defines (for example `TARGET_DEFAULT_FLOAT_ABI`)
+do NOT count as a default option for the logic above, as these defaults never
+appear as argument strings in a gcc internal command line. I leave any comment
+to the reader.
+
+## Can I have two options that always appear together be associated with one directory level instead of two?
+
+Example: `-fpie -msingle-pic-base` are either both enabled or both disabled for
+Miosix multilibs. We want to use a single directory level `processes` for that
+pair of options instead of two levels.
+
+Putting the two options in quotes will never work because the quotes will
+be inconsistently expanded by the various scripts. I didn't even try this
+approach because it sounds so hopeless. (if you have one day to waste you can
+try it out!)
+
+What I tried is using "." for one of the directories like this:
+
+```
+MULTILIB_OPTIONS    += fpie msingle-pic-base
+MULTILIB_DIRNAMES   += processes .
+```
+
+which incredibly is fine for GCC... but not for newlib because for some
+(probably Makefile-related) reason at one point it counts the number of
+path components and replaces them with ".." to get to the root and... well yeah,
+you can guess what happens :(
+
+So the answer is no, you can't do this. That's sad.
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/doc/processes-patch-testcases-cpp.cpp b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/doc/processes-patch-testcases-cpp.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9acd04bf6b364a34cc6bd775c93c17d60ef22e3a
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/doc/processes-patch-testcases-cpp.cpp
@@ -0,0 +1,11 @@
+
+class Base
+{
+public:
+    virtual ~Base() {}
+};
+
+Base *mkbase()
+{
+   return new Base;
+}
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/doc/processes-patch-testcases.c b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/doc/processes-patch-testcases.c
new file mode 100644
index 0000000000000000000000000000000000000000..5e6f55eb4f5db8bb8f890330a0c664f76a2855c5
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/doc/processes-patch-testcases.c
@@ -0,0 +1,48 @@
+
+extern const int aRodata;
+const int aRodata2=42;
+extern int aData;
+int aData=0;
+const char str[]="Hello world\n";
+//extern const char *str;
+
+int get1() { return aRodata; }
+int get2() { return aData; }
+const char *get3() { return str; }
+int get4() { return aRodata2; }
+const int *get5() { return &aRodata2; }
+
+// If this produces a GOTOFF relocation, it's broken
+int *ptr = { 0 };
+int *get6()
+{
+    return ptr;
+}
+
+void f();
+typedef void (*fp)();
+fp g() { return &f; }
+
+// Like extern struct _reent *const _global_impure_ptr __ATTRIBUTE_IMPURE_PTR__;
+extern int * const cptr;
+
+const int *get7()
+{
+    return cptr;
+}
+
+// ptr1 ends in .data.rel, as its value needs to be relocated  while ptr2 ends up in .rodata.
+int * const ptr1=0;
+int * const ptr2=&aData;
+ 
+const int * gg() { return ptr2; } //Interesting, due to optimization this references directly aData
+
+// What if it's not a pointer, like extern int * const cptr; but a struct, or an array?
+// If that struct contains pointers, then the entire struct gets promoted out of .rodata
+struct Q { int *p; int i; };
+const struct Q q1 = { 0,0 };
+const struct Q q2 = { &aData,0 };
+
+
+
+
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/doc/processes-patch.md b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/doc/processes-patch.md
new file mode 100644
index 0000000000000000000000000000000000000000..3331e5d70121e009650ef072dbe9e3a7ba4871a1
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/doc/processes-patch.md
@@ -0,0 +1,944 @@
+
+# Notes on the patch to support processes in Miosix
+
+TODO: Intro, pie, single-pic-base, no fixed offset between .text/.rodata and .got/.data/.bss, the basic stuff of how Miosix processes work.
+
+TODO: Comment the changes that were introduced in 4.7.3 and their limitations (processes couldn't use standard libraries as malloc and everything that used it was broken), as what comes next is a delta compared to it.
+
+NOTE: Most of this document contains addresses from debugging sessions done when DATA_BASE, or the base address of the data segment in a Miosix process before being dynamically relocated, is 0x10000000. This was later changed to 0x40000000, so watch out if some address seems strange.
+
+
+
+## The problem with extern const (FIXED)
+
+In processes compiled with GCC 4.7.3: 
+
+- stuff   in .data are accessed from the GOT, which is OK
+- strings in .rodata are accessed PC-relative, which is OK
+- consts in .rodata are accessed from the GOT, which is WRONG! (more on that later when pointer are involved, though)
+
+Here's an example:
+
+```
+extern const int aRodata;
+extern int aData;
+const char str[]="Hello world\n";
+
+int get1() { return aRodata; }
+int get2() { return aData; }
+const char *get3() { return str; }
+```
+
+used to compile as:
+
+```
+get1:
+	ldr	r3, .L3
+	ldr	r3, [r9, r3]
+	ldr	r0, [r3]
+	bx	lr
+
+get2:
+	ldr	r3, .L6
+	ldr	r3, [r9, r3]
+	ldr	r0, [r3]
+	bx	lr
+
+
+get3:
+	ldr	r0, .L9
+.LPIC0:
+	add	r0, pc
+	bx	lr
+```
+
+`get1()` is the wrong one, of course.
+
+(Compiled with `arm-miosix-eabi-gcc -mcpu=cortex-m3 -mthumb -mfix-cortex-m3-ldrd -fpie -msingle-pic-base -O2 -S processes.c`).
+
+What usually masks the issue is constant folding. Unless it's an extern const the value gets folded and the problem does not arise.
+
+Solution:
+the previous patch relied on a GCC function, `decl_readonly_section()` to check whether the global variable to be loaded is const or not, but that function missed a few cases, so a dedicated function, the `miosix_processes_ref_demux()` function was added in `arm.c`. This new function handles the corner cases better, and also allows to fix some of the next issues.
+
+
+
+
+## Why malloc failed (FIXED)
+
+`malloc()` uses a convoluted global array of pointers with an initializer list which makes them point inside the array itself. For a long time this was thought to confuse the codegen/relocations/whatever, somehow.
+
+Segfault was at address 0xf2 of this code:
+
+```
+  e6:	2318      	movs	r3, #24
+  e8:	f8df 2538 	ldr.w	r2, [pc, #1336]	; 624 <_malloc_r+0x55c>
+  ec:	f859 6002 	ldr.w	r6, [r9, r2]
+  f0:	4433      	add	r3, r6
+newlib-3.1.0/newlib/libc/stdlib/mallocr.c:2378
+  f2:	685c      	ldr	r4, [r3, #4]
+```
+
+But replicating similar code that referenced the same convolute array, `__malloc_av_` did not cause segfaults.
+
+An objdump of `main.o` found at the end of func:
+
+```
+			44: R_ARM_GOT32	__malloc_av_
+```
+
+While an objdump of `lib_a-mallocr.o` at the end of `malloc_r`:
+
+```
+			55c: R_ARM_GOTOFF32	.LANCHOR0
+			560: R_ARM_GOTOFF32	.LANCHOR1
+			564: R_ARM_GOTOFF32	.LANCHOR2
+```
+
+Page 208 of linkers and loaders explains the difference between GOT32 and GOTOFF, and GOTOFF relaocations only work if the gap between .text and .got is known, which is not.
+
+Turns out the issue is unrelated to the convolute array of malloc, a much simpler test case that triggers the issue causing GOTOFF relocations is:
+
+```
+int *ptr = { 0 };
+int *get6()
+{
+    return ptr;
+}
+```
+
+Solution: comment out the part that generates GOTOFF relocations in the `arm_assemble_integer()` function in `arm.c`. In Miosix processes GOTOFF relocations should never appear.
+
+
+
+
+## The problem with const pointers (FIXED)
+
+Accessing `_GLOBAL_REENT` in newlib segfaults, such as in this function:
+
+```
+struct _reent *__getreent()
+{
+    return _GLOBAL_REENT;
+}
+
+__getreent():
+ a78:	4b01      	ldr	r3, [pc, #4]	; (a80 <__getreent+0x8>)
+ a7a:	447b      	add	r3, pc
+ a7c:	6818      	ldr	r0, [r3, #0]
+ a7e:	4770      	bx	lr
+```
+
+Now, `_GLOBAL_REENT` is declared as:
+
+```
+// sys/reent.h
+extern struct _reent *const _global_impure_ptr;
+#define _GLOBAL_REENT _global_impure_ptr
+```
+
+and defined as:
+
+```
+// impure.c
+static struct _reent impure_data = _REENT_INIT(impure_data);
+struct _reent *_impure_ptr = &impure_data;
+struct _reent *const _global_impure_ptr = &impure_data;
+```
+
+At first it was believed that the issue is with the constness of pointer being more complex than normal variables, as we need not confuse the constness of the thing pointed to from the constness of the pointer itself.
+
+However, further investigation found out the const patch works in this case too:
+
+```
+extern const int * cptr;
+const int *get() { return cptr; }
+
+	ldr	r3, .L3
+	ldr	r3, [r9, r3]
+	ldr	r0, [r3]
+
+(symbol_ref:SI ("cptr") [flags 0xc0] <var_decl 0x7f9a30c3d240 cptr>)
+ <var_decl 0x7f9a30c3d240 cptr
+    type <pointer_type 0x7f9a2ff71b28
+        type <integer_type 0x7f9a2ff71a80 int readonly SI
+            size <integer_cst 0x7f9a2fe86f78 constant 32>
+            unit-size <integer_cst 0x7f9a2fe86f90 constant 4>
+            align:32 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type 0x7f9a2ff71a80
+            precision:32 min <integer_cst 0x7f9a2fe971c8 -2147483648>
+            max <integer_cst 0x7f9a2fe971e0 2147483647>
+            pointer_to_this <pointer_type 0x7f9a2ff71b28>>
+        unsigned SI size <integer_cst 0x7f9a2fe86f78 32> unit-size <integer_cst 0x7f9a2fe86f90 4>
+        align:32 warn_if_not_align:0 symtab:0 alias-set 1 canonical-type 0x7f9a2ff71b28
+        pointer_to_this <pointer_type 0x7f9a2ff71dc8>>
+    used public unsigned external common read SI processes.c:22:20
+    size <integer_cst 0x7f9a2fe86f78 32> unit-size <integer_cst 0x7f9a2fe86f90 4>
+    align:32 warn_if_not_align:0 context <translation_unit_decl 0x7f9a2fc95ac8 processes.c>
+    (mem/f/c:SI (symbol_ref:SI ("cptr") [flags 0xc0] <var_decl 0x7f9a30c3d240 cptr>)
+    [1 cptr+0 S4 A32]) chain <function_decl 0x7f9a2fc92500 get7>>
+variable (decl!=0)
+
+
+
+extern int * const cptr;
+const int *get() { return cptr; }
+
+	add	r3, pc
+	ldr	r0, [r3]
+
+(symbol_ref:SI ("cptr") [flags 0xc0] <var_decl 0x7f6823267240 cptr>)
+ <var_decl 0x7f6823267240 cptr
+    type <pointer_type 0x7f682259ba80
+        type <integer_type 0x7f68224bf5e8 int public SI
+            size <integer_cst 0x7f68224b0f78 constant 32>
+            unit-size <integer_cst 0x7f68224b0f90 constant 4>
+            align:32 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type 0x7f68224bf5e8
+            precision:32 min <integer_cst 0x7f68224c11c8 -2147483648>
+            max <integer_cst 0x7f68224c11e0 2147483647>
+            pointer_to_his <pointer_type 0x7f68224c79d8>>
+        readonly unsigned SI size <integer_cst 0x7f68224b0f78 32> unit-size <integer_cst 0x7f68224b0f90 4>
+        align:32 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type 0x7f682259ba80
+        pointer_to_this <pointer_type 0x7f682259bf18>>
+    readonly used public unsigned external common read SI processes.c:22:20
+    size <integer_cst 0x7f68224b0f78 32> unit-size <integer_cst 0x7f68224b0f90 4>
+    align:32 warn_if_not_align:0 context <translation_unit_decl 0x7f68222bfac8 processes.c>
+    (mem/u/f/c:SI (symbol_ref:SI ("cptr") [flags 0xc0] <var_decl 0x7f6823267240 cptr>)
+    [1 cptr+0 S4 A32]) chain <function_decl 0x7f68222bc500 get7>>
+constant (TYPE_READONLY)
+```
+
+Basically, `extern const int * cptr;` is a non-const pointer, so it ends up in .data, and is accessed from the GOT, which is OK, and `extern int * const cptr;` is a const pointer which should end up in .rodata, so is accessed PC-relative, which seems good. In general, when deciding whether to use GOT or PC-relative addressing to get a pointer we are concerned about how to acccess the pointer itself, not what it points to (accessing what it points to is trivial and uniform, as you just need to dereference it in all cases).
+
+Although it seems reasonable to assume a const pointer ends up in .rodata just like any otheer const, it's also wrong.
+
+It looks that to know whether a pointer ends up in .rodata or not you can't just look at its **declaration**, you have to look at is **definition**, see for yourself:
+
+```
+extern int aData;
+int * const ptr1=0;
+int * const ptr2=&aData;
+
+	.section	.rodata
+ptr1:
+	.space	4
+
+	.section	.data.rel.ro,"aw"
+ptr2:
+	.word	aData
+```
+If the const pointer is defined as pointing to another variable, it needs to be relocated. That is, the content of the memory cell of the pointer itself isn't known till run-time, because the address of the variable it should point to isn't known. But relocations in .rodata can't happen, as its... readonly, so the constant pointer gets promoted to another section that is in RAM so the relocation can take place.
+
+The implemented fix requres a compromise: in the general case we can't see the pointer definition, as it may be in another translation unit. Thus, we assume that all pointers will need a relocation, and thus we access all pointers (or all complex data structures that may contain pointers, using the `contains_pointers_p()` function of GCC) and use GOT addressing for those.
+
+At first, it was believed that to make this work, we need to actually move them into RAM to make the relocation work.
+
+This patch fragment of `categorize_decl_for_section()` in `varasm.c` did exactly that.
+
+```
+diff -ruN gcc-9.2.0-old/gcc/varasm.c gcc-9.2.0/gcc/varasm.c
+--- gcc-9.2.0-old/gcc/varasm.c	2019-04-12 09:28:35.000000000 +0200
++++ gcc-9.2.0/gcc/varasm.c	2020-06-25 00:36:05.732146923 +0200
+@@ -56,6 +56,8 @@
+ #include "asan.h"
+ #include "rtl-iter.h"
+ #include "file-prefix-map.h" /* remap_debug_filename()  */
++#include "print-tree.h"
++#include <assert.h>
+ 
+ #ifdef XCOFF_DEBUGGING_INFO
+ #include "xcoffout.h"		/* Needed for external data declarations.  */
+@@ -6675,7 +6677,21 @@
+ 	/* C and C++ don't allow different variables to share the same
+ 	   location.  -fmerge-all-constants allows even that (at the
+ 	   expense of not conforming).  */
+-	ret = SECCAT_RODATA;
++    {
++        //TODO: #ifdef _MIOSIX does not work in this context
++        /*
++         * This code matches the if(contains_pointers_p(type)) in
++         * miosix_processes_ref_demux() in arm.c. It disallows pointer-containing
++         * data structures to be const in Miosix processes, as they are always
++         * accessed from the GOT.
++         */
++        tree type = TREE_TYPE(d);
++        assert(type != NULL && "Miosix: TREE_TYPE is null");
++        //printf("--- %d %d\n",flag_pic,contains_pointers_p(type));
++        //debug_tree(d);
++        if(flag_pic && contains_pointers_p(type)) ret = SECCAT_DATA;
++        else ret = SECCAT_RODATA;
++    }
+       else if (DECL_INITIAL (decl)
+ 	       && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST)
+ 	ret = SECCAT_RODATA_MERGE_STR_INIT;
+```
+
+But it was found out that this patch failed to work when arrays were concerned.
+An example found in newlib that caused segfaults is in `dtoa.c` when accessing the `tinytens` and `bigtens` arrays defined in `mprec.c`.
+
+A simpler testcase can be made but it requires two translation units to prevent folding masking the issue.
+
+```
+// stuff.h
+extern const int ptr[];
+
+// stuff.c
+const int ptr[] = { 0x12345678 };
+
+// main.c
+// do something that accesses ptr
+
+```
+
+This example and the one in libc do cause the appearance of GOT entries which point to .rodata.
+
+Instead of chasing every case where we need to promote something from .rodata to .data, a patch was made in the OS kernel relocation code:
+if the relocation target address is not greater than DATA_BASE (which was 0x10000000 and later as part of these patch was changed to 0x40000000), it means that the relocation points to .rodata, and in that case the relocation is done starting from the CODE base address, not from the RAM base address.
+
+This fix made obsolete the idea of forcedly promoting pointer-containing data structures to RAM, so the `varasm.c` patch above was removed. This choice saves RAM, as now
+
+* pointer containing global data structures that need no relocation stay in .rodata (saving RAM) but are accessed from the GOT anyway as-if they were in RAM. The OS relocation code patch makes this work, and there is a small but unavoidable RAM size penalty for the GOT entries, which is however unavoidable as we need an uniform way to access them without seeing their definition.
+
+* pointer containing global data structures that do need relocations get promoted to RAM (necessary) and are accessed from the GOT (necessary, as being in RAM, PC-relative addressing won't work).
+
+TL;DR: in pointer containing data structures, sometimes we go through the GOT even if the data structure we're accessing is in .rodata. This slight inefficiency is however necessary for uniformity in accessing said data structures.
+
+
+
+
+## The problem with vtables (FIXED)
+
+An example with `cout << "Hello world" << endl;` fails with a segfault during static construction of the cout object. The problem arises during a `dynamic_cast`.
+
+```
+Process 1 terminated due to a fault
+* Code base address was 0x64017268
+* Data base address was 0x64100000
+* MPU region 6 0x64000000-0x64100000 r-x
+* MPU region 7 0x64100000-0x64104000 rw-
+* Attempted data access @ 0x74017818 (PC was 0x6403a610)
+Process 1 terminated
+Process segfaulted
+```
+
+Trying to understand where the wrong address goes `0x74017818 - 0x64017268 = 0x100005b0` and this address points to
+
+```
+ .data.rel.ro._ZTVSt5ctypeIcE
+                0x00000000100005b0       0x30 libstdc++.a(ctype.o)
+                0x00000000100005b0                _ZTVSt5ctypeIcE
+```
+
+and `_ZTVSt5ctypeIcE` is `vtable for std::ctype<char>`.
+
+Further testing with a simpler program fails in the same way
+
+```
+#include <cstdio>
+
+class Base
+{
+public:
+    virtual void print() const { puts("I'm Base"); }
+    virtual ~Base() {}
+};
+
+class Derived : public Base
+{
+public:
+    virtual void print() const { puts("I'm Derived"); }
+};
+
+void __attribute__((noinline)) call(Base *base)
+{
+    base->print();
+}
+
+Base *__attribute__((noinline)) mkbase()
+{
+   return new Base;
+}
+
+Derived *__attribute__((noinline)) mkderived()
+{
+   return new Derived;
+}
+
+int main()
+{
+    volatile int i=0;
+    Base *base = i==0 ? mkderived() : mkbase();
+    call(base);
+    delete base;
+}
+```
+
+It appears that the issue occurs in the constructor
+
+```
+0000ead4 <_Z9mkderivedv>:
+_Z9mkderivedv():
+    ead4:	b508      	push	{r3, lr}
+    ead6:	2004      	movs	r0, #4
+    ead8:	f000 f946 	bl	ed68 <_Znwj>
+    eadc:	4b02      	ldr	r3, [pc, #8]	; (eae8 <_Z9mkderivedv+0x14>)
+    eade:	447b      	add	r3, pc
+    eae0:	3308      	adds	r3, #8
+    eae2:	6003      	str	r3, [r0, #0]
+    eae4:	bd08      	pop	{r3, pc}
+    eae6:	bf00      	nop
+    eae8:	0fff162e 	svceq	0x00ff162e
+```
+
+where the object memory is allocated, and the vptr is set to point to the vtable using PC-relative addressing even though the vtable is in RAM, as it's in .dat.rel.ro
+
+The vtable is considered const even though it contains pointers becauses it passes the `decl_readonly_section` check, which is done before the `contains_pointers_p` check.
+
+```
+(symbol_ref/i:SI ("_ZTV4Base") [flags 0x82] <var_decl 0x7ff42878d480 _ZTV4Base>)
+ <var_decl 0x7ff42878d480 _ZTV4Base
+    type <array_type 0x7ff42781d498
+        type <pointer_type 0x7ff427aea498 __vtbl_ptr_type type <function_type 0x7ff427aea348>
+            unsigned type_6 SI
+            size <integer_cst 0x7ff4279e3108 constant 32>
+            unit-size <integer_cst 0x7ff4279e3120 constant 4>
+            align:32 warn_if_not_align:0 symtab:0 alias-set 4 canonical-type 0x7ff427aea498
+            pointer_to_this <pointer_type 0x7ff427aea7e0>>
+        BLK
+        size <integer_cst 0x7ff4279e3468 constant 128>
+        unit-size <integer_cst 0x7ff4279e3480 constant 16>
+        align:32 warn_if_not_align:0 symtab:0 alias-set 4 canonical-type 0x7ff42781d498
+        domain <integer_type 0x7ff42781d3f0 type <integer_type 0x7ff4279ed000 sizetype>
+            type_6 SI size <integer_cst 0x7ff4279e3108 32> unit-size <integer_cst 0x7ff4279e3120 4>
+            align:32 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type 0x7ff42781d3f0 precision:32 min <integer_cst 0x7ff4279e3138 0> max <integer_cst 0x7ff42781a258 3>>
+        pointer_to_this <pointer_type 0x7ff427825bd0>>
+    readonly addressable used public static tree_1 tree_2 tree_5 ignored weak read virtual decl_5 BLK vtable.cpp:2:7 size <integer_cst 0x7ff4279e3468 128> unit-size <integer_cst 0x7ff4279e3480 16>
+    user align:32 warn_if_not_align:0 context <record_type 0x7ff427af3348 Base> initial <constructor 0x7ff42781a270>
+   
+    (mem/u/c:BLK (symbol_ref/i:SI ("_ZTV4Base") [flags 0x82] <var_decl 0x7ff42878d480 _ZTV4Base>) [4 _ZTV4Base+0 S16 A32])>
+constant (decl_readonly_section)
+```
+
+As the vtable contains constant pointers (that need to be initialized to within .text to point to the member functions), relocations need to be done.
+The solution is to move the `contains_pointers_p` check first.
+
+
+
+
+## The problem with R_ARM_REL32 relocations (FIXED)
+
+Trying to compile C++ programs that do not use exceptions causes compilation to fail. An example as simple as this triggers the issue:
+
+```
+#include <cstdio>
+
+using namespace std;
+
+int main()
+{
+    printf("Hello world\n");
+    return 0;
+}
+```
+
+which fails with:
+
+```
+ld: libgcc.a(unwind-arm.o): relocation R_ARM_REL32 against external or undefined symbol `__cxa_call_unexpected' can not be used when making a PIE executable; recompile with -fPIC
+libgcc.a(unwind-arm.o): in function `__gnu_unwind_pr_common':
+unwind-arm-common.inc:824:(.text+0x744): dangerous relocation: unsupported relocation
+```
+
+Compiling with `-fno-exceptions` or adding code that throws/catches exceptions fixes the issue, but code that does not throw should not fail to compile.
+
+The problem is in `unwind-arm-common.inc` which declares a few functions prototypes as `__attribute__((weak))` that it then calls. Moreover, in one case it checkes whether the pointer to the `__gnu_Unwind_Find_exidix` function is not null, to see if the function exists in the (runtime) linked binary.
+
+The fix consists in patching `unwind-arm-common.inc` so that the function prototypes are no longer weak, and removing completely the check **and** then call to `__gnu_Unwind_Find_exidix` as it's not needed in Miosix.
+
+
+
+
+## The problem with unwinding exception tables (FIXED)
+
+A simple program that throws an exception would segfault
+
+```
+#include <cstdio>
+
+void __attribute__((noinline)) f()
+{
+   throw 1; 
+}
+
+int main() try {
+    puts("in");
+    f();
+    puts("out");
+    return 0;
+} catch(int& e) {
+    puts("exc");
+    return e;
+}
+```
+
+in `__cxa_type_match`
+
+```
+0000eee4 <__cxa_type_match>:
+[...]
+gcc-9.2.0/libstdc++-v3/libsupc++/eh_arm.cc:86
+    ef08:	6823      	ldr	r3, [r4, #0]
+```
+
+The fault happens when dereferencing a pointer, but the pointer does not get computed in this function, but passed as a parameter.
+The caller is `__gxx_personality_v0`
+
+```
+line 576 of eh_personality.cc
+
+      while (1)
+	{
+	  p = action_record;
+	  p = read_sleb128 (p, &ar_filter);
+	  read_sleb128 (p, &ar_disp);
+
+	  if (ar_filter == 0)
+	    {
+	      // Zero filter values are cleanups.
+	      saw_cleanup = true;
+	    }
+	  else if (ar_filter > 0)
+	    {
+	      // Positive filter values are handlers.
+	      catch_type = get_ttype_entry (&info, ar_filter);
+
+	      // Null catch type is a catch-all handler; we can catch foreign
+	      // exceptions with this.  Otherwise we must match types.
+	      if (! catch_type
+		  || (throw_type
+		      && get_adjusted_ptr (catch_type, throw_type,
+					   &thrown_ptr)))
+```
+
+The `get_adjusted_ptr` is a macro to the `__cxa_type_match` code that is faulting.
+The corrupted variable is `catch_type`, and is returned by `get_ttype_entry`, which in turn gets it by calling `read_encoded_value_with_base` in `libgcc/unwind-pe.h`.
+
+The `read_encoded_value_with_base` is called with the following parameters:
+```
+unsigned char encoding = 0x10
+_Unwind_Ptr base       = 0
+const unsigned char *p = 0x64027198 - 0x64017268 = 0xff30
+```
+
+and at memory location 0xff30 in the elf file there is the .ARM.extab section, so this code is retrieving a pointer from the exception unwinding tables.
+So, summing up, the unwind tables are coded assuming that it's possible to construct addresses to the typeinfo structures (which are in .data.rel.ro, thus in RAM) through PC-relative addressing which is not possible.
+
+From the same file we also find another useful function:
+
+```
+static _Unwind_Ptr
+base_of_encoded_value (unsigned char encoding, struct _Unwind_Context *context)
+{
+  if (encoding == DW_EH_PE_omit)
+    return 0;
+
+  switch (encoding & 0x70)
+    {
+    case DW_EH_PE_absptr:
+    case DW_EH_PE_pcrel:
+    case DW_EH_PE_aligned:
+      return 0;
+
+    case DW_EH_PE_textrel:
+      return _Unwind_GetTextRelBase (context);
+    case DW_EH_PE_datarel:
+      return _Unwind_GetDataRelBase (context);
+    case DW_EH_PE_funcrel:
+      return _Unwind_GetRegionStart (context);
+    }
+  __gxx_abort ();
+}
+```
+
+This function computes the `base` parameter the the previous function, and returns zero since encoding is 0x10 or `DW_EH_PE_pcrel`.
+
+However, `_Unwind_GetDataRelBase()` is in `libgcc/config/arm/pr-support.c`
+
+```
+/* These two should never be used.  */
+
+_Unwind_Ptr
+_Unwind_GetDataRelBase (_Unwind_Context *context __attribute__ ((unused)))
+{
+  abort ();
+}
+```
+
+great, so that's unimplemented...
+
+One last bit we need to get the whole picture: how the compiler selects which encoding to use: `cd gcc/config/arm && grep -R 'DW_EH_PE_'`
+
+which found the list of constants:
+
+```
+#define DW_EH_PE_absptr		0x00
+
+#define DW_EH_PE_pcrel		0x10
+#define DW_EH_PE_textrel	0x20
+#define DW_EH_PE_datarel	0x30
+#define DW_EH_PE_funcrel	0x40
+#define DW_EH_PE_aligned	0x50
+
+#define DW_EH_PE_indirect	0x80
+```
+
+and this file `gcc/config/arm/arm.h` which says
+
+```
+#ifndef ARM_TARGET2_DWARF_FORMAT
+#define ARM_TARGET2_DWARF_FORMAT DW_EH_PE_pcrel
+#endif
+
+/* ttype entries (the only interesting data references used)
+   use TARGET2 relocations.  */
+#define ASM_PREFERRED_EH_DATA_FORMAT(code, data) \
+  (((code) == 0 && (data) == 1 && ARM_UNWIND_INFO) ? ARM_TARGET2_DWARF_FORMAT \
+			       : DW_EH_PE_absptr)
+```
+
+And this is actually documented!
+
+`https://gcc.gnu.org/onlinedocs/gccint/Exception-Handling.html`
+
+`ASM_PREFERRED_EH_DATA_FORMAT (code, global)`
+
+So, despite the macro implementation in `arm.h` calls the parameters `code` and `data`, they are actually `code` and `global`:
+
+`code`:
+
+* 0 for data
+* 1 for code labels
+* 2 for function pointers
+
+while `global` is true if the symbol may be affected by dynamic relocations.
+
+From my understanding, the encoding is absptr unless we're accessing data and dynamic relocations may occur (ARM_UNWIND_INFO is the constant 1 so it's always true), in that case it's pcrel.
+
+A possible solution that was tested is:
+
+* `#define ARM_TARGET2_DWARF_FORMAT DW_EH_PE_datarel`
+* implement `_Unwind_GetDataRelBase`.
+
+This is the patch that does the first thing:
+
+```
+diff -ruN gcc-9.2.0-old/gcc/config/arm/arm.h gcc-9.2.0/gcc/config/arm/arm.h
+--- gcc-9.2.0-old/gcc/config/arm/arm.h	2019-04-23 12:03:41.000000000 +0200
++++ gcc-9.2.0/gcc/config/arm/arm.h	2020-07-14 09:14:20.611848691 +0200
+@@ -878,7 +878,12 @@
+ #define EH_RETURN_STACKADJ_RTX	gen_rtx_REG (SImode, ARM_EH_STACKADJ_REGNUM)
+ 
+ #ifndef ARM_TARGET2_DWARF_FORMAT
+-#define ARM_TARGET2_DWARF_FORMAT DW_EH_PE_pcrel
++//TODO: #ifdef _MIOSIX does not work in this context
++//Produce exception unwinding tables that work with Miosix processes
++//see processes-patch.md, section "The problem with unwinding exception tables"
++//we want pcrel as usual for the Miosix kernel, and datarel for processes (pic)
++#define ARM_TARGET2_DWARF_FORMAT (flag_pic ? DW_EH_PE_datarel : DW_EH_PE_pcrel)
++//#define ARM_TARGET2_DWARF_FORMAT DW_EH_PE_pcrel
+ #endif
+ 
+ /* ttype entries (the only interesting data references used)
+```
+
+This is the patch that does the second:
+
+```
+diff -ruN gcc-9.2.0-old/libgcc/config/arm/pr-support.c gcc-9.2.0/libgcc/config/arm/pr-support.c
+--- gcc-9.2.0-old/libgcc/config/arm/pr-support.c	2019-04-23 12:03:41.000000000 +0200
++++ gcc-9.2.0/libgcc/config/arm/pr-support.c	2020-07-14 09:14:20.615848615 +0200
+@@ -376,7 +376,14 @@
+ _Unwind_Ptr
+ _Unwind_GetDataRelBase (_Unwind_Context *context __attribute__ ((unused)))
+ {
+-  abort ();
++//TODO: #ifdef _MIOSIX does not work in this context
++//Support exception unwinding that work with Miosix processes
++//see processes-patch.md, section "The problem with unwinding exception tables"
++//NOTE: this code gets linked (even though it never gets used) also in the kernel,
++//so the symbol name we coose here must also exist in the kernel linker scripts
++  extern char _data asm("_data"); //defined in the linker script
++  return &_data;
++//   abort ();
+ }
+ 
+ _Unwind_Ptr
+```
+
+And this just adds a print to see what happens:
+
+```
+diff -ruN gcc-9.2.0-old/gcc/except.c gcc-9.2.0/gcc/except.c
+--- gcc-9.2.0-old/gcc/except.c	2019-03-11 14:58:44.000000000 +0100
++++ gcc-9.2.0/gcc/except.c	2020-07-15 09:55:53.382783507 +0200
+@@ -3022,6 +3022,11 @@
+   else
+     {
+       tt_format = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/1);
++      // This is here for debugging the change to ARM_TARGET2_DWARF_FORMAT
++      // in Miosix processes: when compiling C++ code that throws and catches
++      // exceptions, it should print 0x10 (DW_EH_PE_pcrel) when compiling the
++      // kernel (non-pic) and 0x30 (DW_EH_PE_datarel) when compiling processes
++      printf("\n\n-- called 0x%x --\n\n",tt_format);
+       if (HAVE_AS_LEB128)
+ 	ASM_GENERATE_INTERNAL_LABEL (ttype_label,
+ 				     section ? "LLSDATTC" : "LLSDATT",
+```
+
+
+But these patch don't work. With those changes throwing from a process still fails as before.
+Even though at compile-time the DW_EH_PE_datarel value seems to be selected and the printf patch prints 0x30 (the call to `ASM_PREFERRED_EH_DATA_FORMAT` is in `output_one_function_exception_table` in `gcc/except.c` which is where the printf patch above is), `read_encoded_value_with_base` at runtime still gets called with 0x10 (pcrel)...
+
+More digging found this kludge in `eh_personality.cc`:
+
+```
+#if _GLIBCXX_OVERRIDE_TTYPE_ENCODING
+      /* Older ARM EABI toolchains set this value incorrectly, so use a
+	 hardcoded OS-specific format.  */
+      info->ttype_encoding = _GLIBCXX_OVERRIDE_TTYPE_ENCODING;
+#endif
+```
+
+Yes, despite we're wasting bytes in the binary to encode the format of pointer entries, they serve nothing as they are overridden by a compile-time kludge that forces the runtime library to ignore it...
+
+`https://gcc.gnu.org/legacy-ml/gcc-patches/2011-09/msg00765.html`
+
+The `#define _GLIBCXX_OVERRIDE_TTYPE_ENCODING` occurs in `libgcc/config/arm/unwind-arm.h`,
+in the middle of the `_Unwind_decode_typeinfo_ptr` function (if you need to make a kludge, do it well...).
+
+Ok, more patching to remove the kludge:
+
+```
+diff -ruN gcc-9.2.0-old/libgcc/config/arm/unwind-arm.h gcc-9.2.0/libgcc/config/arm/unwind-arm.h
+--- gcc-9.2.0-old/libgcc/config/arm/unwind-arm.h	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libgcc/config/arm/unwind-arm.h	2020-07-14 09:14:20.615848615 +0200
+@@ -57,7 +57,14 @@
+ #elif defined(__symbian__) || defined(__uClinux__)
+ #define _GLIBCXX_OVERRIDE_TTYPE_ENCODING (DW_EH_PE_absptr)
+       /* Absolute pointer.  Nothing more to do.  */
++#elif defined(_MIOSIX)
++     //DO NOT DEFINE _GLIBCXX_OVERRIDE_TTYPE_ENCODING, we don't want that kludge
++     //as the encoding could be either pc-relative (kernel) or data-relative (processes)
++     //see processes-patch.md
++     //This relies on base_of_encoded_value() setting base to 0 for DW_EH_PE_pcrel
++     tmp += base ? base : ptr;
+ #else
++#error FIXME deleteme added just in case
+ #define _GLIBCXX_OVERRIDE_TTYPE_ENCODING (DW_EH_PE_pcrel)
+       /* Pc-relative pointer.  */
+       tmp += ptr;
+```
+
+but this does not work either...
+
+At runtime, in the process, `read_encoded_value_with_base` is called with the following parameters:
+```
+unsigned char encoding = 0x30
+_Unwind_Ptr base       = 0x64100000
+const unsigned char *p = 0x640271c4
+```
+
+The first two parameters are correct, the third one, is not.
+
+This time the encoding is the correct value. Also the base is ok, so we have the data base address. However, p points to where the offset is stored in the unwinding tables. And dereferencing that location we find 0x0fff023c. This is wrong, as the target we want is at 0x10000188, and 0x64100000 + 0x0fff023c = 0x740f023c which is the faulting address causing the segfault and not the target address.
+
+So while everything is set up for data-relative, the offset that gets encoded is still pc-relative...
+
+And it is here when things get complicated, as we need to llok deep into what's encoded in the unwinding tables.
+
+When compiling the simple `main.cpp` that throws at the beginning of this chapter, GCC produces the following tables, and the unwind tables end up in the binary, with a one-to-one match, (after the ULEB128 encoding is understood `https://en.wikipedia.org/wiki/LEB128`):
+
+
+```
+ .ARM.extab.text.startup.main
+                0x000000000000ff30       0x20 main.o
+
+ 0ff28                   79f5ff7f b0b0a800  ........y.......
+ 0ff38 ff301501 0c06080e 011c042a 002e0400  .0.........*....
+ 0ff48 00010000 3c02ff0f 
+
+	.global	__gxx_personality_v0
+	.personality	__gxx_personality_v0
+	.handlerdata
+	.align	2
+                                     79f5ff7f b0b0a800 = personality?
+.LLSDA2:
+	.byte	0xff                     ff
+	.byte	0x30                     30
+	.uleb128 .LLSDATT2-.LLSDATTD2    15
+.LLSDATTD2:
+	.byte	0x1                      01
+	.uleb128 .LLSDACSE2-.LLSDACSB2   0c
+.LLSDACSB2:
+	.uleb128 .LEHB0-.LFB2            06
+	.uleb128 .LEHE0-.LEHB0           08
+	.uleb128 .L9-.LFB2               0e
+	.uleb128 0x1                     01
+	.uleb128 .LEHB1-.LFB2            1c
+	.uleb128 .LEHE1-.LEHB1           04
+	.uleb128 .L10-.LFB2              2a
+	.uleb128 0                       00
+	.uleb128 .LEHB2-.LFB2            2e
+	.uleb128 .LEHE2-.LEHB2           04
+	.uleb128 0                       00
+	.uleb128 0                       00
+.LLSDACSE2:
+	.byte	0x1                      01
+	.byte	0                        00
+	.align	2                        00
+	.word	_ZTIi(TARGET2)           3c02ff0f (0x0fff023c)
+```
+
+So the problematic offset is right at the end, 0x0fff023c. However, GCC is not producing the address, it just outputs `.word	_ZTIi(TARGET2)`. In this declaration, `_ZTIi` is the target symbol we want to access, and `(TARGET2)` a relocation type.
+
+Who prints this `.word	_ZTIi(TARGET2)` in GCC? We're back to our friend, the `output_one_function_exception_table` in `gcc/except.c`. Just like the address is last in the exception tables, also the code that prints is last in the function,
+
+```
+  if (targetm.arm_eabi_unwinder)
+    {
+      tree type;
+      for (i = 0;
+	   vec_safe_iterate (cfun->eh->ehspec_data.arm_eabi, i, &type); ++i)
+	output_ttype (type, tt_format, tt_format_size);
+    }
+```
+
+The job is done by the `output_ttype`, but not exactly, as this function contains a
+
+```
+  /* Allow the target to override the type table entry format.  */
+  if (targetm.asm_out.ttype (value))
+    return;
+```
+
+and the ARM target has this function pointer non-null, and thus overrides the default `output_ttype` behavior. Following the code we get back to `arm.c`.
+
+```
+static bool
+arm_output_ttype (rtx x)
+{
+  fputs ("\t.word\t", asm_out_file);
+  output_addr_const (asm_out_file, x);
+  /* Use special relocations for symbol references.  */
+  if (!CONST_INT_P (x))
+    fputs ("(TARGET2)", asm_out_file);
+  fputc ('\n', asm_out_file);
+
+  return TRUE;
+}
+```
+
+and this is the function that prints the symbol name and `(TARGET2)`.
+
+adding an `if(flag_pic) return FALSE;` at the beginning of this function just affords an internal compiler error, apparently as by returning false we get back to `output_ttype` which calls `dw2_asm_output_encoded_addr_rtx` that contains a
+
+```
+#ifdef ASM_OUTPUT_DWARF_DATAREL
+	case DW_EH_PE_datarel:
+	  gcc_assert (GET_CODE (addr) == SYMBOL_REF);
+	  ASM_OUTPUT_DWARF_DATAREL (asm_out_file, size, XSTR (addr, 0));
+	  break;
+#endif
+```
+
+and none is provided (sigh).
+
+Ok, backtracking, batching and trying to patch `arm_output_ttype` to produce another relocation type. But which type? The "ELF for the ARM Architecture" document availbale online seems to hint that ` R_ARM_BASE_ABS` is the right one, as it's a static relocation where the target is accessed as B(S) + A, which seems right.
+
+
+```
+diff -ruN gcc-9.2.0-old/gcc/config/arm/arm.c gcc-9.2.0/gcc/config/arm/arm.c
+--- gcc-9.2.0-old/gcc/config/arm/arm.c	2019-04-23 12:03:41.000000000 +0200
++++ gcc-9.2.0/gcc/config/arm/arm.c	2020-07-15 23:37:34.457141163 +0200
+@@ -27847,7 +28036,23 @@
+   output_addr_const (asm_out_file, x);
+   /* Use special relocations for symbol references.  */
+   if (!CONST_INT_P (x))
++  {
++      //TODO: #ifdef _MIOSIX does not work in this context
++      //When generation C++ exception unwinding tables, DO generate data-relative
++      //entries instead of overriding them with pc-relative relocations
++      //See processes-patch.md
++      if(flag_pic)
++      {
++          //Use R_ARM_RELATIVE to generate a data-relative static relocation
++          //see "ELF for the ARM AELF for the ARM Architecture"
++          printf("using R_ARM_RELATIVE relocation for exception unwinding tables\n");
++          fputs ("(BASE_ABS)", asm_out_file);
++      } else {
++          //Produce the default R_ARM_TARGET2 static relocation that is supposed
++          //to be platform specific but is actually pc-relative
+     fputs ("(TARGET2)", asm_out_file);
++      }
++  }
+   fputc ('\n', asm_out_file);
+ 
+   return TRUE;
+```
+
+And here we find more trouble: the gnu assember does not support the relocation we want being input from assembly files...
+
+Ok, backtracking again, we'll have to make TARGET2 relocations work for our platform. GNU ld has an option, `--target2=<type>` that allows to override how it handles target2 relocations. Great!
+By grepping the sources (couldn't find what strings are accepted as type) it looks like the options are `abs`, `rel`, `got-rel`. The default behavior we're seeing is `rel`. `got-rel` seems promising on paper, but it produces garbage for unknown reasons. `abs` is best actually, as it produces the absolute address of the symbol, like 0x10000178. Of course, by just subtracting DATA_BASE, we get the data-relative offset we want. Maybe we could patch the unwinder to subtract DATA_BASE, but it looks like there's a problem.
+
+Miosix does not load binaries compiled with `--target2=abs`, and the reason is simple, other than producing the absolute value, the linker produces a dynamic relocation to fix it up at runtime, as we're in PIE/PIC mode, and for the first time that's NOT what we want, as relocations in a readonly sections can't be made. However, by temporarily commenting out that check in the kernel, adding a check to skip this wrong relocation and patching the binary by hand by removing 0x10000000 to that address, the process works and throws correctly with the readonly unwinding tables.
+
+Now, we just need a non-kludge way to do this.
+
+For this, there's no escape to patching binutils too. The patch first adds the `--target2=mx-data-rel` option and maps it to a brand new static relocation type, `R_ARM_MIOSIXPROC_TGT2`, that is basically the same as `R_ARM_ABS32` (the one behind `--target2=abs`) except it does not leave dynamic relocations behind and subtracts DATA_BASE), making a true data-rel static relocation encoding the offset of the symbol from the data base address.
+
+And that, finally, worked.
+
+
+
+
+## Caveat fot future patchers
+
+If you do an `arm-miosix-eaby-objdump -Dslx main.bin` (of course before it's stripped and mx-postlinked), the start of the disassembly is something like
+
+```
+Program Header:
+    LOAD off    0x00000098 vaddr 0x00000098 paddr 0x00000098 align 2**3
+         filesz 0x00004fcc memsz 0x00004fcc flags r-x
+    LOAD off    0x00005068 vaddr 0x40000000 paddr 0x40000000 align 2**3
+         filesz 0x00000640 memsz 0x00000840 flags rw-
+ DYNAMIC off    0x000050f8 vaddr 0x40000090 paddr 0x40000090 align 2**2
+         filesz 0x00000048 memsz 0x00000048 flags rw-
+
+Dynamic Section:
+  DEBUG                0x00000000
+  REL                  0x00004564
+  RELSZ                0x00000b00
+  RELENT               0x00000008
+  FLAGS_1              0x08000000
+  RELCOUNT             0x00000001
+private flags = 5000200: [Version5 EABI] [soft-float ABI]
+```
+
+which is more useful than it looks, as it allows to see if the binary is good looking. Sometimes innocuous-looking changes in the linker script such as renaming an output section trigger special behavior in the linker with strange side effects, such as adding useless entries to dynamic (such as if you call an output section `.init_array`), adding useless nested segments (such as calling an output section `.ARM.exidx`), or making the text segment writable, which then Miosix will of course fail to load as it violates `W^X`. So do check those when making changes!
+
+
+
+
+
+## Addendum
+
+How to recompile GCC only (not the stdlibs) for quick experiments
+
+```
+INSTALL_DIR=`pwd`/gcc/arm-miosix-eabi
+LIB_DIR=`pwd`/lib
+PATH=$INSTALL_DIR/bin:$PATH
+cd objdir
+make all-gcc
+make install-gcc
+```
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/gcc.patch b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/gcc.patch
new file mode 100644
index 0000000000000000000000000000000000000000..b60e8e4218b07457e4a995dd6d434882ec565ca9
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/gcc.patch
@@ -0,0 +1,1748 @@
+diff -ruN gcc-9.2.0-old/config/gthr.m4 gcc-9.2.0/config/gthr.m4
+--- gcc-9.2.0-old/config/gthr.m4	2012-10-15 15:10:30.000000000 +0200
++++ gcc-9.2.0/config/gthr.m4	2025-01-24 23:55:01.443117028 +0100
+@@ -14,6 +14,7 @@
+     aix)	thread_header=config/rs6000/gthr-aix.h ;;
+     dce)	thread_header=config/pa/gthr-dce.h ;;
+     lynx)	thread_header=config/gthr-lynx.h ;;
++    miosix)	thread_header=config/gthr-miosix.h ;;
+     mipssde)	thread_header=config/mips/gthr-mipssde.h ;;
+     posix)	thread_header=gthr-posix.h ;;
+     rtems)	thread_header=config/gthr-rtems.h ;;
+diff -ruN gcc-9.2.0-old/gcc/config/arm/arm.c gcc-9.2.0/gcc/config/arm/arm.c
+--- gcc-9.2.0-old/gcc/config/arm/arm.c	2019-04-23 12:03:41.000000000 +0200
++++ gcc-9.2.0/gcc/config/arm/arm.c	2025-01-24 23:55:01.447117016 +0100
+@@ -70,10 +70,20 @@
+ #include "gimplify.h"
+ #include "gimple.h"
+ #include "selftest.h"
++#include "print-tree.h"
++#include <assert.h>
+ 
+ /* This file should be included last.  */
+ #include "target-def.h"
+ 
++/*
++ * https://gcc.gnu.org/legacy-ml/gcc/2017-05/msg00073.html
++ * Disable this warning at the compiler level, as Miosix skipped from GCC 4.7.3
++ * to GCC 9.2.0, so there's no affected code around.
++ */
++#undef warn_psabi /* in case it's already a macro */
++#define warn_psabi 0
++
+ /* Forward definitions of types.  */
+ typedef struct minipool_node    Mnode;
+ typedef struct minipool_fixup   Mfix;
+@@ -2758,8 +2768,30 @@
+ 	}
+   }
+ 
+-  if (TARGET_AAPCS_BASED)
+-    synchronize_libfunc = init_one_libfunc ("__sync_synchronize");
++  //Rationale:
++  //Compiling code that instantiates C++ static objects on architectures that do
++  //not have memory fence/barrier instructions (e.g: ARM7TDMI) causes undefined
++  //reference to `__sync_synchronize'.
++  //expand_mem_thread_fence() in gcc/optabs.c:6489 tries to emit ASM insn
++  //and failing that, emits the __sync_synchronize call if available.
++  //Synchronize_libfunc is used only in optabs.c and defined only for ARM/MIPS
++  //$ grep -R 'synchronize_libfunc' gcc-9.2.0
++  //libfuncs.h:79:#define synchronize_libfunc    (libfunc_table[LTI_synchronize])
++  //config/arm/arm.c:2776:    synchronize_libfunc = init_one_libfunc ("__sync_synchronize");
++  //config/mips/mips.c:13535:      synchronize_libfunc = init_one_libfunc ("__sync_synchronize");
++  //optabs.c:6500:  else if (synchronize_libfunc != NULL_RTX)
++  //optabs.c:6501:    emit_library_call (synchronize_libfunc, LCT_NORMAL, VOIDmode);
++  //$ grep -Rn 'LTI_synchronize' gcc-9.2.0
++  //libfuncs.h:29:  LTI_synchronize,
++  //libfuncs.h:79:#define synchronize_libfunc (libfunc_table[LTI_synchronize])
++  //The ARM implementation is in libgcc and only exists for linux and bsd.
++  //
++  //Solution: remove given ARM7TDMI don't need hardware memory barriers at all.
++  //
++  //When updating patches to new compiler, check that cortex-M targets have
++  //dmb instructions, while ARM7TDMI code has no calls to __sync_synchronize.
++  //if (TARGET_AAPCS_BASED)
++  //  synchronize_libfunc = init_one_libfunc ("__sync_synchronize");
+ 
+   speculation_barrier_libfunc = init_one_libfunc ("__speculation_barrier");
+ }
+@@ -7501,6 +7533,157 @@
+     }
+ }
+ 
++//TODO: #ifdef _MIOSIX does not work in this context
++
++//Taken from varasm.c, it is static unfortunately, hence the copy-paste
++static int
++contains_pointers_p (const_tree type)
++{
++  switch (TREE_CODE (type))
++    {
++    case POINTER_TYPE:
++    case REFERENCE_TYPE:
++      /* I'm not sure whether OFFSET_TYPE needs this treatment,
++	 so I'll play safe and return 1.  */
++    case OFFSET_TYPE:
++      return 1;
++
++    case RECORD_TYPE:
++    case UNION_TYPE:
++    case QUAL_UNION_TYPE:
++      {
++	tree fields;
++	/* For a type that has fields, see if the fields have pointers.  */
++	for (fields = TYPE_FIELDS (type); fields; fields = DECL_CHAIN (fields))
++	  if (TREE_CODE (fields) == FIELD_DECL
++	      && contains_pointers_p (TREE_TYPE (fields)))
++	    return 1;
++	return 0;
++      }
++
++    case ARRAY_TYPE:
++      /* An array type contains pointers if its element type does.  */
++      return contains_pointers_p (TREE_TYPE (type));
++
++    default:
++      return 0;
++    }
++}
++
++/*
++ * Miosix processes do not live in a virtual address space.
++ * Their code and constants (.text and .rodata) live in FLASH at an address
++ * that is not known until runtime, so PC-relative addressing must be used.
++ * Their variables (.data and .bss) live in RAM, and the offset between
++ * .text and RAM is not constant, so the GOT must be used with single-pic-base.
++ * This function takes a memory reference and returns true if PC-relative
++ * addressing must be used, or false if the GOT must be used.
++ */
++static bool miosix_processes_ref_demux(rtx orig)
++{
++    // This logic has been kept from the original code in legitimize_pic_address
++    if(GET_CODE(orig) == LABEL_REF) return true;
++    
++    // From here on we handle the SYMBOL_REF case
++    //TODO: we don't do anything for DECL_WEAK
++
++    // Dump data structures for debugging purpose
++    // print-rtl.c and print-tree.c are very useful for knowing how they work
++    //debug_rtx(orig);
++    //if(SYMBOL_REF_DECL(orig)) debug_tree(SYMBOL_REF_DECL(orig));
++    
++    bool result = false;
++    const_tree decl = SYMBOL_REF_DECL(orig);
++    if(decl)
++    {
++        if(TREE_CODE(decl) == FUNCTION_DECL)
++        {
++            /*
++             * Taking function address, testcase (compile with -O2)
++             * void f();
++             * typedef void (*fp)();
++             * fp get() { return &f; }
++             */
++            result = true;
++            //printf("constant (FUNCTION_DECL)\n\n");
++        } else if(TREE_CODE(decl) == VAR_DECL) {
++            const_tree type = TREE_TYPE(decl);
++            assert(type != NULL && "Miosix: SYMBOL_REF of unknown constness (type==0)");
++            if(contains_pointers_p(type))
++            {
++                /*
++                 * A true constant pointer can't exist in Miosix processes.
++                 * If it's a constant, the pointer would need to be
++                 * initialized at the definition site, and since it may
++                 * point to a variable in RAM, a runtime relocation is
++                 * needed to initialize it, and because of that it can't
++                 * stay in .rodata among the true constants.
++                 * Const pointers without relocations may exist, say for
++                 * instance int *const p=0; and those *could* stay in .rodata
++                 * but that creates another problem: how do we know from
++                 * the declaration only (extern int *const p;) whether the
++                 * pointer is in .rodata or not? We can't and thus we don't
++                 * know whether to use pc-relative or GOT addressing, so
++                 * we treat *all* const pointers as non const.
++                 */
++                //printf("variable (contains pointers)\n\n");
++            } else if(decl_readonly_section(decl,0)) {
++                /*
++                 * Non-extern consts in non optimized code, testcase (compile with -O0)
++                 * const char str[]="Hello world\n";
++                 * const char *get() { return str; }
++                 */
++                result = true;
++                //printf("constant (decl_readonly_section)\n\n");
++                // remaining if are because decl_readonly_section misses some
++                // const cases
++            } else if(TYPE_READONLY(type)) {
++                /*
++                 * Extern const, testcase (compile with -O2)
++                 * extern const int aRodata;
++                 * int get() { return aRodata; }
++                 */
++                result = true;
++                //printf("constant (TYPE_READONLY)\n\n");
++            } else {
++                /*
++                 * Variables, testcase (compile with -O2)
++                 * extern int aData;
++                 * int get() { return aData; }
++                 */
++                //printf("variable (decl!=0)\n\n");
++            }
++        } else assert(0 && "Miosix: SYMBOL_REF of unknown constness (TREE_CODE?)");
++    } else {
++        //we fall here when optimizations are enabled and sometimes decl==NULL
++        
++        //NOTE: SYMBOL_REF_BLOCK() is valid only if SYMBOL_REF_HAS_BLOCK_INFO_P()
++        if(!SYMBOL_REF_HAS_BLOCK_INFO_P(orig) || SYMBOL_REF_BLOCK(orig) == NULL)
++            assert(0 && "Miosix: SYMBOL_REF of unknown constness (decl==0)");
++        
++        //TODO: output.h defines a few default sections as global variables
++        //do we need to handle more than readonly_data_section?
++        if(SYMBOL_REF_BLOCK(orig)->sect == readonly_data_section)
++        {
++            /*
++             * Non-folded constants when optimizing, testcase (compile with -O2)
++             * const int aRodata2=42;
++             * const int *get() { return &aRodata2; }
++             */
++            result = true;
++            //printf("constant (sect==readonly)\n\n");
++        } else {
++            /* Defined (not just declared) vars when optimizing, testcase (compile with -O2)
++             * int aData=1;
++             * int get() { return aData; }
++             */
++            //printf("variable (decl==0)\n\n");
++        }
++    }
++
++    return result;
++}
++
+ /* Legitimize PIC load to ORIG into REG.  If REG is NULL, a new pseudo is
+    created to hold the result of the load.  If not NULL, PIC_REG indicates
+    which register to use as PIC register, otherwise it is decided by register
+@@ -7526,6 +7709,8 @@
+ 	  reg = gen_reg_rtx (Pmode);
+ 	}
+ 
++    bool miosix_ref_demux = miosix_processes_ref_demux(orig);
++
+       /* VxWorks does not impose a fixed gap between segments; the run-time
+ 	 gap can be different from the object-file gap.  We therefore can't
+ 	 use GOTOFF unless we are absolutely sure that the symbol is in the
+@@ -7535,13 +7720,7 @@
+       /* References to weak symbols cannot be resolved locally: they
+ 	 may be overridden by a non-weak definition at link time.  */
+       rtx_insn *insn;
+-      if ((GET_CODE (orig) == LABEL_REF
+-	   || (GET_CODE (orig) == SYMBOL_REF
+-	       && SYMBOL_REF_LOCAL_P (orig)
+-	       && (SYMBOL_REF_DECL (orig)
+-		   ? !DECL_WEAK (SYMBOL_REF_DECL (orig)) : 1)))
+-	  && NEED_GOT_RELOC
+-	  && arm_pic_data_is_text_relative)
++    if (miosix_ref_demux && NEED_GOT_RELOC && arm_pic_data_is_text_relative)
+ 	insn = arm_pic_static_addr (orig, reg);
+       else
+ 	{
+@@ -23064,14 +23243,24 @@
+ 	  /* References to weak symbols cannot be resolved locally:
+ 	     they may be overridden by a non-weak definition at link
+ 	     time.  */
+-	  if (!arm_pic_data_is_text_relative
+-	      || (GET_CODE (x) == SYMBOL_REF
+-		  && (!SYMBOL_REF_LOCAL_P (x)
+-		      || (SYMBOL_REF_DECL (x)
+-			  ? DECL_WEAK (SYMBOL_REF_DECL (x)) : 0))))
++      
++      /*
++       * NOTE: On Miosix processes GOTOFF can't work, as we don't know at
++       * time the offset between .text and .got/.data/whatever is in RAM
++       * so always use GOT.
++       * Without this patch a process with something as simple as
++       * int *ptr = { 0 };
++       * int *get() { return ptr; }
++       * uses GOTOFF and produces segfaults upon calling get()
++       */
++// 	  if (!arm_pic_data_is_text_relative
++// 	      || (GET_CODE (x) == SYMBOL_REF
++// 		  && (!SYMBOL_REF_LOCAL_P (x)
++// 		      || (SYMBOL_REF_DECL (x)
++// 			  ? DECL_WEAK (SYMBOL_REF_DECL (x)) : 0))))
+ 	    fputs ("(GOT)", asm_out_file);
+-	  else
+-	    fputs ("(GOTOFF)", asm_out_file);
++// 	  else
++// 	    fputs ("(GOTOFF)", asm_out_file);
+ 	}
+       fputc ('\n', asm_out_file);
+       return true;
+diff -ruN gcc-9.2.0-old/gcc/config/arm/arm.h gcc-9.2.0/gcc/config/arm/arm.h
+--- gcc-9.2.0-old/gcc/config/arm/arm.h	2019-04-23 12:03:41.000000000 +0200
++++ gcc-9.2.0/gcc/config/arm/arm.h	2025-01-24 23:55:01.451117005 +0100
+@@ -878,7 +878,12 @@
+ #define EH_RETURN_STACKADJ_RTX	gen_rtx_REG (SImode, ARM_EH_STACKADJ_REGNUM)
+ 
+ #ifndef ARM_TARGET2_DWARF_FORMAT
+-#define ARM_TARGET2_DWARF_FORMAT DW_EH_PE_pcrel
++//TODO: #ifdef _MIOSIX does not work in this context
++//Produce exception unwinding tables that work with Miosix processes
++//see processes-patch.md, section "The problem with unwinding exception tables"
++//we want pcrel as usual for the Miosix kernel, and datarel for processes (pic)
++#define ARM_TARGET2_DWARF_FORMAT (flag_pic ? DW_EH_PE_datarel : DW_EH_PE_pcrel)
++//#define ARM_TARGET2_DWARF_FORMAT DW_EH_PE_pcrel
+ #endif
+ 
+ /* ttype entries (the only interesting data references used)
+diff -ruN gcc-9.2.0-old/gcc/config/arm/miosix-eabi.h gcc-9.2.0/gcc/config/arm/miosix-eabi.h
+--- gcc-9.2.0-old/gcc/config/arm/miosix-eabi.h	1970-01-01 01:00:00.000000000 +0100
++++ gcc-9.2.0/gcc/config/arm/miosix-eabi.h	2025-01-25 00:08:11.910192205 +0100
+@@ -0,0 +1,19 @@
++
++/*
++ * RATIONALE: adding builtin_define to always define _MIOSIX
++ * - when libgcc/libstdc++/newlib are compiled, as there are some #ifdef _MIOSIX
++ * - when Miosix processes are compiled, to allow #ifdef _MIOSIX
++ * Also add versioning to miosix-specific compiler patches.
++ * Note: intentionally breaking compatibility with previous compiler patches
++ * which defined _MIOSIX_GCC_PATCH_VERSION instead of _MIOSIX_GCC_PATCH_MAJOR
++ */
++
++#undef TARGET_OS_CPP_BUILTINS
++#define TARGET_OS_CPP_BUILTINS()         \
++    do {                                 \
++        TARGET_BPABI_CPP_BUILTINS();     \
++        builtin_define("_MIOSIX");       \
++        builtin_define("_MIOSIX_GCC_PATCH_MAJOR=3"); \
++        builtin_define("_MIOSIX_GCC_PATCH_MINOR=3"); \
++        builtin_assert("system=miosix"); \
++    } while(false)
+diff -ruN gcc-9.2.0-old/gcc/config/arm/t-arm-miosix gcc-9.2.0/gcc/config/arm/t-arm-miosix
+--- gcc-9.2.0-old/gcc/config/arm/t-arm-miosix	1970-01-01 01:00:00.000000000 +0100
++++ gcc-9.2.0/gcc/config/arm/t-arm-miosix	2025-01-25 13:12:42.846516611 +0100
+@@ -0,0 +1,101 @@
++
++## RATIONALE: build multilibs for all microcontroller-relevant ARM architectures
++## with and without `-fpie -msingle-pic-base' (for processes).
++## If processes were not required, we could have simply set the option
++## --with-multilib-list=rmprofile, which builds multilibs for exactly the
++## architectures we are interested in.
++
++## To update this file, have a look in t-multilib and t-rmprofile and bring over
++## new architectures/variants. Note that we are not building softfp ABI and
++## the directory structure is different than what is setup by t-rmprofile
++## (`-mfloat-abi=soft' is in the root directory, while rmprofile puts it in
++## the `soft' directory).
++##
++## Documentation for the variables set in this file are in
++##    https://gcc.gnu.org/onlinedocs/gccint/Target-Fragment.html
++
++MULTILIB_OPTIONS     =
++MULTILIB_DIRNAMES    =
++MULTILIB_MATCHES     =
++MULTILIB_EXCEPTIONS  =
++MULTILIB_REQUIRED    =
++MULTILIB_REUSE       =
++
++# explicit default is -marm
++MULTILIB_OPTIONS    += marm/mthumb
++MULTILIB_DIRNAMES   += arm thumb
++
++# implicit default is set to armv4t (because explicit defualt -mcpu=arm7tdmi)
++MULTILIB_OPTIONS    += march=armv4t/march=armv6s-m/march=armv7-m/march=armv7e-m/march=armv7e-m+fp/march=armv7e-m+fp.dp/march=armv8-m.base/march=armv8-m.main/march=armv8-m.main+fp/march=armv8-m.main+fp.dp
++MULTILIB_DIRNAMES   += v4t v6-m v7-m v7e-m v7e-m+fp v7e-m+dp v8-m.base v8-m.main v8-m.main+fp v8-m.main+dp
++
++# implicit default is -mfloat-abi=soft due to the fallback value of the TARGET_DEFAULT_FLOAT_ABI define
++MULTILIB_OPTIONS    += mfloat-abi=soft/mfloat-abi=hard
++MULTILIB_DIRNAMES   += nofp hard
++
++MULTILIB_OPTIONS    += fpie msingle-pic-base
++MULTILIB_DIRNAMES   += pie single-pic-base
++
++## Multilibs to build:
++
++# Armv4 (ARM7TDMI, no FP)
++MULTILIB_REQUIRED	+= marm/march=armv4t/mfloat-abi=soft
++MULTILIB_REQUIRED	+= mthumb/march=armv4t/mfloat-abi=soft
++
++# Armv6 (Cortex-M0, M0+, M1, no FP)
++MULTILIB_REQUIRED	+= mthumb/march=armv6s-m/mfloat-abi=soft
++MULTILIB_REQUIRED	+= mthumb/march=armv6s-m/mfloat-abi=soft/fpie/msingle-pic-base
++
++# Armv7-M (Cortex-M3, M4, M7, no FP)
++MULTILIB_REQUIRED	+= mthumb/march=armv7-m/mfloat-abi=soft
++MULTILIB_REQUIRED	+= mthumb/march=armv7-m/mfloat-abi=soft/fpie/msingle-pic-base
++
++# Armv7e-M (Cortex-M4, M7 with FP single and double precision)
++MULTILIB_REQUIRED	+= mthumb/march=armv7e-m+fp/mfloat-abi=hard
++MULTILIB_REQUIRED	+= mthumb/march=armv7e-m+fp/mfloat-abi=hard/fpie/msingle-pic-base
++MULTILIB_REQUIRED	+= mthumb/march=armv7e-m+fp.dp/mfloat-abi=hard
++MULTILIB_REQUIRED	+= mthumb/march=armv7e-m+fp.dp/mfloat-abi=hard/fpie/msingle-pic-base
++
++# Armv8-m baseline (Cortex-M23, no FP)
++MULTILIB_REQUIRED	+= mthumb/march=armv8-m.base/mfloat-abi=soft
++MULTILIB_REQUIRED	+= mthumb/march=armv8-m.base/mfloat-abi=soft/fpie/msingle-pic-base
++
++# Armv8-m mainline (Cortex-M33, M35P with FP single and double precision)
++MULTILIB_REQUIRED	+= mthumb/march=armv8-m.main+fp/mfloat-abi=hard
++MULTILIB_REQUIRED	+= mthumb/march=armv8-m.main+fp/mfloat-abi=hard/fpie/msingle-pic-base
++MULTILIB_REQUIRED	+= mthumb/march=armv8-m.main+fp.dp/mfloat-abi=hard
++MULTILIB_REQUIRED	+= mthumb/march=armv8-m.main+fp.dp/mfloat-abi=hard/fpie/msingle-pic-base
++
++## Aliases
++
++# Once upon a time, Armv6 had a variant Armv6s with support for the SVC
++# instruction, but it was an undocumented variant which then got merged in the
++# base Armv6 standard. This rule always aliases armv6 to armv6s as they are
++# equivalent for all intents and purposes
++MULTILIB_MATCHES	+= march?armv6s-m=march?armv6-m
++
++# Map v7e no FPU to v7
++MULTILIB_MATCHES        += march?armv7-m=march?armv7e-m
++
++# Map v8.main no FPU to v8.base
++MULTILIB_MATCHES        += march?armv8-m.base=march?armv8-m.main
++
++# Map all v8-m.main+dsp FP variants down the the variant without DSP.
++MULTILIB_MATCHES	+= march?armv8-m.main=march?armv8-m.main+dsp
++MULTILIB_MATCHES	+= $(foreach FP, +fp +fp.dp, march?armv8-m.main$(FP)=march?armv8-m.main+dsp$(FP))
++
++# For single-precision only fpv5, use the base fp libraries
++MULTILIB_MATCHES	+= march?armv7e-m+fp=march?armv7e-m+fpv5
++
++# For architectures with no FPU, map unspecified -mfloat-abi to soft
++# Note: the t-rmprofile fragment does not do this, even though it is required,
++# because the main makefile (config.gcc) special-cases this by setting
++# with_float="soft" which results in all invocations to have the default
++# option "--with-float=soft"
++MULTILIB_REUSE		+= mthumb/march.armv4t/mfloat-abi.soft=mthumb/march.armv4t
++MULTILIB_REUSE		+= marm/march.armv4t/mfloat-abi.soft=marm/march.armv4t
++MULTILIB_REUSE		+= $(foreach ARCH, armv6s-m armv7-m armv8-m\.base, \
++			mthumb/march.$(ARCH)/mfloat-abi.soft=mthumb/march.$(ARCH))
++MULTILIB_REUSE		+= $(foreach ARCH, armv6s-m armv7-m armv8-m\.base, \
++			mthumb/march.$(ARCH)/mfloat-abi.soft/fpie/msingle-pic-base=mthumb/march.$(ARCH)/fpie/msingle-pic-base)
++
+diff -ruN gcc-9.2.0-old/gcc/config/miosix.opt gcc-9.2.0/gcc/config/miosix.opt
+--- gcc-9.2.0-old/gcc/config/miosix.opt	1970-01-01 01:00:00.000000000 +0100
++++ gcc-9.2.0/gcc/config/miosix.opt	2025-01-24 23:56:29.334969234 +0100
+@@ -0,0 +1,8 @@
++; Specify handling of compiler options for Miosix.
++
++; The -pthread option does nothing on Mioisx, as threads are always enabled, but
++; we support it as many build scripts hardcode it, including libgomp and cmake
++pthread
++Ignore
++
++; This comment is to ensure we retain the blank line above.
+diff -ruN gcc-9.2.0-old/gcc/config.gcc gcc-9.2.0/gcc/config.gcc
+--- gcc-9.2.0-old/gcc/config.gcc	2019-08-03 22:16:22.000000000 +0200
++++ gcc-9.2.0/gcc/config.gcc	2025-01-24 23:56:29.334969234 +0100
+@@ -1218,6 +1218,14 @@
+ 	tmake_file="${tmake_file} arm/t-arm arm/t-arm-elf"
+ 	target_cpu_cname="arm7tdmi"
+ 	case ${target} in
++	arm*-miosix-eabi*)
++	  # Copy options from arm*-*-eabi*, add the miosix-specific ones
++	  # and make sure arm/t-arm-elf is not added to tmake_file
++	  tm_file="${tm_file} newlib-stdint.h arm/miosix-eabi.h"  # Append
++	  tmake_file="arm/t-arm arm/t-arm-miosix arm/t-bpabi"     # Replace
++	  extra_options="${extra_options} miosix.opt"             # Append
++	  use_gcc_stdint=wrap
++	  ;;
+ 	arm*-*-eabi*)
+ 	  tm_file="$tm_file newlib-stdint.h"
+ 	  tmake_file="${tmake_file} arm/t-bpabi"
+diff -ruN gcc-9.2.0-old/gcc/configure gcc-9.2.0/gcc/configure
+--- gcc-9.2.0-old/gcc/configure	2019-06-26 11:15:46.000000000 +0200
++++ gcc-9.2.0/gcc/configure	2025-01-24 23:55:01.451117005 +0100
+@@ -11860,7 +11860,7 @@
+     # default
+     target_thread_file='single'
+     ;;
+-  aix | dce | lynx | mipssde | posix | rtems | \
++  aix | dce | lynx | miosix | mipssde | posix | rtems | \
+   single | tpf | vxworks | win32)
+     target_thread_file=${enable_threads}
+     ;;
+diff -ruN gcc-9.2.0-old/gcc/configure.ac gcc-9.2.0/gcc/configure.ac
+--- gcc-9.2.0-old/gcc/configure.ac	2019-06-26 11:15:46.000000000 +0200
++++ gcc-9.2.0/gcc/configure.ac	2025-01-24 23:55:01.455116994 +0100
+@@ -1646,7 +1646,7 @@
+     # default
+     target_thread_file='single'
+     ;;
+-  aix | dce | lynx | mipssde | posix | rtems | \
++  aix | dce | lynx | miosix | mipssde | posix | rtems | \
+   single | tpf | vxworks | win32)
+     target_thread_file=${enable_threads}
+     ;;
+diff -ruN gcc-9.2.0-old/gcc/except.c gcc-9.2.0/gcc/except.c
+--- gcc-9.2.0-old/gcc/except.c	2019-03-11 14:58:44.000000000 +0100
++++ gcc-9.2.0/gcc/except.c	2025-01-24 23:55:01.455116994 +0100
+@@ -3022,6 +3022,11 @@
+   else
+     {
+       tt_format = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/1);
++      // This is here for debugging the change to ARM_TARGET2_DWARF_FORMAT
++      // in Miosix processes: when compiling C++ code that throws and catches
++      // exceptions, it should print 0x10 (DW_EH_PE_pcrel) when compiling the
++      // kernel (non-pic) and 0x30 (DW_EH_PE_datarel) when compiling processes
++      //printf("\n\n-- called 0x%x --\n\n",tt_format);
+       if (HAVE_AS_LEB128)
+ 	ASM_GENERATE_INTERNAL_LABEL (ttype_label,
+ 				     section ? "LLSDATTC" : "LLSDATT",
+diff -ruN gcc-9.2.0-old/libatomic/config/miosix/host-config.h gcc-9.2.0/libatomic/config/miosix/host-config.h
+--- gcc-9.2.0-old/libatomic/config/miosix/host-config.h	1970-01-01 01:00:00.000000000 +0100
++++ gcc-9.2.0/libatomic/config/miosix/host-config.h	2025-01-24 23:55:01.687116349 +0100
+@@ -0,0 +1,23 @@
++
++/*
++ * According to libatomic_i.h, here we should implement
++ * - UWORD protect_start(void *ptr);
++ * - void protect_end(void *ptr, UWORD token);
++ * which are used by fop_n.c fop_n.c cas_n.c exch_n.c tas_n.c store_n.c for
++ * 'small' operations.
++ */
++
++unsigned int libat_quick_lock_n(void *ptr);
++void libat_quick_unlock_n(void *ptr, unsigned int token);
++
++static inline UWORD protect_start(void *ptr)
++{
++	return libat_quick_lock_n(ptr);
++}
++
++static inline void protect_end(void *ptr, UWORD token)
++{
++	libat_quick_unlock_n(ptr, token);
++}
++
++#include_next <host-config.h>
+diff -ruN gcc-9.2.0-old/libatomic/config/miosix/lock.c gcc-9.2.0/libatomic/config/miosix/lock.c
+--- gcc-9.2.0-old/libatomic/config/miosix/lock.c	1970-01-01 01:00:00.000000000 +0100
++++ gcc-9.2.0/libatomic/config/miosix/lock.c	2025-01-24 23:55:01.687116349 +0100
+@@ -0,0 +1,13 @@
++
++/*
++ * According to libatomic_i.h, here we should implement
++ * - void libat_lock_n(void *ptr, size_t n);
++ * - void libat_unlock_n(void *ptr, size_t n);
++ * which are used by gexch.c gcas.c gload.c gstore.c for 'large' operations.
++ *
++ * Except, we don't. These function may be directly implemented in Miosix should
++ * the need arise, or intentionally left as undefined references if large
++ * locking intrinsics are to be disallowed.
++ */
++
++#include "libatomic_i.h"
+diff -ruN gcc-9.2.0-old/libatomic/configure.tgt gcc-9.2.0/libatomic/configure.tgt
+--- gcc-9.2.0-old/libatomic/configure.tgt	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libatomic/configure.tgt	2025-01-24 23:55:01.687116349 +0100
+@@ -154,6 +154,10 @@
+         esac
+ 	;;
+ 
++  arm*-miosix-eabi*)
++	config_path="miosix"
++	;;
++
+   *-*-rtems*)
+ 	XCFLAGS="${configure_tgt_pre_target_cpu_XCFLAGS}"
+ 	config_path="rtems"
+diff -ruN gcc-9.2.0-old/libgcc/config/arm/pr-support.c gcc-9.2.0/libgcc/config/arm/pr-support.c
+--- gcc-9.2.0-old/libgcc/config/arm/pr-support.c	2019-04-23 12:03:41.000000000 +0200
++++ gcc-9.2.0/libgcc/config/arm/pr-support.c	2025-01-24 23:55:01.687116349 +0100
+@@ -376,7 +376,14 @@
+ _Unwind_Ptr
+ _Unwind_GetDataRelBase (_Unwind_Context *context __attribute__ ((unused)))
+ {
+-  abort ();
++//TODO: #ifdef _MIOSIX does not work in this context
++//Support exception unwinding that work with Miosix processes
++//see processes-patch.md, section "The problem with unwinding exception tables"
++//NOTE: this code gets linked (even though it never gets used) also in the kernel,
++//so the symbol name we coose here must also exist in the kernel linker scripts
++  extern char _data asm("_data"); //defined in the linker script
++  return &_data;
++//   abort ();
+ }
+ 
+ _Unwind_Ptr
+diff -ruN gcc-9.2.0-old/libgcc/config/arm/unwind-arm.h gcc-9.2.0/libgcc/config/arm/unwind-arm.h
+--- gcc-9.2.0-old/libgcc/config/arm/unwind-arm.h	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libgcc/config/arm/unwind-arm.h	2025-01-24 23:55:01.687116349 +0100
+@@ -57,6 +57,12 @@
+ #elif defined(__symbian__) || defined(__uClinux__)
+ #define _GLIBCXX_OVERRIDE_TTYPE_ENCODING (DW_EH_PE_absptr)
+       /* Absolute pointer.  Nothing more to do.  */
++#elif defined(_MIOSIX)
++     //DO NOT DEFINE _GLIBCXX_OVERRIDE_TTYPE_ENCODING, we don't want that kludge
++     //as the encoding could be either pc-relative (kernel) or data-relative (processes)
++     //see processes-patch.md
++     //This relies on base_of_encoded_value() setting base to 0 for DW_EH_PE_pcrel
++     tmp += base ? base : ptr;
+ #else
+ #define _GLIBCXX_OVERRIDE_TTYPE_ENCODING (DW_EH_PE_pcrel)
+       /* Pc-relative pointer.  */
+diff -ruN gcc-9.2.0-old/libgcc/config/gthr-miosix.h gcc-9.2.0/libgcc/config/gthr-miosix.h
+--- gcc-9.2.0-old/libgcc/config/gthr-miosix.h	1970-01-01 01:00:00.000000000 +0100
++++ gcc-9.2.0/libgcc/config/gthr-miosix.h	2025-01-24 23:55:01.687116349 +0100
+@@ -0,0 +1,94 @@
++
++// RATIONALE: make the code generated by GCC thread safe by providing a thread model
++
++#ifndef GCC_GHTR_MIOSIX_H
++#define GCC_GHTR_MIOSIX_H
++
++#include <pthread.h>
++#include <unistd.h>
++#include <sched.h>
++#include <time.h>
++
++//Note to self: gthr.h contains useful information
++//on how a gthr-xxx.h should look like
++
++#define __GTHREADS 1
++#define __GTHREAD_HAS_COND 1
++#define __GTHREADS_CXX0X 1
++//Found in libstdc++
++#define _GTHREAD_USE_MUTEX_TIMEDLOCK 1
++
++//In Miosix, threads are always enabled, period.
++#define __gthread_active_p() 1
++
++typedef pthread_t       __gthread_t;
++typedef pthread_key_t   __gthread_key_t; //This actually is unimplemented
++typedef pthread_once_t  __gthread_once_t;
++typedef pthread_mutex_t __gthread_mutex_t;
++typedef pthread_mutex_t __gthread_recursive_mutex_t;
++typedef pthread_cond_t  __gthread_cond_t;
++typedef struct timespec __gthread_time_t;
++
++#define __GTHREAD_ONCE_INIT                     PTHREAD_ONCE_INIT
++#define __GTHREAD_MUTEX_INIT                    PTHREAD_MUTEX_INITIALIZER
++#define __GTHREAD_MUTEX_INIT_FUNCTION           __gthread_mutex_init_function
++#define __GTHREAD_RECURSIVE_MUTEX_INIT          PTHREAD_MUTEX_RECURSIVE_INITIALIZER_NP
++#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function
++#define __GTHREAD_COND_INIT                     PTHREAD_COND_INITIALIZER
++#define __GTHREAD_COND_INIT_FUNCTION            __gthread_cond_init_function
++#define __GTHREAD_TIME_INIT                     {0,0}
++
++#define __gthread_once                    pthread_once
++#define __gthread_mutex_destroy           pthread_mutex_destroy
++#define __gthread_recursive_mutex_destroy pthread_mutex_destroy
++#define __gthread_cond_destroy            pthread_cond_destroy
++#define __gthread_mutex_lock              pthread_mutex_lock
++#define __gthread_mutex_trylock           pthread_mutex_trylock
++#define __gthread_mutex_unlock            pthread_mutex_unlock
++#define __gthread_recursive_mutex_lock    pthread_mutex_lock
++#define __gthread_recursive_mutex_trylock pthread_mutex_trylock
++#define __gthread_recursive_mutex_unlock  pthread_mutex_unlock
++#define __gthread_cond_signal             pthread_cond_signal
++#define __gthread_cond_broadcast          pthread_cond_broadcast
++#define __gthread_cond_wait               pthread_cond_wait
++#define __gthread_cond_wait_recursive     pthread_cond_wait
++#define __gthread_join                    pthread_join
++#define __gthread_detach                  pthread_detach
++#define __gthread_equal                   pthread_equal
++#define __gthread_self                    pthread_self
++#define __gthread_yield                   sched_yield
++
++//These actually aren't implemented in Miosix, so code trying to use these will
++//fail to link, and for now it's the "desired" behaviour (better than failing
++//at runtime, at least). They are used somewhere in libstdc++ too, but it can
++//be patched to remove those uses.
++#define __gthread_key_create                pthread_key_create
++#define __gthread_key_delete                pthread_key_delete
++#define __gthread_getspecific               pthread_getspecific
++#define __gthread_setspecific               pthread_setspecific
++#define __gthread_mutex_timedlock           pthread_mutex_timedlock
++#define __gthread_recursive_mutex_timedlock pthread_mutex_timedlock
++#define __gthread_cond_timedwait            pthread_cond_timedwait
++
++static inline void __gthread_mutex_init_function(__gthread_mutex_t *__mutex)
++{
++    pthread_mutex_init(__mutex, NULL);
++}
++
++static inline void __gthread_recursive_mutex_init_function(__gthread_recursive_mutex_t *__mutex)
++{
++    //Defined in newlib patches for Miosix
++    __lock_init_recursive(*__mutex);
++}
++
++static inline void __gthread_cond_init_function(__gthread_cond_t *__cond)
++{
++    pthread_cond_init(__cond, NULL);
++}
++
++static inline int __gthread_create(__gthread_t *__thrd, void *(*__func)(void*), void *__args)
++{
++    return pthread_create(__thrd, NULL, __func, __args);
++}
++
++#endif //GCC_GHTR_MIOSIX_H
+diff -ruN gcc-9.2.0-old/libgcc/configure gcc-9.2.0/libgcc/configure
+--- gcc-9.2.0-old/libgcc/configure	2018-10-31 18:03:16.000000000 +0100
++++ gcc-9.2.0/libgcc/configure	2025-01-24 23:55:01.691116338 +0100
+@@ -5543,6 +5543,7 @@
+     aix)	thread_header=config/rs6000/gthr-aix.h ;;
+     dce)	thread_header=config/pa/gthr-dce.h ;;
+     lynx)	thread_header=config/gthr-lynx.h ;;
++    miosix)	thread_header=config/gthr-miosix.h ;;
+     mipssde)	thread_header=config/mips/gthr-mipssde.h ;;
+     posix)	thread_header=gthr-posix.h ;;
+     rtems)	thread_header=config/gthr-rtems.h ;;
+diff -ruN gcc-9.2.0-old/libgcc/unwind-arm-common.inc gcc-9.2.0/libgcc/unwind-arm-common.inc
+--- gcc-9.2.0-old/libgcc/unwind-arm-common.inc	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libgcc/unwind-arm-common.inc	2025-01-24 23:55:01.691116338 +0100
+@@ -46,14 +46,18 @@
+     ctm_succeeded_with_ptr_to_base = 2
+   };
+ 
+-void __attribute__((weak)) __cxa_call_unexpected(_Unwind_Control_Block *ucbp);
+-bool __attribute__((weak)) __cxa_begin_cleanup(_Unwind_Control_Block *ucbp);
+-enum __cxa_type_match_result __attribute__((weak)) __cxa_type_match
++// Also declaring function prototypes weak seems to trigger the generation of
++// R_ARM_REL32. This only happens with a test program that does not throw
++// exceptions such as a main.cpp with just a printf() compiled without
++// -fno-exceptions for now, we'll just remove weak
++void /*__attribute__((weak))*/ __cxa_call_unexpected(_Unwind_Control_Block *ucbp);
++bool /*__attribute__((weak))*/ __cxa_begin_cleanup(_Unwind_Control_Block *ucbp);
++enum __cxa_type_match_result /*__attribute__((weak))*/ __cxa_type_match
+   (_Unwind_Control_Block *ucbp, const type_info *rttip,
+    bool is_reference, void **matched_object);
+ 
+-_Unwind_Ptr __attribute__((weak))
+-__gnu_Unwind_Find_exidx (_Unwind_Ptr, int *);
++//_Unwind_Ptr __attribute__((weak))
++//__gnu_Unwind_Find_exidx (_Unwind_Ptr, int *);
+ 
+ #define EXIDX_CANTUNWIND 1
+ #define uint32_highbit (((_uw) 1) << 31)
+@@ -205,7 +209,15 @@
+      instruction itself.  */
+   return_address -= 2;
+ 
+-  if (__gnu_Unwind_Find_exidx)
++  //TODO: #ifdef _MIOSIX does not work in this context
++  /*
++   * Apparently checking the address of a weak symbol does not work in Miosix
++   * processes, as we get
++   * libgcc.a(unwind-arm.o): relocation R_ARM_REL32 against external or undefined symbol `__gnu_Unwind_Find_exidx' can not be used when making a PIE executable; recompile with -fPIC
++   * unwind-arm-common.inc:237:(.text+0x138): dangerous relocation: unsupported relocation
++   * Since in Miosix we have __exidx_start|end, just remove this code
++   */
++  /*if (__gnu_Unwind_Find_exidx)
+     {
+       eitp = (const __EIT_entry *) __gnu_Unwind_Find_exidx (return_address,
+ 							    &nrec);
+@@ -216,10 +228,10 @@
+ 	}
+     }
+   else
+-    {
++    {*/
+       eitp = &__exidx_start;
+       nrec = &__exidx_end - &__exidx_start;
+-    }
++    //}
+ 
+   eitp = search_EIT_table (eitp, nrec, return_address);
+ 
+diff -ruN gcc-9.2.0-old/libgcc/unwind-sjlj.c gcc-9.2.0/libgcc/unwind-sjlj.c
+--- gcc-9.2.0-old/libgcc/unwind-sjlj.c	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libgcc/unwind-sjlj.c	2025-01-24 23:55:01.691116338 +0100
+@@ -91,7 +91,14 @@
+   _Unwind_Personality_Fn personality;
+ } _Unwind_FrameState;
+ 
+-
++
++// RATIONALE: _Miosix_set_sjlj_ptr and _Miosix_get_sjlj_ptr make
++// exception handling thread-safe even if Miosix does not support TLS
++// NOTE: C++ uses exception support is in eh_globals.cc, is there any code that
++// triggers these to be called? Otherwise we may either keep them if Miosix
++// will support architectures with sjlj exceptions, or even remove this patch
++#ifndef _MIOSIX
++
+ /* Manage the chain of registered function contexts.  */
+ 
+ /* Single threaded fallback chain.  */
+@@ -163,6 +170,32 @@
+     fc_static = fc;
+ }
+ 
++#else //_MIOSIX
++
++void _Miosix_set_sjlj_ptr(void* ptr);
++void *_Miosix_get_sjlj_ptr();
++
++void
++_Unwind_SjLj_Register (struct SjLj_Function_Context *fc)
++{
++  fc->prev=_Miosix_get_sjlj_ptr();
++  _Miosix_set_sjlj_ptr(fc);
++}
++
++static inline struct SjLj_Function_Context *
++_Unwind_SjLj_GetContext (void)
++{
++  return _Miosix_get_sjlj_ptr();
++}
++
++static inline void
++_Unwind_SjLj_SetContext (struct SjLj_Function_Context *fc)
++{
++  _Miosix_set_sjlj_ptr(fc);
++}
++
++#endif //_MIOSIX
++
+ void
+ _Unwind_SjLj_Unregister (struct SjLj_Function_Context *fc)
+ {
+diff -ruN gcc-9.2.0-old/libgomp/config/posix/omp-lock.h gcc-9.2.0/libgomp/config/posix/omp-lock.h
+--- gcc-9.2.0-old/libgomp/config/posix/omp-lock.h	2008-06-06 15:01:54.000000000 +0200
++++ gcc-9.2.0/libgomp/config/posix/omp-lock.h	2025-01-24 23:56:29.334969234 +0100
+@@ -8,7 +8,9 @@
+    thread than the one that called pthread_mutex_lock.  */
+ 
+ #include <pthread.h>
++#ifndef HAVE_BROKEN_POSIX_SEMAPHORES
+ #include <semaphore.h>
++#endif
+ 
+ typedef pthread_mutex_t omp_lock_25_t;
+ typedef struct { pthread_mutex_t lock; int count; } omp_nest_lock_25_t;
+diff -ruN gcc-9.2.0-old/libgomp/config/posix/sem.h gcc-9.2.0/libgomp/config/posix/sem.h
+--- gcc-9.2.0-old/libgomp/config/posix/sem.h	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libgomp/config/posix/sem.h	2025-01-24 23:56:29.334969234 +0100
+@@ -38,7 +38,9 @@
+ # pragma GCC visibility push(default)
+ #endif
+ 
++#ifndef HAVE_BROKEN_POSIX_SEMAPHORES
+ #include <semaphore.h>
++#endif
+ 
+ #ifdef HAVE_ATTRIBUTE_VISIBILITY
+ # pragma GCC visibility pop
+diff -ruN gcc-9.2.0-old/libgomp/configure gcc-9.2.0/libgomp/configure
+--- gcc-9.2.0-old/libgomp/configure	2019-08-12 09:40:32.000000000 +0200
++++ gcc-9.2.0/libgomp/configure	2025-01-24 23:56:29.338969232 +0100
+@@ -15842,6 +15842,11 @@
+ $as_echo "#define HAVE_BROKEN_POSIX_SEMAPHORES 1" >>confdefs.h
+ 
+     ;;
++  *-miosix*)
++
++$as_echo "#define HAVE_BROKEN_POSIX_SEMAPHORES 1" >>confdefs.h
++
++    ;;
+ esac
+ 
+ # RTEMS specific checks
+diff -ruN gcc-9.2.0-old/libgomp/configure.ac gcc-9.2.0/libgomp/configure.ac
+--- gcc-9.2.0-old/libgomp/configure.ac	2019-08-12 09:40:32.000000000 +0200
++++ gcc-9.2.0/libgomp/configure.ac	2025-01-24 23:56:29.338969232 +0100
+@@ -227,6 +227,10 @@
+     AC_DEFINE(HAVE_BROKEN_POSIX_SEMAPHORES, 1,
+ 	Define if the POSIX Semaphores do not work on your system.)
+     ;;
++  *-miosix*)
++    AC_DEFINE(HAVE_BROKEN_POSIX_SEMAPHORES, 1,
++  	Define if the POSIX Semaphores do not work on your system.)
++    ;;
+ esac
+ 
+ # RTEMS specific checks
+diff -ruN gcc-9.2.0-old/libgomp/configure.tgt gcc-9.2.0/libgomp/configure.tgt
+--- gcc-9.2.0-old/libgomp/configure.tgt	2018-11-08 18:13:04.000000000 +0100
++++ gcc-9.2.0/libgomp/configure.tgt	2025-01-24 23:56:29.338969232 +0100
+@@ -157,6 +157,10 @@
+ 	config_path="nvptx"
+ 	;;
+ 
++  *-miosix-*)
++    config_path="posix"
++    ;;
++
+   *-*-rtems*)
+ 	# Use self-contained synchronization objects if provided by Newlib
+ 	if test "x$ac_cv_type_struct__Mutex_Control" = xyes ; then
+diff -ruN gcc-9.2.0-old/libstdc++-v3/configure gcc-9.2.0/libstdc++-v3/configure
+--- gcc-9.2.0-old/libstdc++-v3/configure	2019-07-03 23:09:13.000000000 +0200
++++ gcc-9.2.0/libstdc++-v3/configure	2025-01-24 23:55:01.719116259 +0100
+@@ -15419,6 +15419,7 @@
+     aix)	thread_header=config/rs6000/gthr-aix.h ;;
+     dce)	thread_header=config/pa/gthr-dce.h ;;
+     lynx)	thread_header=config/gthr-lynx.h ;;
++    miosix)	thread_header=config/gthr-miosix.h ;;
+     mipssde)	thread_header=config/mips/gthr-mipssde.h ;;
+     posix)	thread_header=gthr-posix.h ;;
+     rtems)	thread_header=config/gthr-rtems.h ;;
+@@ -20886,6 +20887,23 @@
+         ac_has_nanosleep=yes
+         ac_has_sched_yield=yes
+         ;;
++    esac
++
++    # apparently the miosix in arm-miosix-eabi is ${target_vendor}
++    case "${target_vendor}" in
++        miosix*)
++        # Rationale: src/c++11/chrono.cc src/c++11/thread.cc include/std/thread
++        # need to target the best syscalls for querying the time and sleeping,
++        # which are
++        # clock_gettime(CLOCK_REALTIME, &tp);  //starting Jan 1st, 1970
++        # clock_gettime(CLOCK_MONOTONIC, &tp); //starting @ boot
++        # clock_nanosleep(CLOCK_MONOTONIC, 0, &__ts, &__ts);
++        # clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &__ts, &__ts);
++        ac_has_clock_realtime=yes
++        ac_has_clock_monotonic=yes
++        ac_has_nanosleep=yes
++        ac_has_sched_yield=yes
++        ;;
+     esac
+ 
+   elif test x"$enable_libstdcxx_time" != x"no"; then
+diff -ruN gcc-9.2.0-old/libstdc++-v3/include/bits/basic_string.h gcc-9.2.0/libstdc++-v3/include/bits/basic_string.h
+--- gcc-9.2.0-old/libstdc++-v3/include/bits/basic_string.h	2019-04-24 17:17:53.000000000 +0200
++++ gcc-9.2.0/libstdc++-v3/include/bits/basic_string.h	2025-01-25 00:02:21.179860596 +0100
+@@ -6538,43 +6538,84 @@
+   { return __gnu_cxx::__stoa(&std::strtold, "stold", __str.c_str(), __idx); }
+ #endif // _GLIBCXX_USE_C99_STDLIB
+ 
++//
++// Patch rationale: use newlib-specific version of vsnprintf to save code size
++// NOTE: enabling patch only if _DEFAULT_SOURCE not to break #include <string>
++// when compiling with -std=c++17 (or any -std=c++XX) and not explicitly adding
++// -D_DEFAULT_SOURCE=1 to the build options
++//
++
+ #if _GLIBCXX_USE_C99_STDIO
+   // NB: (v)snprintf vs sprintf.
+ 
+   // DR 1261.
+   inline string
+   to_string(int __val)
++#if !defined(_MIOSIX) || !defined(_DEFAULT_SOURCE)
+   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, 4 * sizeof(int),
+ 					   "%d", __val); }
++#else
++  { return __gnu_cxx::__to_xstring<string>(&vsniprintf, 4 * sizeof(int),
++					   "%d", __val); }
++#endif
+ 
+   inline string
+   to_string(unsigned __val)
++#if !defined(_MIOSIX) || !defined(_DEFAULT_SOURCE)
+   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
+ 					   4 * sizeof(unsigned),
+ 					   "%u", __val); }
++#else
++  { return __gnu_cxx::__to_xstring<string>(&vsniprintf,
++					   4 * sizeof(unsigned),
++					   "%u", __val); }
++#endif
+ 
+   inline string
+   to_string(long __val)
++#if !defined(_MIOSIX) || !defined(_DEFAULT_SOURCE)
+   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, 4 * sizeof(long),
+ 					   "%ld", __val); }
++#else
++  { return __gnu_cxx::__to_xstring<string>(&vsniprintf, 4 * sizeof(long),
++					   "%ld", __val); }
++#endif
+ 
+   inline string
+   to_string(unsigned long __val)
++#if !defined(_MIOSIX) || !defined(_DEFAULT_SOURCE)
+   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
+ 					   4 * sizeof(unsigned long),
+ 					   "%lu", __val); }
++#else
++  { return __gnu_cxx::__to_xstring<string>(&vsniprintf,
++					   4 * sizeof(unsigned long),
++					   "%lu", __val); }
++#endif
+ 
+   inline string
+   to_string(long long __val)
++#if !defined(_MIOSIX) || !defined(_DEFAULT_SOURCE)
+   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
+ 					   4 * sizeof(long long),
+ 					   "%lld", __val); }
++#else
++  { return __gnu_cxx::__to_xstring<string>(&vsniprintf,
++					   4 * sizeof(long long),
++					   "%lld", __val); }
++#endif
+ 
+   inline string
+   to_string(unsigned long long __val)
++#if !defined(_MIOSIX) || !defined(_DEFAULT_SOURCE)
+   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
+ 					   4 * sizeof(unsigned long long),
+ 					   "%llu", __val); }
++#else
++  { return __gnu_cxx::__to_xstring<string>(&vsniprintf,
++					   4 * sizeof(unsigned long long),
++					   "%llu", __val); }
++#endif
+ 
+   inline string
+   to_string(float __val)
+diff -ruN gcc-9.2.0-old/libstdc++-v3/include/bits/basic_string.tcc gcc-9.2.0/libstdc++-v3/include/bits/basic_string.tcc
+--- gcc-9.2.0-old/libstdc++-v3/include/bits/basic_string.tcc	2019-01-05 00:23:22.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/include/bits/basic_string.tcc	2025-01-24 23:55:01.723116248 +0100
+@@ -1596,6 +1596,15 @@
+       return __in;
+     }
+ 
++/*
++ * Disabling instantiation of std::string from user code forces the use of
++ * the instantiation in string-inst.cc which may reduce compile
++ * times but it hardcodes that C++ exceptions are enabled causing code bloat, as
++ * arm-miosix-eabi-objdump -t string-inst.o | grep '\*UND\*.*__cxa'
++ * shows.
++ */
++#ifndef _MIOSIX
++    
+   // Inhibit implicit instantiations for required instantiations,
+   // which are defined via explicit instantiations elsewhere.
+ #if _GLIBCXX_EXTERN_TEMPLATE
+@@ -1649,6 +1658,8 @@
+ #endif // _GLIBCXX_USE_WCHAR_T
+ #endif // _GLIBCXX_EXTERN_TEMPLATE
+ 
++#endif //_MIOSIX
++
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace std
+ 
+diff -ruN gcc-9.2.0-old/libstdc++-v3/include/bits/fstream.tcc gcc-9.2.0/libstdc++-v3/include/bits/fstream.tcc
+--- gcc-9.2.0-old/libstdc++-v3/include/bits/fstream.tcc	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/include/bits/fstream.tcc	2025-01-24 23:55:01.723116248 +0100
+@@ -80,7 +80,12 @@
+     basic_filebuf<_CharT, _Traits>::
+     basic_filebuf() : __streambuf_type(), _M_lock(), _M_file(&_M_lock),
+     _M_mode(ios_base::openmode(0)), _M_state_beg(), _M_state_cur(),
+-    _M_state_last(), _M_buf(0), _M_buf_size(BUFSIZ),
++    _M_state_last(), _M_buf(0),
++#ifndef _MIOSIX
++    _M_buf_size(BUFSIZ),
++#else
++    _M_buf_size(BUFSIZ+1), //By TFT: BUFSIZ+1 to optimize reads/writes
++#endif
+     _M_buf_allocated(false), _M_reading(false), _M_writing(false), _M_pback(), 
+     _M_pback_cur_save(0), _M_pback_end_save(0), _M_pback_init(false),
+     _M_codecvt(0), _M_ext_buf(0), _M_ext_buf_size(0), _M_ext_next(0),
+diff -ruN gcc-9.2.0-old/libstdc++-v3/include/std/condition_variable gcc-9.2.0/libstdc++-v3/include/std/condition_variable
+--- gcc-9.2.0-old/libstdc++-v3/include/std/condition_variable	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/include/std/condition_variable	2025-01-24 23:55:01.723116248 +0100
+@@ -78,12 +78,32 @@
+   public:
+     typedef __native_type* 		native_handle_type;
+ 
++/*
++ * This patch works together with the one in src/c++11/condition_variable.cc
++ */
++#ifndef _MIOSIX
++    
+     condition_variable() noexcept;
+     ~condition_variable() noexcept;
++    
++#else //_MIOSIX
++    
++    #ifndef __GTHREAD_COND_INIT
++    #error shouldn't fail
++    #endif
++    // __GTHREAD_COND_INIT is defined in Miosix, nothing to do
++    condition_variable() noexcept = default;
++    // pthread_cond_destroy isn't needed in Miosix, and even the original
++    // libstdc++ code doesnt't handle EBUSY anyway
++    ~condition_variable() noexcept = default;
++    
++#endif //_MIOSIX
+ 
+     condition_variable(const condition_variable&) = delete;
+     condition_variable& operator=(const condition_variable&) = delete;
+ 
++#ifndef _MIOSIX
++    
+     void
+     notify_one() noexcept;
+ 
+@@ -92,6 +112,31 @@
+ 
+     void
+     wait(unique_lock<mutex>& __lock) noexcept;
++    
++#else //_MIOSIX
++    
++    void
++    notify_one() noexcept
++    {
++      int __e = __gthread_cond_signal(&_M_cond);
++      if (__e) __throw_system_error(__e);
++    }
++
++    void
++    notify_all() noexcept
++    {
++      int __e = __gthread_cond_broadcast(&_M_cond);
++      if (__e) __throw_system_error(__e);
++    }
++
++    void
++    wait(unique_lock<mutex>& __lock) noexcept
++    {
++      int __e = __gthread_cond_wait(&_M_cond, __lock.mutex()->native_handle());
++      if (__e) std::terminate();
++    }
++    
++#endif //_MIOSIX
+ 
+     template<typename _Predicate>
+       void
+diff -ruN gcc-9.2.0-old/libstdc++-v3/include/std/thread gcc-9.2.0/libstdc++-v3/include/std/thread
+--- gcc-9.2.0-old/libstdc++-v3/include/std/thread	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/include/std/thread	2025-01-24 23:55:01.723116248 +0100
+@@ -50,6 +50,11 @@
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
++  // Patch rationale: _M_start_thread needs this
++#ifdef _MIOSIX
++  extern "C" void* execute_native_thread_routine(void* __p);
++#endif
++
+   /**
+    * @defgroup threads Threads
+    * @ingroup concurrency
+@@ -83,6 +88,11 @@
+ 
+       explicit
+       id(native_handle_type __id) : _M_thread(__id) { }
++      
++      // Patch rationale: join() and detach() patches need this
++#ifdef _MIOSIX
++      native_handle_type _M_get() const noexcept { return _M_thread; }
++#endif
+ 
+     private:
+       friend class thread;
+@@ -162,11 +172,42 @@
+     joinable() const noexcept
+     { return !(_M_id == id()); }
+ 
++#ifndef _MIOSIX
+     void
+     join();
+ 
+     void
+     detach();
++#else
++    //Patch rationale: compiling these in libstdc++.a pulls in exceptions
++    void
++    join()
++    {
++      int __e = EINVAL;
++
++      if (_M_id._M_get() != id()._M_get())
++        __e = __gthread_join(_M_id._M_thread, 0);
++
++      if (__e)
++        __throw_system_error(__e);
++
++      _M_id = id();
++    }
++
++    void
++    detach()
++    {
++      int __e = EINVAL;
++
++      if (_M_id._M_get() != id()._M_get())
++        __e = __gthread_detach(_M_id._M_thread);
++
++      if (__e)
++        __throw_system_error(__e);
++
++      _M_id = id();
++  }
++#endif
+ 
+     thread::id
+     get_id() const noexcept
+@@ -195,8 +236,22 @@
+ 	_M_run() { _M_func(); }
+       };
+ 
++#ifndef _MIOSIX
+     void
+     _M_start_thread(_State_ptr, void (*)());
++#else
++    //Patch rationale: compiling this in libstdc++.a pulls in exceptions
++    void
++    _M_start_thread(_State_ptr state, void (*)())
++    {
++      const int err = __gthread_create(&_M_id._M_thread,
++				       &execute_native_thread_routine,
++				       state.get());
++      if (err)
++        __throw_system_error(err);
++      state.release();
++    }
++#endif
+ 
+     template<typename _Callable>
+       static _State_ptr
+@@ -375,8 +430,14 @@
+ 	    static_cast<std::time_t>(__s.count()),
+ 	    static_cast<long>(__ns.count())
+ 	  };
++	  //Patch rationale: use Miosix preferred sleep function
++#ifdef _MIOSIX
++	while (::clock_nanosleep(CLOCK_MONOTONIC, 0, &__ts, &__ts) == -1 && errno == EINTR)
++	  { }
++#else //_MIOISX
+ 	while (::nanosleep(&__ts, &__ts) == -1 && errno == EINTR)
+ 	  { }
++#endif //_MIOSIX
+ #else
+ 	__sleep_for(__s, __ns);
+ #endif
+@@ -387,6 +448,20 @@
+       inline void
+       sleep_until(const chrono::time_point<_Clock, _Duration>& __atime)
+       {
++	  //Patch rationale: do not add skew by converting absolute sleep to relative
++#ifdef _MIOSIX
++	auto __rtime = __atime.time_since_epoch();
++	auto __s = chrono::duration_cast<chrono::seconds>(__rtime);
++	auto __ns = chrono::duration_cast<chrono::nanoseconds>(__rtime - __s);
++	__gthread_time_t __ts =
++	  {
++	    static_cast<std::time_t>(__s.count()),
++	    static_cast<long>(__ns.count())
++	  };
++	clockid_t __clk = _Clock::is_steady ? CLOCK_MONOTONIC : CLOCK_REALTIME;
++	while (::clock_nanosleep(__clk, TIMER_ABSTIME, &__ts, &__ts) == -1 && errno == EINTR)
++	  { }
++#else //_MIOSIX
+ 	auto __now = _Clock::now();
+ 	if (_Clock::is_steady)
+ 	  {
+@@ -399,6 +474,7 @@
+ 	    sleep_for(__atime - __now);
+ 	    __now = _Clock::now();
+ 	  }
++#endif //_MIOSIX
+       }
+   }
+ 
+diff -ruN gcc-9.2.0-old/libstdc++-v3/libsupc++/bad_array_length.cc gcc-9.2.0/libstdc++-v3/libsupc++/bad_array_length.cc
+--- gcc-9.2.0-old/libstdc++-v3/libsupc++/bad_array_length.cc	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/libsupc++/bad_array_length.cc	2025-01-24 23:55:01.727116237 +0100
+@@ -48,9 +48,18 @@
+ 
+ } // namespace std
+ 
++// RATIONALE: adding __attribute__((weak)) to these functions allows redefining
++// them if compiling without exceptions to avoid pulling in exception support
++// and save code size
++#ifdef _MIOSIX
++#define AW __attribute__((weak))
++#else
++#define AW
++#endif
++
+ namespace __cxxabiv1 {
+ 
+-extern "C" void
++extern "C" void AW
+ __cxa_throw_bad_array_length ()
+ { _GLIBCXX_THROW_OR_ABORT(std::bad_array_length()); }
+ 
+diff -ruN gcc-9.2.0-old/libstdc++-v3/libsupc++/eh_alloc.cc gcc-9.2.0/libstdc++-v3/libsupc++/eh_alloc.cc
+--- gcc-9.2.0-old/libstdc++-v3/libsupc++/eh_alloc.cc	2019-01-21 12:47:30.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/libsupc++/eh_alloc.cc	2025-01-24 23:55:01.727116237 +0100
+@@ -73,6 +73,14 @@
+ # define EMERGENCY_OBJ_COUNT	4
+ #endif
+ 
++//RATIONALE: reduced emergency buffer for ARM microcontrollers, saves RAM
++#ifdef _MIOSIX
++# undef EMERGENCY_OBJ_SIZE
++# undef EMERGENCY_OBJ_COUNT
++# define EMERGENCY_OBJ_SIZE  160
++# define EMERGENCY_OBJ_COUNT 3
++#endif
++
+ namespace __gnu_cxx
+ {
+   void __freeres();
+diff -ruN gcc-9.2.0-old/libstdc++-v3/libsupc++/eh_aux_runtime.cc gcc-9.2.0/libstdc++-v3/libsupc++/eh_aux_runtime.cc
+--- gcc-9.2.0-old/libstdc++-v3/libsupc++/eh_aux_runtime.cc	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/libsupc++/eh_aux_runtime.cc	2025-01-24 23:55:01.727116237 +0100
+@@ -29,14 +29,23 @@
+ #include "unwind-cxx.h"
+ #include <bits/exception_defines.h>
+ 
+-extern "C" void
++// RATIONALE: adding __attribute__((weak)) to these functions allows redefining
++// them if compiling without exceptions to avoid pulling in exception support
++// and save code size
++#ifdef _MIOSIX
++#define AW __attribute__((weak))
++#else
++#define AW
++#endif
++
++extern "C" void AW
+ __cxxabiv1::__cxa_bad_cast ()
+ { _GLIBCXX_THROW_OR_ABORT(std::bad_cast()); }
+ 
+-extern "C" void
++extern "C" void AW
+ __cxxabiv1::__cxa_bad_typeid ()
+ { _GLIBCXX_THROW_OR_ABORT(std::bad_typeid()); }
+ 
+-extern "C" void
++extern "C" void AW
+ __cxxabiv1::__cxa_throw_bad_array_new_length ()
+ { _GLIBCXX_THROW_OR_ABORT(std::bad_array_new_length()); }
+diff -ruN gcc-9.2.0-old/libstdc++-v3/libsupc++/eh_globals.cc gcc-9.2.0/libstdc++-v3/libsupc++/eh_globals.cc
+--- gcc-9.2.0-old/libstdc++-v3/libsupc++/eh_globals.cc	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/libsupc++/eh_globals.cc	2025-01-24 23:55:01.727116237 +0100
+@@ -41,6 +41,11 @@
+ 
+ using namespace __cxxabiv1;
+ 
++// RATIONALE: __cxa_get_globals() and __cxa_get_globals_fast() have been made
++// Miosix syscalls since the __cxa_eh_globals struct needs to be provided on
++// a per-thread basis but Miosix does not support TLS
++#ifndef _MIOSIX
++
+ #if _GLIBCXX_HAVE_TLS
+ 
+ namespace
+@@ -157,3 +162,5 @@
+ #endif
+ 
+ #endif
++
++#endif //_MIOSIX
+diff -ruN gcc-9.2.0-old/libstdc++-v3/libsupc++/eh_terminate.cc gcc-9.2.0/libstdc++-v3/libsupc++/eh_terminate.cc
+--- gcc-9.2.0-old/libstdc++-v3/libsupc++/eh_terminate.cc	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/libsupc++/eh_terminate.cc	2025-01-24 23:55:01.727116237 +0100
+@@ -37,6 +37,15 @@
+ }
+ #endif
+ 
++// RATIONALE: adding __attribute__((weak)) to these functions allows redefining
++// them if compiling without exceptions to avoid pulling in exception support
++// and save code size
++#ifdef _MIOSIX
++#define AW __attribute__((weak))
++#else
++#define AW
++#endif
++
+ using namespace __cxxabiv1;
+ 
+ void
+@@ -51,7 +60,7 @@
+     { std::abort (); }
+ }
+ 
+-void
++void AW
+ std::terminate () throw()
+ {
+   __terminate (get_terminate ());
+@@ -64,7 +73,7 @@
+   std::terminate ();
+ }
+ 
+-void
++void AW
+ std::unexpected ()
+ {
+   __unexpected (get_unexpected ());
+diff -ruN gcc-9.2.0-old/libstdc++-v3/libsupc++/guard.cc gcc-9.2.0/libstdc++-v3/libsupc++/guard.cc
+--- gcc-9.2.0-old/libstdc++-v3/libsupc++/guard.cc	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/libsupc++/guard.cc	2025-01-24 23:55:01.727116237 +0100
+@@ -190,6 +190,11 @@
+ //  | _GLIBCXX_GUARD_WAITING_BIT) and some other threads are waiting until
+ //				  it is initialized.
+ 
++// RATIONALE: __cxa_guard_[acquire|release|abort] have been made Miosix syscalls
++// as static object initialization can occur also before the kernel is started,
++// therefore at a time when using pthread_mutexe and pthread_cond is unsafe.
++#ifndef _MIOSIX
++
+ namespace __cxxabiv1 
+ {
+ #ifdef _GLIBCXX_USE_FUTEX
+@@ -425,3 +430,5 @@
+ #endif
+   }
+ }
++
++#endif //_MIOSIX
+diff -ruN gcc-9.2.0-old/libstdc++-v3/libsupc++/pure.cc gcc-9.2.0/libstdc++-v3/libsupc++/pure.cc
+--- gcc-9.2.0-old/libstdc++-v3/libsupc++/pure.cc	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/libsupc++/pure.cc	2025-01-24 23:55:01.727116237 +0100
+@@ -43,14 +43,23 @@
+ # define writestr(str) /* Empty */
+ #endif
+ 
+-extern "C" void
++// RATIONALE: adding __attribute__((weak)) to these functions allows redefining
++// them if compiling without exceptions to avoid pulling in exception support
++// and save code size
++#ifdef _MIOSIX
++#define AW __attribute__((weak))
++#else
++#define AW
++#endif
++
++extern "C" void AW
+ __cxxabiv1::__cxa_pure_virtual (void)
+ {
+   writestr ("pure virtual method called\n");
+   std::terminate ();
+ }
+ 
+-extern "C" void
++extern "C" void AW
+ __cxxabiv1::__cxa_deleted_virtual (void)
+ {
+   writestr ("deleted virtual method called\n");
+diff -ruN gcc-9.2.0-old/libstdc++-v3/libsupc++/vterminate.cc gcc-9.2.0/libstdc++-v3/libsupc++/vterminate.cc
+--- gcc-9.2.0-old/libstdc++-v3/libsupc++/vterminate.cc	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/libsupc++/vterminate.cc	2025-01-24 23:55:01.727116237 +0100
+@@ -31,13 +31,33 @@
+ #include <cxxabi.h>
+ # include <cstdio>
+ 
++#include <unistd.h>
++
+ using namespace std;
+ using namespace abi;
+ 
++// RATIONALE: add __attribute__((weak)) to make __verbose_terminate_handler
++// overridable to save the code size of __cxa_demangle
++#ifdef _MIOSIX
++#define AW __attribute__((weak))
++#else
++#define AW
++#endif
++
+ namespace __gnu_cxx
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
++  // XXX: having trouble overriding weak functions in Miosix processes,
++  // and this function is increasing code size significantly, replacing it
++  void AW __verbose_terminate_handler()
++  {
++      write(1,"terminate called\n",17);
++      _exit(1);
++  }
++  
++#if 0
++
+   // A replacement for the standard terminate_handler which prints
+   // more information about the terminating exception (if any) on
+   // stderr.
+@@ -95,6 +115,8 @@
+     abort();
+   }
+ 
++#endif
++
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace
+ 
+diff -ruN gcc-9.2.0-old/libstdc++-v3/src/c++11/condition_variable.cc gcc-9.2.0/libstdc++-v3/src/c++11/condition_variable.cc
+--- gcc-9.2.0-old/libstdc++-v3/src/c++11/condition_variable.cc	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/src/c++11/condition_variable.cc	2025-01-24 23:55:01.727116237 +0100
+@@ -31,6 +31,16 @@
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
++/*
++ * Patch rationale: this file is compiled when libstdc++ is built, with
++ * exceptions enabled. When Miosix is compiled with exceptions disabled and
++ * these are used, they cause some of the exception support to be pulled in
++ * increasing code size. These are also so simple that inlining them will
++ * make condition_variable faster. A win-win.
++ * This patch works together with the one in include/std/condition_variable
++ */
++#ifndef _MIOSIX
++
+ #ifdef __GTHREAD_COND_INIT
+   condition_variable::condition_variable() noexcept = default;
+ #else
+@@ -78,6 +88,8 @@
+       __throw_system_error(__e);
+   }
+ 
++#endif //_MIOSIX
++
+   extern void
+   __at_thread_exit(__at_thread_exit_elt*);
+ 
+diff -ruN gcc-9.2.0-old/libstdc++-v3/src/c++11/functexcept.cc gcc-9.2.0/libstdc++-v3/src/c++11/functexcept.cc
+--- gcc-9.2.0-old/libstdc++-v3/src/c++11/functexcept.cc	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/src/c++11/functexcept.cc	2025-01-24 23:55:01.727116237 +0100
+@@ -35,6 +35,15 @@
+ # define _(msgid)   (msgid)
+ #endif
+ 
++// RATIONALE: adding __attribute__((weak)) to these functions allows redefining
++// them if compiling without exceptions to avoid pulling in exception support
++// and save code size
++#ifdef _MIOSIX
++#define AW __attribute__((weak))
++#else
++#define AW
++#endif
++
+ namespace __gnu_cxx
+ {
+   int __snprintf_lite(char *__buf, size_t __bufsize, const char *__fmt,
+@@ -45,45 +54,46 @@
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
+-  void
++  void AW
+   __throw_bad_exception()
+   { _GLIBCXX_THROW_OR_ABORT(bad_exception()); }
+ 
+-  void
++  void AW
+   __throw_bad_alloc()
+   { _GLIBCXX_THROW_OR_ABORT(bad_alloc()); }
+ 
+-  void
++  void AW
+   __throw_bad_cast()
+   { _GLIBCXX_THROW_OR_ABORT(bad_cast()); }
+ 
+-  void
++  void AW
+   __throw_bad_typeid()
+   { _GLIBCXX_THROW_OR_ABORT(bad_typeid()); }
+ 
+-  void
++  void AW
+   __throw_logic_error(const char* __s __attribute__((unused)))
+   { _GLIBCXX_THROW_OR_ABORT(logic_error(_(__s))); }
+ 
+-  void
++  void AW
+   __throw_domain_error(const char* __s __attribute__((unused)))
+   { _GLIBCXX_THROW_OR_ABORT(domain_error(_(__s))); }
+ 
+-  void
++  void AW
+   __throw_invalid_argument(const char* __s __attribute__((unused)))
+   { _GLIBCXX_THROW_OR_ABORT(invalid_argument(_(__s))); }
+ 
+-  void
++  void AW
+   __throw_length_error(const char* __s __attribute__((unused)))
+   { _GLIBCXX_THROW_OR_ABORT(length_error(_(__s))); }
+ 
+-  void
++  void AW
+   __throw_out_of_range(const char* __s __attribute__((unused)))
+   { _GLIBCXX_THROW_OR_ABORT(out_of_range(_(__s))); }
+ 
+-  void
++  void AW
+   __throw_out_of_range_fmt(const char* __fmt, ...)
+   {
++    #ifndef _MIOSIX
+     const size_t __len = __builtin_strlen(__fmt);
+     // We expect at most 2 numbers, and 1 short string. The additional
+     // 512 bytes should provide more than enough space for expansion.
+@@ -95,21 +105,31 @@
+     __gnu_cxx::__snprintf_lite(__s, __alloca_size, __fmt, __ap);
+     _GLIBCXX_THROW_OR_ABORT(out_of_range(_(__s)));
+     va_end(__ap);  // Not reached.
++    #else
++    // Miosix applications usually run with tiny stacks of a few KB, doing an
++    // alloca of 512+ bytes is almost guaranteed to cause stack overflow.
++    // The fact that this allocation happens if an exception is thrown (which
++    // should normally not occur) only makes testing and sizing stacks harder.
++    // For this reason, even if it is a nice feature, we've decided to not
++    // expand formats. Users will get a strange exception with %zu or other
++    // format strings in it, but at least no stack overflow.
++    _GLIBCXX_THROW_OR_ABORT(out_of_range(_(__fmt)));
++    #endif
+   }
+ 
+-  void
++  void AW
+   __throw_runtime_error(const char* __s __attribute__((unused)))
+   { _GLIBCXX_THROW_OR_ABORT(runtime_error(_(__s))); }
+ 
+-  void
++  void AW
+   __throw_range_error(const char* __s __attribute__((unused)))
+   { _GLIBCXX_THROW_OR_ABORT(range_error(_(__s))); }
+ 
+-  void
++  void AW
+   __throw_overflow_error(const char* __s __attribute__((unused)))
+   { _GLIBCXX_THROW_OR_ABORT(overflow_error(_(__s))); }
+ 
+-  void
++  void AW
+   __throw_underflow_error(const char* __s __attribute__((unused)))
+   { _GLIBCXX_THROW_OR_ABORT(underflow_error(_(__s))); }
+ 
+diff -ruN gcc-9.2.0-old/libstdc++-v3/src/c++11/functional.cc gcc-9.2.0/libstdc++-v3/src/c++11/functional.cc
+--- gcc-9.2.0-old/libstdc++-v3/src/c++11/functional.cc	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/src/c++11/functional.cc	2025-01-24 23:55:01.727116237 +0100
+@@ -25,11 +25,20 @@
+ #include <functional>
+ #include <bits/functexcept.h>
+ 
++// RATIONALE: adding __attribute__((weak)) to these functions allows redefining
++// them if compiling without exceptions to avoid pulling in exception support
++// and save code size
++#ifdef _MIOSIX
++#define AW __attribute__((weak))
++#else
++#define AW
++#endif
++
+ namespace std _GLIBCXX_VISIBILITY(default)
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
+-  void
++  void AW
+   __throw_bad_function_call()
+   { _GLIBCXX_THROW_OR_ABORT(bad_function_call()); }
+ 
+diff -ruN gcc-9.2.0-old/libstdc++-v3/src/c++11/future.cc gcc-9.2.0/libstdc++-v3/src/c++11/future.cc
+--- gcc-9.2.0-old/libstdc++-v3/src/c++11/future.cc	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/src/c++11/future.cc	2025-01-24 23:55:01.727116237 +0100
+@@ -25,6 +25,15 @@
+ #include <future>
+ #include <bits/functexcept.h>
+ 
++// RATIONALE: adding __attribute__((weak)) to these functions allows redefining
++// them if compiling without exceptions to avoid pulling in exception support
++// and save code size
++#ifdef _MIOSIX
++#define AW __attribute__((weak))
++#else
++#define AW
++#endif
++
+ namespace
+ {
+   struct future_error_category : public std::error_category
+@@ -71,7 +80,7 @@
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
+-  void
++  void AW
+   __throw_future_error(int __i __attribute__((unused)))
+   { _GLIBCXX_THROW_OR_ABORT(future_error(make_error_code(future_errc(__i)))); }
+ 
+diff -ruN gcc-9.2.0-old/libstdc++-v3/src/c++11/system_error.cc gcc-9.2.0/libstdc++-v3/src/c++11/system_error.cc
+--- gcc-9.2.0-old/libstdc++-v3/src/c++11/system_error.cc	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/src/c++11/system_error.cc	2025-01-24 23:55:01.727116237 +0100
+@@ -32,6 +32,15 @@
+ #include <errno.h>
+ #undef __sso_string
+ 
++// RATIONALE: adding __attribute__((weak)) to these functions allows redefining
++// them if compiling without exceptions to avoid pulling in exception support
++// and save code size
++#ifdef _MIOSIX
++#define AW __attribute__((weak))
++#else
++#define AW
++#endif
++
+ namespace
+ {
+   using std::string;
+@@ -331,7 +340,7 @@
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
+-  void
++  void AW
+   __throw_system_error(int __i __attribute__((unused)))
+   {
+     _GLIBCXX_THROW_OR_ABORT(system_error(error_code(__i, generic_category())));
+diff -ruN gcc-9.2.0-old/libstdc++-v3/src/c++11/thread.cc gcc-9.2.0/libstdc++-v3/src/c++11/thread.cc
+--- gcc-9.2.0-old/libstdc++-v3/src/c++11/thread.cc	2019-01-01 13:31:55.000000000 +0100
++++ gcc-9.2.0/libstdc++-v3/src/c++11/thread.cc	2025-01-24 23:55:01.727116237 +0100
+@@ -22,8 +22,12 @@
+ // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ // <http://www.gnu.org/licenses/>.
+ 
+-
++// Patch rationale: don't need to be ABI backwards compatible, and
++// on top of that the compat code pulls in exceptions when compiling Miosix with
++// exceptions disabled.
++#ifndef _MIOSIX
+ #define _GLIBCXX_THREAD_ABI_COMPAT 1
++#endif //_MIOSIX
+ #include <thread>
+ #include <system_error>
+ #include <cerrno>
+@@ -73,7 +77,16 @@
+ {
+   extern "C"
+   {
++    /*
++     * Patch rationale: the need to call the class destructor makes it
++     * call __cxa_end_cleanup which pulls in exception code. Thus, reimplemented
++     * in Miosix when compiling without exceptions.
++     */
++#ifdef _MIOSIX
++    void* __attribute__((weak))
++#else
+     static void*
++#endif
+     execute_native_thread_routine(void* __p)
+     {
+       thread::_State_ptr __t{ static_cast<thread::_State*>(__p) };
+@@ -101,6 +114,9 @@
+ 
+   thread::_State::~_State() = default;
+ 
++  //Patch rationale: compiling these in libstdc++.a pulls in exceptions
++  //This patch works together with the one in include/std/thread
++#ifndef _MIOSIX
+   void
+   thread::join()
+   {
+@@ -139,6 +155,7 @@
+       __throw_system_error(err);
+     state.release();
+   }
++#endif
+ 
+ #if _GLIBCXX_THREAD_ABI_COMPAT
+   void
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/gcc_mac_arm64.patch b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/gcc_mac_arm64.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0f39271185022e9c161d5a71bc4a0696223ec5e9
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/gcc_mac_arm64.patch
@@ -0,0 +1,14 @@
+diff -ur gcc-11.1.0/gcc/config/host-darwin.c gcc-11.1.0-fixed/gcc/config/host-darwin.c
+--- gcc-9.2.0-old/gcc/config/host-darwin.c	2021-04-27 03:00:13.000000000 -0700
++++ gcc-9.2.0/gcc/config/host-darwin.c	2021-06-11 14:49:13.754000000 -0700
+@@ -22,6 +22,10 @@
+ #include "coretypes.h"
+ #include "diagnostic-core.h"
+ #include "config/host-darwin.h"
++#include "hosthooks.h"
++#include "hosthooks-def.h"
++
++const struct host_hooks host_hooks = HOST_HOOKS_INITIALIZER;
+ 
+ /* Yes, this is really supposed to work.  */
+ /* This allows for a pagesize of 16384, which we have on Darwin20, but should
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/gdb.patch b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/gdb.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0ea84118702d3b6b9e85e00c644245ac6a02623c
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/gdb.patch
@@ -0,0 +1,10 @@
+--- gdb-9.1-old/bfd/elf-bfd.h	2020-02-08 13:50:13
++++ gdb-9.1/bfd/elf-bfd.h	2023-02-07 15:41:42
+@@ -26,6 +26,7 @@
+ #include "elf/external.h"
+ #include "elf/internal.h"
+ #include "bfdlink.h"
++#include <string.h> //GDB on MacOS compiles but doesn't work without this one
+ 
+ #ifdef __cplusplus
+ extern "C" {
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/gmp_arm64.patch b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/gmp_arm64.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d070893681b3af195b1b6a4c705b6c2fcfd4ac37
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/gmp_arm64.patch
@@ -0,0 +1,520 @@
+# HG changeset patch
+# User Torbjorn Granlund <tg@gmplib.org>
+# Date 1606685500 -3600
+# Node ID 5f32dbc41afc1f8cd77af1614f0caeb24deb7d7b
+# Parent  94c84d919f83ba963ed1809f8e80c7bef32db55c
+Avoid the x18 register since it is reserved on Darwin.
+
+diff -r 94c84d919f83 -r 5f32dbc41afc mpn/arm64/aors_n.asm
+--- gmp-6.2.1-old/mpn/arm64/aors_n.asm	Sat Nov 28 23:38:32 2020 +0100
++++ gmp-6.2.1/mpn/arm64/aors_n.asm	Sun Nov 29 22:31:40 2020 +0100
+@@ -68,7 +68,7 @@
+ EPILOGUE()
+ PROLOGUE(func_n)
+ 	CLRCY
+-L(ent):	lsr	x18, n, #2
++L(ent):	lsr	x17, n, #2
+ 	tbz	n, #0, L(bx0)
+ 
+ L(bx1):	ldr	x7, [up]
+@@ -77,7 +77,7 @@
+ 	str	x13, [rp],#8
+ 	tbnz	n, #1, L(b11)
+ 
+-L(b01):	cbz	x18, L(ret)
++L(b01):	cbz	x17, L(ret)
+ 	ldp	x4, x5, [up,#8]
+ 	ldp	x8, x9, [vp,#8]
+ 	sub	up, up, #8
+@@ -88,7 +88,7 @@
+ 	ldp	x10, x11, [vp,#8]
+ 	add	up, up, #8
+ 	add	vp, vp, #8
+-	cbz	x18, L(end)
++	cbz	x17, L(end)
+ 	b	L(top)
+ 
+ L(bx0):	tbnz	n, #1, L(b10)
+@@ -101,7 +101,7 @@
+ 
+ L(b10):	ldp	x6, x7, [up]
+ 	ldp	x10, x11, [vp]
+-	cbz	x18, L(end)
++	cbz	x17, L(end)
+ 
+ 	ALIGN(16)
+ L(top):	ldp	x4, x5, [up,#16]
+@@ -114,8 +114,8 @@
+ 	ADDSUBC	x12, x4, x8
+ 	ADDSUBC	x13, x5, x9
+ 	stp	x12, x13, [rp],#16
+-	sub	x18, x18, #1
+-	cbnz	x18, L(top)
++	sub	x17, x17, #1
++	cbnz	x17, L(top)
+ 
+ L(end):	ADDSUBC	x12, x6, x10
+ 	ADDSUBC	x13, x7, x11
+diff -r 94c84d919f83 -r 5f32dbc41afc mpn/arm64/aorsmul_1.asm
+--- gmp-6.2.1-old/mpn/arm64/aorsmul_1.asm	Sat Nov 28 23:38:32 2020 +0100
++++ gmp-6.2.1/mpn/arm64/aorsmul_1.asm	Sun Nov 29 22:31:40 2020 +0100
+@@ -32,10 +32,15 @@
+ 
+ include(`../config.m4')
+ 
+-C	     cycles/limb
+-C Cortex-A53	9.3-9.8
+-C Cortex-A57	 7.0
+-C X-Gene	 5.0
++C	       addmul_1        submul_1
++C	     cycles/limb     cycles/limb
++C Cortex-A53	9.3-9.8		9.3-9.8
++C Cortex-A55    9.0-9.5		9.3-9.8
++C Cortex-A57	 7		 7
++C Cortex-A72
++C Cortex-A73	 6		 6
++C X-Gene	 5		 5
++C Apple M1	 1.75		 1.75
+ 
+ C NOTES
+ C  * It is possible to keep the carry chain alive between the addition blocks
+diff -r 94c84d919f83 -r 5f32dbc41afc mpn/arm64/aorsorrlshC_n.asm
+--- gmp-6.2.1-old/mpn/arm64/aorsorrlshC_n.asm	Sat Nov 28 23:38:32 2020 +0100
++++ gmp-6.2.1/mpn/arm64/aorsorrlshC_n.asm	Sun Nov 29 22:31:40 2020 +0100
+@@ -65,14 +65,14 @@
+ 
+ ASM_START()
+ PROLOGUE(func_n)
+-	lsr	x18, n, #2
++	lsr	x6, n, #2
+ 	tbz	n, #0, L(bx0)
+ 
+ L(bx1):	ldr	x5, [up]
+ 	tbnz	n, #1, L(b11)
+ 
+ L(b01):	ldr	x11, [vp]
+-	cbz	x18, L(1)
++	cbz	x6, L(1)
+ 	ldp	x8, x9, [vp,#8]
+ 	lsl	x13, x11, #LSH
+ 	ADDSUB(	x15, x13, x5)
+@@ -94,7 +94,7 @@
+ 	ADDSUB(	x17, x13, x5)
+ 	str	x17, [rp],#8
+ 	sub	up, up, #8
+-	cbz	x18, L(end)
++	cbz	x6, L(end)
+ 	b	L(top)
+ 
+ L(bx0):	tbnz	n, #1, L(b10)
+@@ -107,7 +107,7 @@
+ L(b10):	CLRRCY(	x9)
+ 	ldp	x10, x11, [vp]
+ 	sub	up, up, #16
+-	cbz	x18, L(end)
++	cbz	x6, L(end)
+ 
+ 	ALIGN(16)
+ L(top):	ldp	x4, x5, [up,#16]
+@@ -124,8 +124,8 @@
+ 	ADDSUBC(x16, x12, x4)
+ 	ADDSUBC(x17, x13, x5)
+ 	stp	x16, x17, [rp],#16
+-	sub	x18, x18, #1
+-	cbnz	x18, L(top)
++	sub	x6, x6, #1
++	cbnz	x6, L(top)
+ 
+ L(end):	ldp	x4, x5, [up,#16]
+ 	extr	x12, x10, x9, #RSH
+diff -r 94c84d919f83 -r 5f32dbc41afc mpn/arm64/cnd_aors_n.asm
+--- gmp-6.2.1-old/mpn/arm64/cnd_aors_n.asm	Sat Nov 28 23:38:32 2020 +0100
++++ gmp-6.2.1/mpn/arm64/cnd_aors_n.asm	Sun Nov 29 22:31:40 2020 +0100
+@@ -65,7 +65,7 @@
+ 
+ 	CLRCY
+ 
+-	lsr	x18, n, #2
++	lsr	x17, n, #2
+ 	tbz	n, #0, L(bx0)
+ 
+ L(bx1):	ldr	x13, [vp]
+@@ -75,7 +75,7 @@
+ 	str	x9, [rp]
+ 	tbnz	n, #1, L(b11)
+ 
+-L(b01):	cbz	x18, L(rt)
++L(b01):	cbz	x17, L(rt)
+ 	ldp	x12, x13, [vp,#8]
+ 	ldp	x10, x11, [up,#8]
+ 	sub	up, up, #8
+@@ -86,7 +86,7 @@
+ L(b11):	ldp	x12, x13, [vp,#8]!
+ 	ldp	x10, x11, [up,#8]!
+ 	sub	rp, rp, #8
+-	cbz	x18, L(end)
++	cbz	x17, L(end)
+ 	b	L(top)
+ 
+ L(bx0):	ldp	x12, x13, [vp]
+@@ -99,7 +99,7 @@
+ 	b	L(mid)
+ 
+ L(b10):	sub	rp, rp, #16
+-	cbz	x18, L(end)
++	cbz	x17, L(end)
+ 
+ 	ALIGN(16)
+ L(top):	bic	x6, x12, cnd
+@@ -116,8 +116,8 @@
+ 	ADDSUBC	x9, x11, x7
+ 	ldp	x10, x11, [up,#32]!
+ 	stp	x8, x9, [rp,#32]!
+-	sub	x18, x18, #1
+-	cbnz	x18, L(top)
++	sub	x17, x17, #1
++	cbnz	x17, L(top)
+ 
+ L(end):	bic	x6, x12, cnd
+ 	bic	x7, x13, cnd
+diff -r 94c84d919f83 -r 5f32dbc41afc mpn/arm64/logops_n.asm
+--- gmp-6.2.1-old/mpn/arm64/logops_n.asm	Sat Nov 28 23:38:32 2020 +0100
++++ gmp-6.2.1/mpn/arm64/logops_n.asm	Sun Nov 29 22:31:40 2020 +0100
+@@ -78,7 +78,7 @@
+ 
+ ASM_START()
+ PROLOGUE(func)
+-	lsr	x18, n, #2
++	lsr	x17, n, #2
+ 	tbz	n, #0, L(bx0)
+ 
+ L(bx1):	ldr	x7, [up]
+@@ -88,7 +88,7 @@
+ 	str	x15, [rp],#8
+ 	tbnz	n, #1, L(b11)
+ 
+-L(b01):	cbz	x18, L(ret)
++L(b01):	cbz	x17, L(ret)
+ 	ldp	x4, x5, [up,#8]
+ 	ldp	x8, x9, [vp,#8]
+ 	sub	up, up, #8
+@@ -99,7 +99,7 @@
+ 	ldp	x10, x11, [vp,#8]
+ 	add	up, up, #8
+ 	add	vp, vp, #8
+-	cbz	x18, L(end)
++	cbz	x17, L(end)
+ 	b	L(top)
+ 
+ L(bx0):	tbnz	n, #1, L(b10)
+@@ -110,7 +110,7 @@
+ 
+ L(b10):	ldp	x6, x7, [up]
+ 	ldp	x10, x11, [vp]
+-	cbz	x18, L(end)
++	cbz	x17, L(end)
+ 
+ 	ALIGN(16)
+ L(top):	ldp	x4, x5, [up,#16]
+@@ -127,8 +127,8 @@
+ 	POSTOP(	x12)
+ 	POSTOP(	x13)
+ 	stp	x12, x13, [rp],#16
+-	sub	x18, x18, #1
+-	cbnz	x18, L(top)
++	sub	x17, x17, #1
++	cbnz	x17, L(top)
+ 
+ L(end):	LOGOP(	x12, x6, x10)
+ 	LOGOP(	x13, x7, x11)
+diff -r 94c84d919f83 -r 5f32dbc41afc mpn/arm64/lshift.asm
+--- gmp-6.2.1-old/mpn/arm64/lshift.asm	Sat Nov 28 23:38:32 2020 +0100
++++ gmp-6.2.1/mpn/arm64/lshift.asm	Sun Nov 29 22:31:40 2020 +0100
+@@ -61,7 +61,7 @@
+ 	add	rp, rp_arg, n, lsl #3
+ 	add	up, up, n, lsl #3
+ 	sub	tnc, xzr, cnt
+-	lsr	x18, n, #2
++	lsr	x17, n, #2
+ 	tbz	n, #0, L(bx0)
+ 
+ L(bx1):	ldr	x4, [up,#-8]
+@@ -69,7 +69,7 @@
+ 
+ L(b01):	NSHIFT	x0, x4, tnc
+ 	PSHIFT	x2, x4, cnt
+-	cbnz	x18, L(gt1)
++	cbnz	x17, L(gt1)
+ 	str	x2, [rp,#-8]
+ 	ret
+ L(gt1):	ldp	x4, x5, [up,#-24]
+@@ -89,7 +89,7 @@
+ 	PSHIFT	x13, x5, cnt
+ 	NSHIFT	x10, x4, tnc
+ 	PSHIFT	x2, x4, cnt
+-	cbnz	x18, L(gt2)
++	cbnz	x17, L(gt2)
+ 	orr	x10, x10, x13
+ 	stp	x2, x10, [rp,#-16]
+ 	ret
+@@ -123,11 +123,11 @@
+ 	orr	x11, x12, x2
+ 	stp	x10, x11, [rp,#-32]!
+ 	PSHIFT	x2, x4, cnt
+-L(lo0):	sub	x18, x18, #1
++L(lo0):	sub	x17, x17, #1
+ L(lo3):	NSHIFT	x10, x6, tnc
+ 	PSHIFT	x13, x7, cnt
+ 	NSHIFT	x12, x7, tnc
+-	cbnz	x18, L(top)
++	cbnz	x17, L(top)
+ 
+ L(end):	orr	x10, x10, x13
+ 	orr	x11, x12, x2
+diff -r 94c84d919f83 -r 5f32dbc41afc mpn/arm64/lshiftc.asm
+--- gmp-6.2.1-old/mpn/arm64/lshiftc.asm	Sat Nov 28 23:38:32 2020 +0100
++++ gmp-6.2.1/mpn/arm64/lshiftc.asm	Sun Nov 29 22:31:40 2020 +0100
+@@ -61,7 +61,7 @@
+ 	add	rp, rp_arg, n, lsl #3
+ 	add	up, up, n, lsl #3
+ 	sub	tnc, xzr, cnt
+-	lsr	x18, n, #2
++	lsr	x17, n, #2
+ 	tbz	n, #0, L(bx0)
+ 
+ L(bx1):	ldr	x4, [up,#-8]
+@@ -69,7 +69,7 @@
+ 
+ L(b01):	NSHIFT	x0, x4, tnc
+ 	PSHIFT	x2, x4, cnt
+-	cbnz	x18, L(gt1)
++	cbnz	x17, L(gt1)
+ 	mvn	x2, x2
+ 	str	x2, [rp,#-8]
+ 	ret
+@@ -90,7 +90,7 @@
+ 	PSHIFT	x13, x5, cnt
+ 	NSHIFT	x10, x4, tnc
+ 	PSHIFT	x2, x4, cnt
+-	cbnz	x18, L(gt2)
++	cbnz	x17, L(gt2)
+ 	eon	x10, x10, x13
+ 	mvn	x2, x2
+ 	stp	x2, x10, [rp,#-16]
+@@ -125,11 +125,11 @@
+ 	eon	x11, x12, x2
+ 	stp	x10, x11, [rp,#-32]!
+ 	PSHIFT	x2, x4, cnt
+-L(lo0):	sub	x18, x18, #1
++L(lo0):	sub	x17, x17, #1
+ L(lo3):	NSHIFT	x10, x6, tnc
+ 	PSHIFT	x13, x7, cnt
+ 	NSHIFT	x12, x7, tnc
+-	cbnz	x18, L(top)
++	cbnz	x17, L(top)
+ 
+ L(end):	eon	x10, x10, x13
+ 	eon	x11, x12, x2
+diff -r 94c84d919f83 -r 5f32dbc41afc mpn/arm64/mul_1.asm
+--- gmp-6.2.1-old/mpn/arm64/mul_1.asm	Sat Nov 28 23:38:32 2020 +0100
++++ gmp-6.2.1/mpn/arm64/mul_1.asm	Sun Nov 29 22:31:40 2020 +0100
+@@ -56,7 +56,7 @@
+ 
+ PROLOGUE(mpn_mul_1)
+ 	adds	x4, xzr, xzr		C clear register and cy flag
+-L(com):	lsr	x18, n, #2
++L(com):	lsr	x17, n, #2
+ 	tbnz	n, #0, L(bx1)
+ 
+ L(bx0):	mov	x11, x4
+@@ -65,7 +65,7 @@
+ L(b10):	ldp	x4, x5, [up]
+ 	mul	x8, x4, v0
+ 	umulh	x10, x4, v0
+-	cbz	x18, L(2)
++	cbz	x17, L(2)
+ 	ldp	x6, x7, [up,#16]!
+ 	mul	x9, x5, v0
+ 	b	L(mid)-8
+@@ -80,7 +80,7 @@
+ 	str	x9, [rp],#8
+ 	tbnz	n, #1, L(b10)
+ 
+-L(b01):	cbz	x18, L(1)
++L(b01):	cbz	x17, L(1)
+ 
+ L(b00):	ldp	x6, x7, [up]
+ 	mul	x8, x6, v0
+@@ -90,8 +90,8 @@
+ 	adcs	x12, x8, x11
+ 	umulh	x11, x7, v0
+ 	add	rp, rp, #16
+-	sub	x18, x18, #1
+-	cbz	x18, L(end)
++	sub	x17, x17, #1
++	cbz	x17, L(end)
+ 
+ 	ALIGN(16)
+ L(top):	mul	x8, x4, v0
+@@ -110,8 +110,8 @@
+ 	stp	x12, x13, [rp],#32
+ 	adcs	x12, x8, x11
+ 	umulh	x11, x7, v0
+-	sub	x18, x18, #1
+-	cbnz	x18, L(top)
++	sub	x17, x17, #1
++	cbnz	x17, L(top)
+ 
+ L(end):	mul	x8, x4, v0
+ 	adcs	x13, x9, x10
+diff -r 94c84d919f83 -r 5f32dbc41afc mpn/arm64/rsh1aors_n.asm
+--- gmp-6.2.1-old/mpn/arm64/rsh1aors_n.asm	Sat Nov 28 23:38:32 2020 +0100
++++ gmp-6.2.1/mpn/arm64/rsh1aors_n.asm	Sun Nov 29 22:31:40 2020 +0100
+@@ -59,7 +59,7 @@
+ 
+ ASM_START()
+ PROLOGUE(func_n)
+-	lsr	x18, n, #2
++	lsr	x6, n, #2
+ 
+ 	tbz	n, #0, L(bx0)
+ 
+@@ -69,7 +69,7 @@
+ 
+ L(b01):	ADDSUB	x13, x5, x9
+ 	and	x10, x13, #1
+-	cbz	x18, L(1)
++	cbz	x6, L(1)
+ 	ldp	x4, x5, [up],#48
+ 	ldp	x8, x9, [vp],#48
+ 	ADDSUBC	x14, x4, x8
+@@ -80,8 +80,8 @@
+ 	ADDSUBC	x12, x4, x8
+ 	ADDSUBC	x13, x5, x9
+ 	str	x17, [rp], #24
+-	sub	x18, x18, #1
+-	cbz	x18, L(end)
++	sub	x6, x6, #1
++	cbz	x6, L(end)
+ 	b	L(top)
+ 
+ L(1):	cset	x14, COND
+@@ -97,7 +97,7 @@
+ 	ldp	x8, x9, [vp],#32
+ 	ADDSUBC	x12, x4, x8
+ 	ADDSUBC	x13, x5, x9
+-	cbz	x18, L(3)
++	cbz	x6, L(3)
+ 	ldp	x4, x5, [up,#-16]
+ 	ldp	x8, x9, [vp,#-16]
+ 	extr	x17, x12, x15, #1
+@@ -117,7 +117,7 @@
+ 	ADDSUB	x12, x4, x8
+ 	ADDSUBC	x13, x5, x9
+ 	and	x10, x12, #1
+-	cbz	x18, L(2)
++	cbz	x6, L(2)
+ 	ldp	x4, x5, [up,#-16]
+ 	ldp	x8, x9, [vp,#-16]
+ 	ADDSUBC	x14, x4, x8
+@@ -134,8 +134,8 @@
+ 	ADDSUBC	x12, x4, x8
+ 	ADDSUBC	x13, x5, x9
+ 	add	rp, rp, #16
+-	sub	x18, x18, #1
+-	cbz	x18, L(end)
++	sub	x6, x6, #1
++	cbz	x6, L(end)
+ 
+ 	ALIGN(16)
+ L(top):	ldp	x4, x5, [up,#-16]
+@@ -152,8 +152,8 @@
+ 	ADDSUBC	x12, x4, x8
+ 	ADDSUBC	x13, x5, x9
+ 	stp	x16, x17, [rp],#32
+-	sub	x18, x18, #1
+-	cbnz	x18, L(top)
++	sub	x6, x6, #1
++	cbnz	x6, L(top)
+ 
+ L(end):	extr	x16, x15, x14, #1
+ 	extr	x17, x12, x15, #1
+diff -r 94c84d919f83 -r 5f32dbc41afc mpn/arm64/rshift.asm
+--- gmp-6.2.1-old/mpn/arm64/rshift.asm	Sat Nov 28 23:38:32 2020 +0100
++++ gmp-6.2.1/mpn/arm64/rshift.asm	Sun Nov 29 22:31:40 2020 +0100
+@@ -60,7 +60,7 @@
+ PROLOGUE(mpn_rshift)
+ 	mov	rp, rp_arg
+ 	sub	tnc, xzr, cnt
+-	lsr	x18, n, #2
++	lsr	x17, n, #2
+ 	tbz	n, #0, L(bx0)
+ 
+ L(bx1):	ldr	x5, [up]
+@@ -68,7 +68,7 @@
+ 
+ L(b01):	NSHIFT	x0, x5, tnc
+ 	PSHIFT	x2, x5, cnt
+-	cbnz	x18, L(gt1)
++	cbnz	x17, L(gt1)
+ 	str	x2, [rp]
+ 	ret
+ L(gt1):	ldp	x4, x5, [up,#8]
+@@ -89,7 +89,7 @@
+ 	PSHIFT	x13, x4, cnt
+ 	NSHIFT	x10, x5, tnc
+ 	PSHIFT	x2, x5, cnt
+-	cbnz	x18, L(gt2)
++	cbnz	x17, L(gt2)
+ 	orr	x10, x10, x13
+ 	stp	x10, x2, [rp]
+ 	ret
+@@ -121,11 +121,11 @@
+ 	orr	x11, x12, x2
+ 	stp	x11, x10, [rp,#32]!
+ 	PSHIFT	x2, x5, cnt
+-L(lo0):	sub	x18, x18, #1
++L(lo0):	sub	x17, x17, #1
+ L(lo3):	NSHIFT	x10, x7, tnc
+ 	NSHIFT	x12, x6, tnc
+ 	PSHIFT	x13, x6, cnt
+-	cbnz	x18, L(top)
++	cbnz	x17, L(top)
+ 
+ L(end):	orr	x10, x10, x13
+ 	orr	x11, x12, x2
+diff -r 94c84d919f83 -r 5f32dbc41afc mpn/arm64/sqr_diag_addlsh1.asm
+--- gmp-6.2.1-old/mpn/arm64/sqr_diag_addlsh1.asm	Sat Nov 28 23:38:32 2020 +0100
++++ gmp-6.2.1/mpn/arm64/sqr_diag_addlsh1.asm	Sun Nov 29 22:31:40 2020 +0100
+@@ -47,7 +47,7 @@
+ ASM_START()
+ PROLOGUE(mpn_sqr_diag_addlsh1)
+ 	ldr	x15, [up],#8
+-	lsr	x18, n, #1
++	lsr	x14, n, #1
+ 	tbz	n, #0, L(bx0)
+ 
+ L(bx1):	adds	x7, xzr, xzr
+@@ -62,8 +62,8 @@
+ 	ldr	x17, [up],#16
+ 	ldp	x6, x7, [tp],#32
+ 	umulh	x11, x15, x15
+-	sub	x18, x18, #1
+-	cbz	x18, L(end)
++	sub	x14, x14, #1
++	cbz	x14, L(end)
+ 
+ 	ALIGN(16)
+ L(top):	extr	x9, x6, x5, #63
+@@ -84,8 +84,8 @@
+ 	extr	x8, x5, x4, #63
+ 	stp	x12, x13, [rp],#16
+ 	adcs	x12, x8, x10
+-	sub	x18, x18, #1
+-	cbnz	x18, L(top)
++	sub	x14, x14, #1
++	cbnz	x14, L(top)
+ 
+ L(end):	extr	x9, x6, x5, #63
+ 	mul	x10, x17, x17
+
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/newlib.patch b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/newlib.patch
new file mode 100644
index 0000000000000000000000000000000000000000..2d60dbf64e0d314582e1660babd19f9c07afbd83
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/patches/newlib.patch
@@ -0,0 +1,7701 @@
+diff -ruN newlib-3.1.0-old/newlib/configure.host newlib-3.1.0/newlib/configure.host
+--- newlib-3.1.0-old/newlib/configure.host	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/configure.host	2025-01-25 11:33:31.138351952 +0100
+@@ -417,6 +417,10 @@
+ 	stdio64_dir=stdio64
+ 	xdr_dir=xdr
+ 	;;
++  *-miosix-*)
++    sys_dir=miosix
++    posix_dir=posix
++    ;;
+   *-*-netware*)
+ 	signal_dir=
+ 	sys_dir=netware
+@@ -628,6 +632,24 @@
+ 	default_newlib_io_long_long="yes"
+ 	syscall_dir=
+ 	;;
++  *-miosix-*)
++# Miosix requires a couple of tweaks that are #ifdef'd
++# REENTRANT_SYSCALLS_PROVIDED: as in libc/include/reent.h, disables the
++#   syscall definition starting with an underscore in libc/reent
++# GETREENT_PROVIDED Miosix provides its own getreent to give per-thread reent
++# HAVE_BLKSIZE: BUFSIZ is kept small in Miosix to reduce RAM usage, especially on the stack.
++#   therefore to optimize disk throughput, make sure the libc sets buffers based on st_blksize
++# HAVE_FCNTL: make fcntl available
++# HAVE_NANOSLEEP: provides support for sleep/usleep
++# _NO_POPEN: no popen() support in Miosix (missing fork())
++# _NO_WORDEXP: no wordexp() support in Miosix (missing fork())
++# _NO_POSIX_SPAWN: Miosix provides ths function as a syscall
++# _SMALL_HEXDIG: save 256 byte of RAM in stdlib/gdtoa-gethex.c
++# SIGNAL_PROVIDED: disable the implementation of signals in newlib
++# ARG_NUM_MAX=16: save 960 byte of RAM in exec*.c
++	newlib_cflags="${newlib_cflags} -DREENTRANT_SYSCALLS_PROVIDED -DGETREENT_PROVIDED -DHAVE_BLKSIZE -DHAVE_FCNTL -DHAVE_NANOSLEEP -D_NO_POPEN -D_NO_WORDEXP -D_NO_POSIX_SPAWN -D_SMALL_HEXDIG -DSIGNAL_PROVIDED -DARG_NUM_MAX=16"
++	newlib_cflags="${newlib_cflags} -Wall"
++	;;
+ # RTEMS supplies its own versions of some routines:
+ #       malloc()            (reentrant version)
+ #       exit()              RTEMS has a "global" reent to flush
+diff -ruN newlib-3.1.0-old/newlib/libc/include/locale.h newlib-3.1.0/newlib/libc/include/locale.h
+--- newlib-3.1.0-old/newlib/libc/include/locale.h	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/include/locale.h	2024-07-26 22:02:58.645581943 +0200
+@@ -71,18 +71,20 @@
+ char *_setlocale_r (struct _reent *, int, const char *);
+ struct lconv *_localeconv_r (struct _reent *);
+ 
++#ifndef _MIOSIX
+ struct __locale_t *_newlocale_r (struct _reent *, int, const char *,
+ 				 struct __locale_t *);
+ void _freelocale_r (struct _reent *, struct __locale_t *);
+ struct __locale_t *_duplocale_r (struct _reent *, struct __locale_t *);
+ struct __locale_t *_uselocale_r (struct _reent *, struct __locale_t *);
++#endif /* _MIOSIX */
+ 
+ #ifndef _REENT_ONLY
+ 
+ char *setlocale (int, const char *);
+ struct lconv *localeconv (void);
+ 
+-#if __POSIX_VISIBLE >= 200809
++#if __POSIX_VISIBLE >= 200809 && !defined(_MIOSIX)
+ locale_t newlocale (int, const char *, locale_t);
+ void freelocale (locale_t);
+ locale_t duplocale (locale_t);
+diff -ruN newlib-3.1.0-old/newlib/libc/include/sys/config.h newlib-3.1.0/newlib/libc/include/sys/config.h
+--- newlib-3.1.0-old/newlib/libc/include/sys/config.h	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/include/sys/config.h	2024-07-26 22:02:58.645581943 +0200
+@@ -234,6 +234,14 @@
+ #include <cygwin/config.h>
+ #endif
+ 
++#ifdef _MIOSIX
++#define __BUFSIZ__ 256 /* Because Miosix threads often have small (<2KB) stacks */
++#define _REENT_SMALL   /* To save RAM */
++#define _REENT_GLOBAL_ATEXIT /* No atexit stuff in _reent */
++#define __DYNAMIC_REENT__ /* Enable __getreent() */
++#define _REENT_GLOBAL_STDIO_STREAMS /* stdin/out/err shared for all threads */
++#endif /* _MIOSIX */
++
+ #if defined(__rtems__)
+ #define __FILENAME_MAX__ 255
+ #define _READ_WRITE_RETURN_TYPE _ssize_t
+diff -ruN newlib-3.1.0-old/newlib/libc/include/sys/features.h newlib-3.1.0/newlib/libc/include/sys/features.h
+--- newlib-3.1.0-old/newlib/libc/include/sys/features.h	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/include/sys/features.h	2024-07-26 22:02:58.645581943 +0200
+@@ -330,6 +330,15 @@
+ #  define __SSP_FORTIFY_LEVEL 0
+ #endif
+ 
++#ifdef _MIOSIX
++#define _POSIX_THREADS 1                  /* Miosix provides pthread support   */
++#define _UNIX98_THREAD_MUTEX_ATTRIBUTES 1 /* Miosix provides recursive mutexes */
++#define _POSIX_TIMEOUTS 1
++#define _POSIX_TIMERS 1                   /* for clock_gettime (c++11 chrono)  */
++#define _POSIX_CLOCK_SELECTION 1          /* for clock_nanosleep (c++11 thread)*/
++#define _POSIX_MONOTONIC_CLOCK 1          /* for clock_gettime (c++11 chrono)  */
++#endif /* _MIOSIX */
++
+ /* RTEMS adheres to POSIX -- 1003.1b with some features from annexes.  */
+ 
+ #ifdef __rtems__
+diff -ruN newlib-3.1.0-old/newlib/libc/include/sys/_pthreadtypes.h newlib-3.1.0/newlib/libc/include/sys/_pthreadtypes.h
+--- newlib-3.1.0-old/newlib/libc/include/sys/_pthreadtypes.h	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/include/sys/_pthreadtypes.h	2024-07-26 22:02:58.645581943 +0200
+@@ -143,6 +143,8 @@
+ 
+ #endif /* !defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) */
+ 
++#ifndef _MIOSIX
++
+ #if defined(__XMK__)
+ typedef unsigned int pthread_mutex_t;    /* identify a mutex */
+ 
+@@ -171,11 +173,48 @@
+ 
+ #define _PTHREAD_MUTEX_INITIALIZER ((pthread_mutex_t) 0xFFFFFFFF)
+ 
++#else /* _MIOSIX */
++/*
++ * The definition of pthread_mutex_t:
++ * - has been changed from a simple int to a struct containing the actual mutex
++ *   implementation for speed reasons.
++ * - has been moved to sys/lock.h because leaving it here and #including sys/_pthreadtypes.h
++ *   in sys/lock.h would have caused a cycle of #includes
++ */
++typedef struct {
++  int is_initialized;
++  int type;
++  int recursive;
++} pthread_mutexattr_t;
++
++#define _PTHREAD_MUTEX_INITIALIZER {0,0,0,-1}
++/* NOTE: this is not defined in pthread.h, so no leading underscore */
++#define PTHREAD_MUTEX_RECURSIVE_INITIALIZER_NP {0,0,0,0}
++#endif /* _MIOSIX */
++
+ /* Condition Variables */
+ 
++#ifndef _MIOSIX
+ typedef __uint32_t pthread_cond_t;       /* identify a condition variable */
+ 
+ #define _PTHREAD_COND_INITIALIZER ((pthread_cond_t) 0xFFFFFFFF)
++#else /* _MIOSIX */
++/*
++ * The definition of pthread_cond_t has been changed from an int to a struct
++ * containing the actual condition variable implementation for speed reasons.
++ * Note: the definition of struct WaitingList is in sys/lock.h
++ * typedef __uint32_t pthread_cond_t;
++ */
++struct WaitingList;
++
++typedef struct
++{
++    struct WaitingList *first;
++    struct WaitingList *last;
++} pthread_cond_t;
++
++#define _PTHREAD_COND_INITIALIZER {0,0}
++#endif /* _MIOSIX */
+ 
+ typedef struct {
+   int      is_initialized;
+@@ -190,8 +229,13 @@
+ typedef __uint32_t pthread_key_t;        /* thread-specific data keys */
+ 
+ typedef struct {
++#ifndef _MIOSIX
+   int   is_initialized;  /* is this structure initialized? */
+   int   init_executed;   /* has the initialization routine been run? */
++#else /* _MIOSIX */
++  char  is_initialized;  /* char is enough for a 0/1 value, and saves RAM */
++  char  init_executed;
++#endif /* _MIOSIX */
+ } pthread_once_t;       /* dynamic package initialization */
+ 
+ #define _PTHREAD_ONCE_INIT  { 1, 0 }  /* is initialized and not run */
+diff -ruN newlib-3.1.0-old/newlib/libc/include/sys/reent.h newlib-3.1.0/newlib/libc/include/sys/reent.h
+--- newlib-3.1.0-old/newlib/libc/include/sys/reent.h	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/include/sys/reent.h	2024-07-26 22:02:58.645581943 +0200
+@@ -386,8 +386,10 @@
+ 
+   int __sdidinit;		/* 1 means stdio has been init'd */
+ 
++# ifndef _MIOSIX
+   int _unspecified_locale_info;	/* unused, reserved for locale stuff */
+   struct __locale_t *_locale;/* per-thread locale */
++# endif /* _MIOSIX */
+ 
+   struct _mprec *_mp;
+ 
+@@ -403,8 +405,10 @@
+   struct __tm *_localtime_buf;
+   char *_asctime_buf;
+ 
++# ifndef _MIOSIX
+   /* signal info */
+   void (**(_sig_func))(int);
++# endif /* _MIOSIX */
+ 
+ # ifndef _REENT_GLOBAL_ATEXIT
+   /* atexit stuff */
+@@ -413,7 +417,9 @@
+ # endif
+ 
+   struct _glue __sglue;			/* root of glue chain */
++# ifndef _MIOSIX
+   __FILE *__sf;			        /* file descriptors */
++# endif /* _MIOSIX */
+   struct _misc_reent *_misc;            /* strtok, multibyte states */
+   char *_signal_buf;                    /* strsignal */
+ };
+@@ -421,6 +427,7 @@
+ #ifdef _REENT_GLOBAL_STDIO_STREAMS
+ extern __FILE __sf[3];
+ 
++#ifndef _MIOSIX
+ # define _REENT_INIT(var) \
+   { 0, \
+     &__sf[0], \
+@@ -446,6 +453,37 @@
+     _NULL, \
+     _NULL \
+   }
++#else /* _MIOSIX */
++/*
++ * Same as above but with the _current_locale, _current_category,
++ * _atexit and _atexit0 fields removed
++ */
++# define _REENT_INIT(var) \
++  { 0, \
++    &__sf[0], \
++    &__sf[1], \
++    &__sf[2], \
++    0,   \
++    _NULL, \
++    0, \
++    /* 0, */ \
++    /* _NULL, */ \
++    _NULL, \
++    _NULL, \
++    0, \
++    0, \
++    _NULL, \
++    _NULL, \
++    _NULL, \
++    _NULL, \
++    /* _NULL, */ \
++    _REENT_INIT_ATEXIT \
++    {_NULL, 0, _NULL}, \
++    /* _NULL, */ \
++    _NULL, \
++    _NULL \
++  }
++#endif /* _MIOSIX */
+ 
+ #define _REENT_INIT_PTR_ZEROED(var) \
+   { (var)->_stdin = &__sf[0]; \
+diff -ruN newlib-3.1.0-old/newlib/libc/include/sys/_types.h newlib-3.1.0/newlib/libc/include/sys/_types.h
+--- newlib-3.1.0-old/newlib/libc/include/sys/_types.h	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/include/sys/_types.h	2024-07-26 22:02:58.645581943 +0200
+@@ -67,7 +67,7 @@
+ 
+ #ifndef __machine_ino_t_defined
+ #if (defined(__i386__) && (defined(GO32) || defined(__MSDOS__))) || \
+-    defined(__sparc__) || defined(__SPU__)
++    defined(__sparc__) || defined(__SPU__) || defined(_MIOSIX)
+ typedef unsigned long __ino_t;
+ #else
+ typedef unsigned short __ino_t;
+diff -ruN newlib-3.1.0-old/newlib/libc/locale/duplocale.c newlib-3.1.0/newlib/libc/locale/duplocale.c
+--- newlib-3.1.0-old/newlib/libc/locale/duplocale.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/locale/duplocale.c	2024-07-26 22:02:58.645581943 +0200
+@@ -39,6 +39,8 @@
+ #include <stdlib.h>
+ #include "setlocale.h"
+ 
++#ifndef _MIOSIX
++
+ struct __locale_t *
+ _duplocale_r (struct _reent *p, struct __locale_t *locobj)
+ {
+@@ -100,3 +102,5 @@
+   return _duplocale_r (_REENT, locobj);
+ }
+ #endif
++
++#endif /* _MIOSIX */
+diff -ruN newlib-3.1.0-old/newlib/libc/locale/freelocale.c newlib-3.1.0/newlib/libc/locale/freelocale.c
+--- newlib-3.1.0-old/newlib/libc/locale/freelocale.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/locale/freelocale.c	2024-07-26 22:02:58.645581943 +0200
+@@ -37,6 +37,8 @@
+ #include <stdlib.h>
+ #include "setlocale.h"
+ 
++#ifndef _MIOSIX
++
+ void
+ _freelocale_r (struct _reent *p, struct __locale_t *locobj)
+ {
+@@ -62,3 +64,5 @@
+ {
+   _freelocale_r (_REENT, locobj);
+ }
++
++#endif /*_MIOSIX */
+diff -ruN newlib-3.1.0-old/newlib/libc/locale/locale.c newlib-3.1.0/newlib/libc/locale/locale.c
+--- newlib-3.1.0-old/newlib/libc/locale/locale.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/locale/locale.c	2024-07-26 22:02:58.645581943 +0200
+@@ -240,6 +240,25 @@
+ };
+ #endif /* _MB_CAPABLE */
+ 
++#ifdef _MIOSIX
++/* 
++ * A note on locales: there are two sets of locale-related primitives:
++ * the first is setlocale/localeconv/nl_langinfo,
++ * the second is newlocale/freelocale/duplocale/uselocale.
++ * 
++ * newlib for Miosix is compiled without _MB_CAPABLE, so, setlocale just does
++ * nothing, and localeconv/nl_langinfo return non-const pointers however
++ * "According to POSIX, the caller should not modify the contents of this structure"
++ * 
++ * The second set of primitives is not used by Miosix and neither by libstdc++
++ * (checked with "cat libstdc++.a | strings | grep '<functionname>'")
++ * and can simply be commented out as for Miosix locale is not a priority.
++ *
++ * All this to say that it is safe to make __global_locale const and save more
++ * than 200 bytes of RAM.
++ */
++const
++#endif /* _MIOSIX */
+ struct __locale_t __global_locale =
+ {
+   { "C", "C", DEFAULT_LOCALE, "C", "C", "C", "C", },
+diff -ruN newlib-3.1.0-old/newlib/libc/locale/newlocale.c newlib-3.1.0/newlib/libc/locale/newlocale.c
+--- newlib-3.1.0-old/newlib/libc/locale/newlocale.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/locale/newlocale.c	2024-07-26 22:02:58.645581943 +0200
+@@ -82,6 +82,8 @@
+ #define LC_VALID_MASK	(LC_COLLATE_MASK | LC_CTYPE_MASK | LC_MONETARY_MASK \
+ 			 | LC_NUMERIC_MASK | LC_TIME_MASK | LC_MESSAGES_MASK)
+ 
++#ifndef _MIOSIX
++
+ struct __locale_t *
+ _newlocale_r (struct _reent *p, int category_mask, const char *locale,
+ 	      struct __locale_t *base)
+@@ -220,3 +222,5 @@
+ {
+   return _newlocale_r (_REENT, category_mask, locale, base);
+ }
++
++#endif /* _MIOSIX */
+diff -ruN newlib-3.1.0-old/newlib/libc/locale/setlocale.h newlib-3.1.0/newlib/libc/locale/setlocale.h
+--- newlib-3.1.0-old/newlib/libc/locale/setlocale.h	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/locale/setlocale.h	2024-07-26 22:02:58.645581943 +0200
+@@ -209,8 +209,13 @@
+ _ELIDABLE_INLINE struct __locale_t *
+ __get_global_locale ()
+ {
++#ifndef _MIOSIX
+   extern struct __locale_t __global_locale;
+   return &__global_locale;
++#else /* _MIOSIX */
++  extern const struct __locale_t __global_locale;
++  return (struct __locale_t *)(&__global_locale);
++#endif /* _MIOSIX */
+ }
+ 
+ /* Per REENT locale.  This is newlib-internal. */
+diff -ruN newlib-3.1.0-old/newlib/libc/locale/uselocale.c newlib-3.1.0/newlib/libc/locale/uselocale.c
+--- newlib-3.1.0-old/newlib/libc/locale/uselocale.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/locale/uselocale.c	2024-07-26 22:02:58.645581943 +0200
+@@ -55,6 +55,8 @@
+ #include <stdlib.h>
+ #include "setlocale.h"
+ 
++#ifndef _MIOSIX
++
+ struct __locale_t *
+ _uselocale_r (struct _reent *p, struct __locale_t *newloc)
+ {
+@@ -77,3 +79,5 @@
+   return _uselocale_r (_REENT, newloc);
+ }
+ #endif
++
++#endif /* _MIOSIX */
+diff -ruN newlib-3.1.0-old/newlib/libc/posix/closedir.c newlib-3.1.0/newlib/libc/posix/closedir.c
+--- newlib-3.1.0-old/newlib/libc/posix/closedir.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/posix/closedir.c	2024-07-26 22:02:58.645581943 +0200
+@@ -57,7 +57,15 @@
+ 	__lock_acquire_recursive(dirp->dd_lock);
+ #endif
+ 	rc = close(dirp->dd_fd);
++#ifndef _MIOSIX
+ 	_cleanupdir(dirp);
++#else /* _MIOSIX */
++	/*
++	 * A call through a pointer avoids pulling in _cleanupdir, which brings
++	 * in 128 bytes of BSS, unless user code actually uses seekdir/telldir.
++	 */
++	if(dirp->dd_onclose) dirp->dd_onclose(dirp);
++#endif /* _MIOSIX */
+ 	free((void *)dirp->dd_buf);
+ #ifdef HAVE_DD_LOCK
+ 	__lock_release_recursive(dirp->dd_lock);
+diff -ruN newlib-3.1.0-old/newlib/libc/posix/execl.c newlib-3.1.0/newlib/libc/posix/execl.c
+--- newlib-3.1.0-old/newlib/libc/posix/execl.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/posix/execl.c	2025-01-25 11:39:25.870896727 +0100
+@@ -7,6 +7,7 @@
+ 
+ #include <_ansi.h>
+ #include <unistd.h>
++#include <errno.h>
+ 
+ /* Only deal with a pointer to environ, to work around subtle bugs with shared
+    libraries and/or small data systems where the user declares his own
+@@ -16,6 +17,10 @@
+ 
+ #include <stdarg.h>
+ 
++#ifndef ARG_NUM_MAX
++#define ARG_NUM_MAX 256
++#endif
++
+ int
+ execl (const char *path,
+       const char *arg0, ...)
+@@ -24,14 +29,20 @@
+ {
+   int i;
+   va_list args;
+-  const char *argv[256];
++  const char *argv[ARG_NUM_MAX];
+ 
+   va_start (args, arg0);
+   argv[0] = arg0;
+   i = 1;
+-  do
+-      argv[i] = va_arg (args, const char *);
+-  while (argv[i++] != NULL);
++  do {
++    if(i>=ARG_NUM_MAX)
++    {
++      va_end (args);
++      errno=E2BIG;
++      return -1;
++    }
++    argv[i] = va_arg (args, const char *);
++  } while (argv[i++] != NULL);
+   va_end (args);
+ 
+   return _execve (path, (char * const  *) argv, *p_environ);
+diff -ruN newlib-3.1.0-old/newlib/libc/posix/execle.c newlib-3.1.0/newlib/libc/posix/execle.c
+--- newlib-3.1.0-old/newlib/libc/posix/execle.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/posix/execle.c	2025-01-25 11:39:32.402973850 +0100
+@@ -7,10 +7,15 @@
+ 
+ #include <_ansi.h>
+ #include <unistd.h>
++#include <errno.h>
+ 
+ 
+ #include <stdarg.h>
+ 
++#ifndef ARG_NUM_MAX
++#define ARG_NUM_MAX 256
++#endif
++
+ int
+ execle (const char *path,
+       const char *arg0, ...)
+@@ -20,14 +25,20 @@
+   int i;
+   va_list args;
+   const char * const *envp;
+-  const char *argv[256];
++  const char *argv[ARG_NUM_MAX];
+ 
+   va_start (args, arg0);
+   argv[0] = arg0;
+   i = 1;
+-  do
++  do {
++    if(i>=ARG_NUM_MAX)
++    {
++      va_end (args);
++      errno=E2BIG;
++      return -1;
++    }
+     argv[i] = va_arg (args, const char *);
+-  while (argv[i++] != NULL);
++  } while (argv[i++] != NULL);
+   envp = va_arg (args, const char * const *);
+   va_end (args);
+ 
+diff -ruN newlib-3.1.0-old/newlib/libc/posix/execlp.c newlib-3.1.0/newlib/libc/posix/execlp.c
+--- newlib-3.1.0-old/newlib/libc/posix/execlp.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/posix/execlp.c	2025-01-25 11:39:38.487045516 +0100
+@@ -7,10 +7,15 @@
+ 
+ #include <_ansi.h>
+ #include <unistd.h>
++#include <errno.h>
+ 
+ 
+ #include <stdarg.h>
+ 
++#ifndef ARG_NUM_MAX
++#define ARG_NUM_MAX 256
++#endif
++
+ int
+ execlp (const char *path,
+       const char *arg0, ...)
+@@ -19,14 +24,20 @@
+ {
+   int i;
+   va_list args;
+-  const char *argv[256];
++  const char *argv[ARG_NUM_MAX];
+ 
+   va_start (args, arg0);
+   argv[0] = arg0;
+   i = 1;
+-  do
+-      argv[i] = va_arg (args, const char *);
+-  while (argv[i++] != NULL);
++  do {
++    if(i>=ARG_NUM_MAX)
++    {
++      va_end (args);
++      errno=E2BIG;
++      return -1;
++    }
++    argv[i] = va_arg (args, const char *);
++  } while (argv[i++] != NULL);
+   va_end (args);
+ 
+   return execvp (path, (char * const *) argv);
+diff -ruN newlib-3.1.0-old/newlib/libc/posix/_isatty.c newlib-3.1.0/newlib/libc/posix/_isatty.c
+--- newlib-3.1.0-old/newlib/libc/posix/_isatty.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/posix/_isatty.c	2024-07-26 22:02:58.645581943 +0200
+@@ -2,6 +2,11 @@
+ 
+ /* Dumb implementation so programs will at least run.  */
+ 
++/*
++ * Miosix has isatty()
++ */
++#ifndef _MIOSIX
++
+ #include <sys/stat.h>
+ #include <errno.h>
+ 
+@@ -19,3 +24,5 @@
+   errno = ENOTTY;
+   return 0;
+ }
++
++#endif /* _MIOSIX */
+\ No newline at end of file
+diff -ruN newlib-3.1.0-old/newlib/libc/posix/isatty.c newlib-3.1.0/newlib/libc/posix/isatty.c
+--- newlib-3.1.0-old/newlib/libc/posix/isatty.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/posix/isatty.c	2024-07-26 22:02:58.645581943 +0200
+@@ -1,5 +1,10 @@
+ /* isatty.c */
+ 
++/*
++ * Miosix has isatty()
++ */
++#ifndef _MIOSIX
++
+ #include <unistd.h>
+ #include <reent.h>
+ 
+@@ -8,3 +13,5 @@
+ {
+   return _isatty (fd);
+ }
++
++#endif /* _MIOSIX */
+\ No newline at end of file
+diff -ruN newlib-3.1.0-old/newlib/libc/posix/opendir.c newlib-3.1.0/newlib/libc/posix/opendir.c
+--- newlib-3.1.0-old/newlib/libc/posix/opendir.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/posix/opendir.c	2024-07-26 22:02:58.645581943 +0200
+@@ -58,8 +58,16 @@
+ 	 * Hopefully this can be a big win someday by allowing page trades
+ 	 * to user space to be done by getdirentries()
+ 	 */
++#ifndef _MIOSIX
+ 	dirp->dd_buf = malloc (512);
+ 	dirp->dd_len = 512;
++#else /* _MIOSIX */
++	/* Allocate the minimum possible size */
++	dirp->dd_buf = malloc (sizeof(struct dirent));
++	dirp->dd_len = sizeof(struct dirent);
++	/* Assume seekdir/telldir unused until they're actually called */
++	dirp->dd_onclose = NULL;
++#endif /* _MIOSIX */
+ 
+ 	if (dirp->dd_buf == NULL) {
+ 		free (dirp);
+diff -ruN newlib-3.1.0-old/newlib/libc/posix/rewinddir.c newlib-3.1.0/newlib/libc/posix/rewinddir.c
+--- newlib-3.1.0-old/newlib/libc/posix/rewinddir.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/posix/rewinddir.c	2024-07-26 22:02:58.649581998 +0200
+@@ -47,7 +47,16 @@
+ #ifdef HAVE_DD_LOCK
+ 	__lock_acquire_recursive(dirp->dd_lock);
+ #endif
++
++#ifndef _MIOSIX
+ 	_seekdir((dirp), 0L);
++#else /* _MIOSIX */
++	/* This avoids pulling in _seekdir, which brings in 128 byte of BSS */
++	(void) lseek(dirp->dd_fd, 0, 0);
++	dirp->dd_seek = 0;
++	dirp->dd_loc = 0;
++#endif /* _MIOSIX */
++
+ #ifdef HAVE_DD_LOCK
+ 	__lock_release_recursive(dirp->dd_lock);
+ #endif
+diff -ruN newlib-3.1.0-old/newlib/libc/posix/telldir.c newlib-3.1.0/newlib/libc/posix/telldir.c
+--- newlib-3.1.0-old/newlib/libc/posix/telldir.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/posix/telldir.c	2024-07-26 22:02:58.649581998 +0200
+@@ -74,6 +74,8 @@
+ __LOCK_INIT(static, __dd_hash_mutex);
+ #endif
+ 
++void _cleanupdir (register DIR *dirp);
++
+ /*
+  * return a pointer into a directory
+  */
+@@ -95,6 +97,9 @@
+ 	__lock_acquire(__dd_hash_mutex);
+ #endif
+ #endif
++#ifdef _MIOSIX
++	dirp->dd_onclose=_cleanupdir;
++#endif /* _MIOSIX */
+ 	index = dd_loccnt++;
+ 	lp->loc_index = index;
+ 	lp->loc_seek = dirp->dd_seek;
+@@ -129,6 +134,9 @@
+ 	__lock_acquire(__dd_hash_mutex);
+ #endif
+ 	if (loc != 0) {
++#ifdef _MIOSIX
++		dirp->dd_onclose=_cleanupdir;
++#endif /* _MIOSIX */
+ 		prevlp = &dd_hash[LOCHASH(loc)];
+ 		lp = *prevlp;
+ 		while (lp != NULL) {
+diff -ruN newlib-3.1.0-old/newlib/libc/stdio/fread.c newlib-3.1.0/newlib/libc/stdio/fread.c
+--- newlib-3.1.0-old/newlib/libc/stdio/fread.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/stdio/fread.c	2024-07-28 11:45:00.366996203 +0200
+@@ -84,6 +84,8 @@
+ #include <stdio.h>
+ #include <string.h>
+ #include <malloc.h>
++#include <limits.h>
++#include <errno.h>
+ #include "local.h"
+ 
+ #ifdef __IMPL_UNLOCKED__
+@@ -91,6 +93,8 @@
+ #define fread fread_unlocked
+ #endif
+ 
++#define	MIN(a, b) ((a) < (b) ? (a) : (b))
++
+ #ifdef __SCLE
+ static size_t
+ crlf_r (struct _reent * ptr,
+@@ -166,23 +170,77 @@
+ 
+ #if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__)
+ 
+-  /* Optimize unbuffered I/O.  */
++  int buffer_size;
+   if (fp->_flags & __SNBF)
++    buffer_size = 1; /* Unbuffered file, buffer_size is 1 see __smakebuf_r */
++  else
++    {
++      if (fp->_bf._base == NULL)
++        __smakebuf_r (ptr, fp);
++      buffer_size = fp->_bf._size; /* fp->_bf._size is zero until __smakebuf_r */
++    }
++
++  /* Optimize unbuffered I/O and large reads. */
++  if (resid >= buffer_size)
+     {
+-      /* First copy any available characters from ungetc buffer.  */
+-      int copy_size = resid > fp->_r ? fp->_r : resid;
+-      (void) memcpy ((void *) p, (void *) fp->_p, (size_t) copy_size);
+-      fp->_p += copy_size;
+-      fp->_r -= copy_size;
+-      p += copy_size;
+-      resid -= copy_size;
+-
+-      /* If still more data needed, free any allocated ungetc buffer.  */
+-      if (HASUB (fp) && resid > 0)
+-	FREEUB (ptr, fp);
++      /* If we were writing, need to flush in case the file was buffered.
++         This code was taken from __srefill_r */
++      if ((fp->_flags & __SRD) == 0)
++        {
++          if ((fp->_flags & __SRW) == 0)
++            {
++              ptr->_errno = EBADF;
++              fp->_flags |= __SERR;
++              _newlib_flockfile_exit (fp);
++              return 0;
++            }
++          /* switch to reading */
++          if (fp->_flags & __SWR)
++            {
++              if (__sflush_r (ptr, fp))
++                {
++                  _newlib_flockfile_exit (fp);
++                  return 0;
++                }
++              fp->_flags &= ~__SWR;
++              fp->_w = 0;
++              fp->_lbfsize = 0;
++            }
++          fp->_flags |= __SRD;
++        }
++      else
++        {
++          /*
++           * We were reading. There may be data in up to two buffers, the
++           * file buffer if this is a buffered file, and the ungetc buffer,
++           * that can exist also in unbuffered files.
++           * This loop can iterate at most twice, the first time when we consume
++           * the ungetc buffer and restore the file buffer, and the second time
++           * when we consume the file buffer.
++           */
++          int copy_size;
++          while ((copy_size = resid > fp->_r ? fp->_r : resid) > 0)
++            {
++              (void) memcpy ((void *) p, (void *) fp->_p, (size_t) copy_size);
++              fp->_p += copy_size;
++              fp->_r -= copy_size;
++              p += copy_size;
++              resid -= copy_size;
++
++              /* If still more data needed, free any allocated ungetc buffer.  */
++              if (HASUB (fp) && resid > 0)
++                {
++                  FREEUB (ptr, fp);
++                  /* Code taken from __srefill_r, does anybody know why we don't
++                   * unconditionally restore fp->_p? */
++                  if ((fp->_r = fp->_ur) != 0)
++                    fp->_p = fp->_up;
++                }
++            }
++        }
+ 
+       /* Finally read directly into user's buffer if needed.  */
+-      while (resid > 0)
++      while (resid >= buffer_size)
+ 	{
+ 	  int rc = 0;
+ 	  /* save fp buffering state */
+@@ -191,7 +249,7 @@
+ 	  int old_size = fp->_bf._size;
+ 	  /* allow __refill to use user's buffer */
+ 	  fp->_bf._base = (unsigned char *) p;
+-	  fp->_bf._size = resid;
++	  fp->_bf._size = ((int)MIN (resid, INT_MAX)) / buffer_size * buffer_size;
+ 	  fp->_p = (unsigned char *) p;
+ 	  rc = __srefill_r (ptr, fp);
+ 	  /* restore fp buffering back to original state */
+@@ -215,34 +273,31 @@
+ 	    }
+ 	}
+     }
+-  else
+ #endif /* !PREFER_SIZE_OVER_SPEED && !__OPTIMIZE_SIZE__ */
++  while (resid > (r = fp->_r))
+     {
+-      while (resid > (r = fp->_r))
+-	{
+-	  (void) memcpy ((void *) p, (void *) fp->_p, (size_t) r);
+-	  fp->_p += r;
+-	  /* fp->_r = 0 ... done in __srefill */
+-	  p += r;
+-	  resid -= r;
+-	  if (__srefill_r (ptr, fp))
+-	    {
+-	      /* no more input: return partial result */
++	(void) memcpy ((void *) p, (void *) fp->_p, (size_t) r);
++	fp->_p += r;
++	/* fp->_r = 0 ... done in __srefill */
++	p += r;
++	resid -= r;
++	if (__srefill_r (ptr, fp))
++	  {
++	    /* no more input: return partial result */
+ #ifdef __SCLE
+-	      if (fp->_flags & __SCLE)
+-		{
+-		  _newlib_flockfile_exit (fp);
+-		  return crlf_r (ptr, fp, buf, total-resid, 1) / size;
+-		}
++	    if (fp->_flags & __SCLE)
++            {
++              _newlib_flockfile_exit (fp);
++              return crlf_r (ptr, fp, buf, total-resid, 1) / size;
++            }
+ #endif
+-	      _newlib_flockfile_exit (fp);
+-	      return (total - resid) / size;
+-	    }
+-	}
+-      (void) memcpy ((void *) p, (void *) fp->_p, resid);
+-      fp->_r -= resid;
+-      fp->_p += resid;
++          _newlib_flockfile_exit (fp);
++          return (total - resid) / size;
++        }
+     }
++  (void) memcpy ((void *) p, (void *) fp->_p, resid);
++  fp->_r -= resid;
++  fp->_p += resid;
+ 
+   /* Perform any CR/LF clean-up if necessary.  */
+ #ifdef __SCLE
+diff -ruN newlib-3.1.0-old/newlib/libc/stdlib/__atexit.c newlib-3.1.0/newlib/libc/stdlib/__atexit.c
+--- newlib-3.1.0-old/newlib/libc/stdlib/__atexit.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/stdlib/__atexit.c	2024-07-26 22:02:58.649581998 +0200
+@@ -38,6 +38,13 @@
+ #include <sys/lock.h>
+ #include "atexit.h"
+ 
++/*
++ * Miosix moves __register_exitproc outside of newlib to make it possible to
++ * compile the kernel both with and without atexit support, without rebuilding
++ * newlib.
++ */
++#ifndef _MIOSIX
++
+ /* Make this a weak reference to avoid pulling in malloc.  */
+ #ifndef MALLOC_PROVIDED
+ void * malloc(size_t) _ATTRIBUTE((__weak__));
+@@ -157,3 +164,5 @@
+ #endif
+   return 0;
+ }
++
++#endif /* _MIOSIX */
+diff -ruN newlib-3.1.0-old/newlib/libc/stdlib/__call_atexit.c newlib-3.1.0/newlib/libc/stdlib/__call_atexit.c
+--- newlib-3.1.0-old/newlib/libc/stdlib/__call_atexit.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/stdlib/__call_atexit.c	2024-07-26 22:02:58.649581998 +0200
+@@ -13,6 +13,8 @@
+ void free(void *) _ATTRIBUTE((__weak__));
+ #endif
+ 
++#ifndef _MIOSIX
++
+ #ifndef __SINGLE_THREAD__
+ __LOCK_INIT_RECURSIVE(, __atexit_recursive_mutex);
+ #endif
+@@ -21,6 +23,8 @@
+ struct _atexit *_global_atexit = _NULL;
+ #endif
+ 
++#endif /* _MIOSIX */
++
+ #ifdef _WANT_REGISTER_FINI
+ 
+ /* If "__libc_fini" is defined, finalizers (either
+@@ -62,6 +66,12 @@
+ #endif /* _WANT_REGISTER_FINI  */
+ 
+ /*
++ * Miosix moves __call_exitprocs out of newlib to make it possible to compile
++ * the kernel both with and without atexit support, without rebuilding newlib
++ */
++#ifndef _MIOSIX
++
++/*
+  * Call registered exit handlers.  If D is null then all handlers are called,
+  * otherwise only the handlers from that DSO are called.
+  */
+@@ -159,3 +169,4 @@
+ #endif
+ 
+ }
++#endif /* _MIOSIX */
+diff -ruN newlib-3.1.0-old/newlib/libc/stdlib/mallocr.c newlib-3.1.0/newlib/libc/stdlib/mallocr.c
+--- newlib-3.1.0-old/newlib/libc/stdlib/mallocr.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/stdlib/mallocr.c	2024-07-26 22:02:58.649581998 +0200
+@@ -320,7 +320,12 @@
+ #ifdef SMALL_MEMORY
+ #define malloc_getpagesize (128)
+ #else
++#ifndef _MIOSIX
+ #define malloc_getpagesize (4096)
++#else /* _MIOSIX */
++/* Page size reduced for microcontrolllers whose RAM is not a multiple of 4KB */
++#define malloc_getpagesize (1024)
++#endif /* _MIOSIX */
+ #endif
+ #endif
+ 
+diff -ruN newlib-3.1.0-old/newlib/libc/stdlib/mlock.c newlib-3.1.0/newlib/libc/stdlib/mlock.c
+--- newlib-3.1.0-old/newlib/libc/stdlib/mlock.c	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/stdlib/mlock.c	2024-07-26 22:02:58.649581998 +0200
+@@ -32,6 +32,11 @@
+ #include <malloc.h>
+ #include <sys/lock.h>
+ 
++/*
++ * __malloc_lock() and __malloc_unlock() are dealt with within Miosix
++ */
++#ifndef _MIOSIX
++
+ #ifndef __SINGLE_THREAD__
+ __LOCK_INIT_RECURSIVE(static, __malloc_recursive_mutex);
+ #endif
+@@ -54,4 +59,6 @@
+ #endif
+ }
+ 
++#endif /* !_MIOSIX */
++
+ #endif
+diff -ruN newlib-3.1.0-old/newlib/libc/sys/configure newlib-3.1.0/newlib/libc/sys/configure
+--- newlib-3.1.0-old/newlib/libc/sys/configure	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/sys/configure	2024-07-26 22:02:58.649581998 +0200
+@@ -795,6 +795,7 @@
+ h8500hms
+ linux
+ m88kbug
++miosix
+ mmixware
+ netware
+ or1k
+@@ -11841,6 +11842,8 @@
+  ;;
+ 	m88kbug) subdirs="$subdirs m88kbug"
+  ;;
++	miosix) subdirs="$subdirs miosix"
++ ;;
+ 	mmixware) subdirs="$subdirs mmixware"
+  ;;
+ 	netware) subdirs="$subdirs netware"
+diff -ruN newlib-3.1.0-old/newlib/libc/sys/configure.in newlib-3.1.0/newlib/libc/sys/configure.in
+--- newlib-3.1.0-old/newlib/libc/sys/configure.in	2019-01-01 05:40:11.000000000 +0100
++++ newlib-3.1.0/newlib/libc/sys/configure.in	2024-07-26 22:02:58.649581998 +0200
+@@ -31,6 +31,7 @@
+ 	h8500hms) AC_CONFIG_SUBDIRS(h8500hms) ;;
+ 	linux) AC_CONFIG_SUBDIRS(linux) ;;
+ 	m88kbug) AC_CONFIG_SUBDIRS(m88kbug) ;;
++	miosix) AC_CONFIG_SUBDIRS(miosix) ;;
+ 	mmixware) AC_CONFIG_SUBDIRS(mmixware) ;;
+ 	netware) AC_CONFIG_SUBDIRS(netware) ;;
+ 	or1k) AC_CONFIG_SUBDIRS(or1k) ;;
+diff -ruN newlib-3.1.0-old/newlib/libc/sys/miosix/aclocal.m4 newlib-3.1.0/newlib/libc/sys/miosix/aclocal.m4
+--- newlib-3.1.0-old/newlib/libc/sys/miosix/aclocal.m4	1970-01-01 01:00:00.000000000 +0100
++++ newlib-3.1.0/newlib/libc/sys/miosix/aclocal.m4	2024-07-26 22:02:58.649581998 +0200
+@@ -0,0 +1,1012 @@
++# generated automatically by aclocal 1.11.6 -*- Autoconf -*-
++
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
++# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
++# Inc.
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
++# PARTICULAR PURPOSE.
++
++m4_ifndef([AC_AUTOCONF_VERSION],
++  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
++m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
++[m4_warning([this file was generated for autoconf 2.68.
++You have another version of autoconf.  It may work, but is not guaranteed to.
++If you have problems, you may need to regenerate the build system entirely.
++To do so, use the procedure documented by the package, typically `autoreconf'.])])
++
++# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
++# Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 1
++
++# AM_AUTOMAKE_VERSION(VERSION)
++# ----------------------------
++# Automake X.Y traces this macro to ensure aclocal.m4 has been
++# generated from the m4 files accompanying Automake X.Y.
++# (This private macro should not be called outside this file.)
++AC_DEFUN([AM_AUTOMAKE_VERSION],
++[am__api_version='1.11'
++dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
++dnl require some minimum version.  Point them to the right macro.
++m4_if([$1], [1.11.6], [],
++      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
++])
++
++# _AM_AUTOCONF_VERSION(VERSION)
++# -----------------------------
++# aclocal traces this macro to find the Autoconf version.
++# This is a private macro too.  Using m4_define simplifies
++# the logic in aclocal, which can simply ignore this definition.
++m4_define([_AM_AUTOCONF_VERSION], [])
++
++# AM_SET_CURRENT_AUTOMAKE_VERSION
++# -------------------------------
++# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
++# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
++AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
++[AM_AUTOMAKE_VERSION([1.11.6])dnl
++m4_ifndef([AC_AUTOCONF_VERSION],
++  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
++_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
++
++# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
++
++# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 1
++
++# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
++# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
++# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
++#
++# Of course, Automake must honor this variable whenever it calls a
++# tool from the auxiliary directory.  The problem is that $srcdir (and
++# therefore $ac_aux_dir as well) can be either absolute or relative,
++# depending on how configure is run.  This is pretty annoying, since
++# it makes $ac_aux_dir quite unusable in subdirectories: in the top
++# source directory, any form will work fine, but in subdirectories a
++# relative path needs to be adjusted first.
++#
++# $ac_aux_dir/missing
++#    fails when called from a subdirectory if $ac_aux_dir is relative
++# $top_srcdir/$ac_aux_dir/missing
++#    fails if $ac_aux_dir is absolute,
++#    fails when called from a subdirectory in a VPATH build with
++#          a relative $ac_aux_dir
++#
++# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
++# are both prefixed by $srcdir.  In an in-source build this is usually
++# harmless because $srcdir is `.', but things will broke when you
++# start a VPATH build or use an absolute $srcdir.
++#
++# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
++# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
++#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
++# and then we would define $MISSING as
++#   MISSING="\${SHELL} $am_aux_dir/missing"
++# This will work as long as MISSING is not called from configure, because
++# unfortunately $(top_srcdir) has no meaning in configure.
++# However there are other variables, like CC, which are often used in
++# configure, and could therefore not use this "fixed" $ac_aux_dir.
++#
++# Another solution, used here, is to always expand $ac_aux_dir to an
++# absolute PATH.  The drawback is that using absolute paths prevent a
++# configured tree to be moved without reconfiguration.
++
++AC_DEFUN([AM_AUX_DIR_EXPAND],
++[dnl Rely on autoconf to set up CDPATH properly.
++AC_PREREQ([2.50])dnl
++# expand $ac_aux_dir to an absolute path
++am_aux_dir=`cd $ac_aux_dir && pwd`
++])
++
++# AM_CONDITIONAL                                            -*- Autoconf -*-
++
++# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
++# Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 9
++
++# AM_CONDITIONAL(NAME, SHELL-CONDITION)
++# -------------------------------------
++# Define a conditional.
++AC_DEFUN([AM_CONDITIONAL],
++[AC_PREREQ(2.52)dnl
++ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
++	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
++AC_SUBST([$1_TRUE])dnl
++AC_SUBST([$1_FALSE])dnl
++_AM_SUBST_NOTMAKE([$1_TRUE])dnl
++_AM_SUBST_NOTMAKE([$1_FALSE])dnl
++m4_define([_AM_COND_VALUE_$1], [$2])dnl
++if $2; then
++  $1_TRUE=
++  $1_FALSE='#'
++else
++  $1_TRUE='#'
++  $1_FALSE=
++fi
++AC_CONFIG_COMMANDS_PRE(
++[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
++  AC_MSG_ERROR([[conditional "$1" was never defined.
++Usually this means the macro was only invoked conditionally.]])
++fi])])
++
++# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
++# 2010, 2011 Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 12
++
++# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
++# written in clear, in which case automake, when reading aclocal.m4,
++# will think it sees a *use*, and therefore will trigger all it's
++# C support machinery.  Also note that it means that autoscan, seeing
++# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
++
++
++# _AM_DEPENDENCIES(NAME)
++# ----------------------
++# See how the compiler implements dependency checking.
++# NAME is "CC", "CXX", "GCJ", or "OBJC".
++# We try a few techniques and use that to set a single cache variable.
++#
++# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
++# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
++# dependency, and given that the user is not expected to run this macro,
++# just rely on AC_PROG_CC.
++AC_DEFUN([_AM_DEPENDENCIES],
++[AC_REQUIRE([AM_SET_DEPDIR])dnl
++AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
++AC_REQUIRE([AM_MAKE_INCLUDE])dnl
++AC_REQUIRE([AM_DEP_TRACK])dnl
++
++ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
++       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
++       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
++       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
++       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
++                   [depcc="$$1"   am_compiler_list=])
++
++AC_CACHE_CHECK([dependency style of $depcc],
++               [am_cv_$1_dependencies_compiler_type],
++[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
++  # We make a subdir and do the tests there.  Otherwise we can end up
++  # making bogus files that we don't know about and never remove.  For
++  # instance it was reported that on HP-UX the gcc test will end up
++  # making a dummy file named `D' -- because `-MD' means `put the output
++  # in D'.
++  rm -rf conftest.dir
++  mkdir conftest.dir
++  # Copy depcomp to subdir because otherwise we won't find it if we're
++  # using a relative directory.
++  cp "$am_depcomp" conftest.dir
++  cd conftest.dir
++  # We will build objects and dependencies in a subdirectory because
++  # it helps to detect inapplicable dependency modes.  For instance
++  # both Tru64's cc and ICC support -MD to output dependencies as a
++  # side effect of compilation, but ICC will put the dependencies in
++  # the current directory while Tru64 will put them in the object
++  # directory.
++  mkdir sub
++
++  am_cv_$1_dependencies_compiler_type=none
++  if test "$am_compiler_list" = ""; then
++     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
++  fi
++  am__universal=false
++  m4_case([$1], [CC],
++    [case " $depcc " in #(
++     *\ -arch\ *\ -arch\ *) am__universal=true ;;
++     esac],
++    [CXX],
++    [case " $depcc " in #(
++     *\ -arch\ *\ -arch\ *) am__universal=true ;;
++     esac])
++
++  for depmode in $am_compiler_list; do
++    # Setup a source with many dependencies, because some compilers
++    # like to wrap large dependency lists on column 80 (with \), and
++    # we should not choose a depcomp mode which is confused by this.
++    #
++    # We need to recreate these files for each test, as the compiler may
++    # overwrite some of them when testing with obscure command lines.
++    # This happens at least with the AIX C compiler.
++    : > sub/conftest.c
++    for i in 1 2 3 4 5 6; do
++      echo '#include "conftst'$i'.h"' >> sub/conftest.c
++      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
++      # Solaris 8's {/usr,}/bin/sh.
++      touch sub/conftst$i.h
++    done
++    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
++
++    # We check with `-c' and `-o' for the sake of the "dashmstdout"
++    # mode.  It turns out that the SunPro C++ compiler does not properly
++    # handle `-M -o', and we need to detect this.  Also, some Intel
++    # versions had trouble with output in subdirs
++    am__obj=sub/conftest.${OBJEXT-o}
++    am__minus_obj="-o $am__obj"
++    case $depmode in
++    gcc)
++      # This depmode causes a compiler race in universal mode.
++      test "$am__universal" = false || continue
++      ;;
++    nosideeffect)
++      # after this tag, mechanisms are not by side-effect, so they'll
++      # only be used when explicitly requested
++      if test "x$enable_dependency_tracking" = xyes; then
++	continue
++      else
++	break
++      fi
++      ;;
++    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
++      # This compiler won't grok `-c -o', but also, the minuso test has
++      # not run yet.  These depmodes are late enough in the game, and
++      # so weak that their functioning should not be impacted.
++      am__obj=conftest.${OBJEXT-o}
++      am__minus_obj=
++      ;;
++    none) break ;;
++    esac
++    if depmode=$depmode \
++       source=sub/conftest.c object=$am__obj \
++       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
++       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
++         >/dev/null 2>conftest.err &&
++       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
++       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
++       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
++       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
++      # icc doesn't choke on unknown options, it will just issue warnings
++      # or remarks (even with -Werror).  So we grep stderr for any message
++      # that says an option was ignored or not supported.
++      # When given -MP, icc 7.0 and 7.1 complain thusly:
++      #   icc: Command line warning: ignoring option '-M'; no argument required
++      # The diagnosis changed in icc 8.0:
++      #   icc: Command line remark: option '-MP' not supported
++      if (grep 'ignoring option' conftest.err ||
++          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
++        am_cv_$1_dependencies_compiler_type=$depmode
++        break
++      fi
++    fi
++  done
++
++  cd ..
++  rm -rf conftest.dir
++else
++  am_cv_$1_dependencies_compiler_type=none
++fi
++])
++AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
++AM_CONDITIONAL([am__fastdep$1], [
++  test "x$enable_dependency_tracking" != xno \
++  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
++])
++
++
++# AM_SET_DEPDIR
++# -------------
++# Choose a directory name for dependency files.
++# This macro is AC_REQUIREd in _AM_DEPENDENCIES
++AC_DEFUN([AM_SET_DEPDIR],
++[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
++AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
++])
++
++
++# AM_DEP_TRACK
++# ------------
++AC_DEFUN([AM_DEP_TRACK],
++[AC_ARG_ENABLE(dependency-tracking,
++[  --disable-dependency-tracking  speeds up one-time build
++  --enable-dependency-tracking   do not reject slow dependency extractors])
++if test "x$enable_dependency_tracking" != xno; then
++  am_depcomp="$ac_aux_dir/depcomp"
++  AMDEPBACKSLASH='\'
++  am__nodep='_no'
++fi
++AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
++AC_SUBST([AMDEPBACKSLASH])dnl
++_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
++AC_SUBST([am__nodep])dnl
++_AM_SUBST_NOTMAKE([am__nodep])dnl
++])
++
++# Generate code to set up dependency tracking.              -*- Autoconf -*-
++
++# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
++# Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++#serial 5
++
++# _AM_OUTPUT_DEPENDENCY_COMMANDS
++# ------------------------------
++AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
++[{
++  # Autoconf 2.62 quotes --file arguments for eval, but not when files
++  # are listed without --file.  Let's play safe and only enable the eval
++  # if we detect the quoting.
++  case $CONFIG_FILES in
++  *\'*) eval set x "$CONFIG_FILES" ;;
++  *)   set x $CONFIG_FILES ;;
++  esac
++  shift
++  for mf
++  do
++    # Strip MF so we end up with the name of the file.
++    mf=`echo "$mf" | sed -e 's/:.*$//'`
++    # Check whether this is an Automake generated Makefile or not.
++    # We used to match only the files named `Makefile.in', but
++    # some people rename them; so instead we look at the file content.
++    # Grep'ing the first line is not enough: some people post-process
++    # each Makefile.in and add a new line on top of each file to say so.
++    # Grep'ing the whole file is not good either: AIX grep has a line
++    # limit of 2048, but all sed's we know have understand at least 4000.
++    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
++      dirpart=`AS_DIRNAME("$mf")`
++    else
++      continue
++    fi
++    # Extract the definition of DEPDIR, am__include, and am__quote
++    # from the Makefile without running `make'.
++    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
++    test -z "$DEPDIR" && continue
++    am__include=`sed -n 's/^am__include = //p' < "$mf"`
++    test -z "am__include" && continue
++    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
++    # When using ansi2knr, U may be empty or an underscore; expand it
++    U=`sed -n 's/^U = //p' < "$mf"`
++    # Find all dependency output files, they are included files with
++    # $(DEPDIR) in their names.  We invoke sed twice because it is the
++    # simplest approach to changing $(DEPDIR) to its actual value in the
++    # expansion.
++    for file in `sed -n "
++      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
++	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
++      # Make sure the directory exists.
++      test -f "$dirpart/$file" && continue
++      fdir=`AS_DIRNAME(["$file"])`
++      AS_MKDIR_P([$dirpart/$fdir])
++      # echo "creating $dirpart/$file"
++      echo '# dummy' > "$dirpart/$file"
++    done
++  done
++}
++])# _AM_OUTPUT_DEPENDENCY_COMMANDS
++
++
++# AM_OUTPUT_DEPENDENCY_COMMANDS
++# -----------------------------
++# This macro should only be invoked once -- use via AC_REQUIRE.
++#
++# This code is only required when automatic dependency tracking
++# is enabled.  FIXME.  This creates each `.P' file that we will
++# need in order to bootstrap the dependency handling code.
++AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
++[AC_CONFIG_COMMANDS([depfiles],
++     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
++     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
++])
++
++# Do all the work for Automake.                             -*- Autoconf -*-
++
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
++# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 16
++
++# This macro actually does too much.  Some checks are only needed if
++# your package does certain things.  But this isn't really a big deal.
++
++# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
++# AM_INIT_AUTOMAKE([OPTIONS])
++# -----------------------------------------------
++# The call with PACKAGE and VERSION arguments is the old style
++# call (pre autoconf-2.50), which is being phased out.  PACKAGE
++# and VERSION should now be passed to AC_INIT and removed from
++# the call to AM_INIT_AUTOMAKE.
++# We support both call styles for the transition.  After
++# the next Automake release, Autoconf can make the AC_INIT
++# arguments mandatory, and then we can depend on a new Autoconf
++# release and drop the old call support.
++AC_DEFUN([AM_INIT_AUTOMAKE],
++[AC_PREREQ([2.62])dnl
++dnl Autoconf wants to disallow AM_ names.  We explicitly allow
++dnl the ones we care about.
++m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
++AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
++AC_REQUIRE([AC_PROG_INSTALL])dnl
++if test "`cd $srcdir && pwd`" != "`pwd`"; then
++  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
++  # is not polluted with repeated "-I."
++  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
++  # test to see if srcdir already configured
++  if test -f $srcdir/config.status; then
++    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
++  fi
++fi
++
++# test whether we have cygpath
++if test -z "$CYGPATH_W"; then
++  if (cygpath --version) >/dev/null 2>/dev/null; then
++    CYGPATH_W='cygpath -w'
++  else
++    CYGPATH_W=echo
++  fi
++fi
++AC_SUBST([CYGPATH_W])
++
++# Define the identity of the package.
++dnl Distinguish between old-style and new-style calls.
++m4_ifval([$2],
++[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
++ AC_SUBST([PACKAGE], [$1])dnl
++ AC_SUBST([VERSION], [$2])],
++[_AM_SET_OPTIONS([$1])dnl
++dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
++m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
++  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
++ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
++ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
++
++_AM_IF_OPTION([no-define],,
++[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
++ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
++
++# Some tools Automake needs.
++AC_REQUIRE([AM_SANITY_CHECK])dnl
++AC_REQUIRE([AC_ARG_PROGRAM])dnl
++AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
++AM_MISSING_PROG(AUTOCONF, autoconf)
++AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
++AM_MISSING_PROG(AUTOHEADER, autoheader)
++AM_MISSING_PROG(MAKEINFO, makeinfo)
++AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
++AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
++AC_REQUIRE([AM_PROG_MKDIR_P])dnl
++# We need awk for the "check" target.  The system "awk" is bad on
++# some platforms.
++AC_REQUIRE([AC_PROG_AWK])dnl
++AC_REQUIRE([AC_PROG_MAKE_SET])dnl
++AC_REQUIRE([AM_SET_LEADING_DOT])dnl
++_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
++	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
++			     [_AM_PROG_TAR([v7])])])
++_AM_IF_OPTION([no-dependencies],,
++[AC_PROVIDE_IFELSE([AC_PROG_CC],
++		  [_AM_DEPENDENCIES(CC)],
++		  [define([AC_PROG_CC],
++			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
++AC_PROVIDE_IFELSE([AC_PROG_CXX],
++		  [_AM_DEPENDENCIES(CXX)],
++		  [define([AC_PROG_CXX],
++			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
++AC_PROVIDE_IFELSE([AC_PROG_OBJC],
++		  [_AM_DEPENDENCIES(OBJC)],
++		  [define([AC_PROG_OBJC],
++			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
++])
++_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
++dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
++dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
++dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
++AC_CONFIG_COMMANDS_PRE(dnl
++[m4_provide_if([_AM_COMPILER_EXEEXT],
++  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
++])
++
++dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
++dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
++dnl mangled by Autoconf and run in a shell conditional statement.
++m4_define([_AC_COMPILER_EXEEXT],
++m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
++
++
++# When config.status generates a header, we must update the stamp-h file.
++# This file resides in the same directory as the config header
++# that is generated.  The stamp files are numbered to have different names.
++
++# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
++# loop where config.status creates the headers, so we can generate
++# our stamp files there.
++AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
++[# Compute $1's index in $config_headers.
++_am_arg=$1
++_am_stamp_count=1
++for _am_header in $config_headers :; do
++  case $_am_header in
++    $_am_arg | $_am_arg:* )
++      break ;;
++    * )
++      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
++  esac
++done
++echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
++
++# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
++# Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 1
++
++# AM_PROG_INSTALL_SH
++# ------------------
++# Define $install_sh.
++AC_DEFUN([AM_PROG_INSTALL_SH],
++[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
++if test x"${install_sh}" != xset; then
++  case $am_aux_dir in
++  *\ * | *\	*)
++    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
++  *)
++    install_sh="\${SHELL} $am_aux_dir/install-sh"
++  esac
++fi
++AC_SUBST(install_sh)])
++
++# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 2
++
++# Check whether the underlying file-system supports filenames
++# with a leading dot.  For instance MS-DOS doesn't.
++AC_DEFUN([AM_SET_LEADING_DOT],
++[rm -rf .tst 2>/dev/null
++mkdir .tst 2>/dev/null
++if test -d .tst; then
++  am__leading_dot=.
++else
++  am__leading_dot=_
++fi
++rmdir .tst 2>/dev/null
++AC_SUBST([am__leading_dot])])
++
++# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
++# From Jim Meyering
++
++# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008,
++# 2011 Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 5
++
++# AM_MAINTAINER_MODE([DEFAULT-MODE])
++# ----------------------------------
++# Control maintainer-specific portions of Makefiles.
++# Default is to disable them, unless `enable' is passed literally.
++# For symmetry, `disable' may be passed as well.  Anyway, the user
++# can override the default with the --enable/--disable switch.
++AC_DEFUN([AM_MAINTAINER_MODE],
++[m4_case(m4_default([$1], [disable]),
++       [enable], [m4_define([am_maintainer_other], [disable])],
++       [disable], [m4_define([am_maintainer_other], [enable])],
++       [m4_define([am_maintainer_other], [enable])
++        m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
++AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
++  dnl maintainer-mode's default is 'disable' unless 'enable' is passed
++  AC_ARG_ENABLE([maintainer-mode],
++[  --][am_maintainer_other][-maintainer-mode  am_maintainer_other make rules and dependencies not useful
++			  (and sometimes confusing) to the casual installer],
++      [USE_MAINTAINER_MODE=$enableval],
++      [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
++  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
++  AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
++  MAINT=$MAINTAINER_MODE_TRUE
++  AC_SUBST([MAINT])dnl
++]
++)
++
++AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
++
++# Check to see how 'make' treats includes.	            -*- Autoconf -*-
++
++# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 4
++
++# AM_MAKE_INCLUDE()
++# -----------------
++# Check to see how make treats includes.
++AC_DEFUN([AM_MAKE_INCLUDE],
++[am_make=${MAKE-make}
++cat > confinc << 'END'
++am__doit:
++	@echo this is the am__doit target
++.PHONY: am__doit
++END
++# If we don't find an include directive, just comment out the code.
++AC_MSG_CHECKING([for style of include used by $am_make])
++am__include="#"
++am__quote=
++_am_result=none
++# First try GNU make style include.
++echo "include confinc" > confmf
++# Ignore all kinds of additional output from `make'.
++case `$am_make -s -f confmf 2> /dev/null` in #(
++*the\ am__doit\ target*)
++  am__include=include
++  am__quote=
++  _am_result=GNU
++  ;;
++esac
++# Now try BSD make style include.
++if test "$am__include" = "#"; then
++   echo '.include "confinc"' > confmf
++   case `$am_make -s -f confmf 2> /dev/null` in #(
++   *the\ am__doit\ target*)
++     am__include=.include
++     am__quote="\""
++     _am_result=BSD
++     ;;
++   esac
++fi
++AC_SUBST([am__include])
++AC_SUBST([am__quote])
++AC_MSG_RESULT([$_am_result])
++rm -f confinc confmf
++])
++
++# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
++
++# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
++# Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 6
++
++# AM_MISSING_PROG(NAME, PROGRAM)
++# ------------------------------
++AC_DEFUN([AM_MISSING_PROG],
++[AC_REQUIRE([AM_MISSING_HAS_RUN])
++$1=${$1-"${am_missing_run}$2"}
++AC_SUBST($1)])
++
++
++# AM_MISSING_HAS_RUN
++# ------------------
++# Define MISSING if not defined so far and test if it supports --run.
++# If it does, set am_missing_run to use it, otherwise, to nothing.
++AC_DEFUN([AM_MISSING_HAS_RUN],
++[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
++AC_REQUIRE_AUX_FILE([missing])dnl
++if test x"${MISSING+set}" != xset; then
++  case $am_aux_dir in
++  *\ * | *\	*)
++    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
++  *)
++    MISSING="\${SHELL} $am_aux_dir/missing" ;;
++  esac
++fi
++# Use eval to expand $SHELL
++if eval "$MISSING --run true"; then
++  am_missing_run="$MISSING --run "
++else
++  am_missing_run=
++  AC_MSG_WARN([`missing' script is too old or missing])
++fi
++])
++
++# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
++# Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 1
++
++# AM_PROG_MKDIR_P
++# ---------------
++# Check for `mkdir -p'.
++AC_DEFUN([AM_PROG_MKDIR_P],
++[AC_PREREQ([2.60])dnl
++AC_REQUIRE([AC_PROG_MKDIR_P])dnl
++dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
++dnl while keeping a definition of mkdir_p for backward compatibility.
++dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
++dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
++dnl Makefile.ins that do not define MKDIR_P, so we do our own
++dnl adjustment using top_builddir (which is defined more often than
++dnl MKDIR_P).
++AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
++case $mkdir_p in
++  [[\\/$]]* | ?:[[\\/]]*) ;;
++  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
++esac
++])
++
++# Helper functions for option handling.                     -*- Autoconf -*-
++
++# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
++# Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 5
++
++# _AM_MANGLE_OPTION(NAME)
++# -----------------------
++AC_DEFUN([_AM_MANGLE_OPTION],
++[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
++
++# _AM_SET_OPTION(NAME)
++# --------------------
++# Set option NAME.  Presently that only means defining a flag for this option.
++AC_DEFUN([_AM_SET_OPTION],
++[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
++
++# _AM_SET_OPTIONS(OPTIONS)
++# ------------------------
++# OPTIONS is a space-separated list of Automake options.
++AC_DEFUN([_AM_SET_OPTIONS],
++[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
++
++# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
++# -------------------------------------------
++# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
++AC_DEFUN([_AM_IF_OPTION],
++[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
++
++# Check to make sure that the build environment is sane.    -*- Autoconf -*-
++
++# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
++# Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 5
++
++# AM_SANITY_CHECK
++# ---------------
++AC_DEFUN([AM_SANITY_CHECK],
++[AC_MSG_CHECKING([whether build environment is sane])
++# Just in case
++sleep 1
++echo timestamp > conftest.file
++# Reject unsafe characters in $srcdir or the absolute working directory
++# name.  Accept space and tab only in the latter.
++am_lf='
++'
++case `pwd` in
++  *[[\\\"\#\$\&\'\`$am_lf]]*)
++    AC_MSG_ERROR([unsafe absolute working directory name]);;
++esac
++case $srcdir in
++  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
++    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
++esac
++
++# Do `set' in a subshell so we don't clobber the current shell's
++# arguments.  Must try -L first in case configure is actually a
++# symlink; some systems play weird games with the mod time of symlinks
++# (eg FreeBSD returns the mod time of the symlink's containing
++# directory).
++if (
++   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
++   if test "$[*]" = "X"; then
++      # -L didn't work.
++      set X `ls -t "$srcdir/configure" conftest.file`
++   fi
++   rm -f conftest.file
++   if test "$[*]" != "X $srcdir/configure conftest.file" \
++      && test "$[*]" != "X conftest.file $srcdir/configure"; then
++
++      # If neither matched, then we have a broken ls.  This can happen
++      # if, for instance, CONFIG_SHELL is bash and it inherits a
++      # broken ls alias from the environment.  This has actually
++      # happened.  Such a system could not be considered "sane".
++      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
++alias in your environment])
++   fi
++
++   test "$[2]" = conftest.file
++   )
++then
++   # Ok.
++   :
++else
++   AC_MSG_ERROR([newly created file is older than distributed files!
++Check your system clock])
++fi
++AC_MSG_RESULT(yes)])
++
++# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 1
++
++# AM_PROG_INSTALL_STRIP
++# ---------------------
++# One issue with vendor `install' (even GNU) is that you can't
++# specify the program used to strip binaries.  This is especially
++# annoying in cross-compiling environments, where the build's strip
++# is unlikely to handle the host's binaries.
++# Fortunately install-sh will honor a STRIPPROG variable, so we
++# always use install-sh in `make install-strip', and initialize
++# STRIPPROG with the value of the STRIP variable (set by the user).
++AC_DEFUN([AM_PROG_INSTALL_STRIP],
++[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
++# Installed binaries are usually stripped using `strip' when the user
++# run `make install-strip'.  However `strip' might not be the right
++# tool to use in cross-compilation environments, therefore Automake
++# will honor the `STRIP' environment variable to overrule this program.
++dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
++if test "$cross_compiling" != no; then
++  AC_CHECK_TOOL([STRIP], [strip], :)
++fi
++INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
++AC_SUBST([INSTALL_STRIP_PROGRAM])])
++
++# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 3
++
++# _AM_SUBST_NOTMAKE(VARIABLE)
++# ---------------------------
++# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
++# This macro is traced by Automake.
++AC_DEFUN([_AM_SUBST_NOTMAKE])
++
++# AM_SUBST_NOTMAKE(VARIABLE)
++# --------------------------
++# Public sister of _AM_SUBST_NOTMAKE.
++AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
++
++# Check how to create a tarball.                            -*- Autoconf -*-
++
++# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 2
++
++# _AM_PROG_TAR(FORMAT)
++# --------------------
++# Check how to create a tarball in format FORMAT.
++# FORMAT should be one of `v7', `ustar', or `pax'.
++#
++# Substitute a variable $(am__tar) that is a command
++# writing to stdout a FORMAT-tarball containing the directory
++# $tardir.
++#     tardir=directory && $(am__tar) > result.tar
++#
++# Substitute a variable $(am__untar) that extract such
++# a tarball read from stdin.
++#     $(am__untar) < result.tar
++AC_DEFUN([_AM_PROG_TAR],
++[# Always define AMTAR for backward compatibility.  Yes, it's still used
++# in the wild :-(  We should find a proper way to deprecate it ...
++AC_SUBST([AMTAR], ['$${TAR-tar}'])
++m4_if([$1], [v7],
++     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
++     [m4_case([$1], [ustar],, [pax],,
++              [m4_fatal([Unknown tar format])])
++AC_MSG_CHECKING([how to create a $1 tar archive])
++# Loop over all known methods to create a tar archive until one works.
++_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
++_am_tools=${am_cv_prog_tar_$1-$_am_tools}
++# Do not fold the above two line into one, because Tru64 sh and
++# Solaris sh will not grok spaces in the rhs of `-'.
++for _am_tool in $_am_tools
++do
++  case $_am_tool in
++  gnutar)
++    for _am_tar in tar gnutar gtar;
++    do
++      AM_RUN_LOG([$_am_tar --version]) && break
++    done
++    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
++    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
++    am__untar="$_am_tar -xf -"
++    ;;
++  plaintar)
++    # Must skip GNU tar: if it does not support --format= it doesn't create
++    # ustar tarball either.
++    (tar --version) >/dev/null 2>&1 && continue
++    am__tar='tar chf - "$$tardir"'
++    am__tar_='tar chf - "$tardir"'
++    am__untar='tar xf -'
++    ;;
++  pax)
++    am__tar='pax -L -x $1 -w "$$tardir"'
++    am__tar_='pax -L -x $1 -w "$tardir"'
++    am__untar='pax -r'
++    ;;
++  cpio)
++    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
++    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
++    am__untar='cpio -i -H $1 -d'
++    ;;
++  none)
++    am__tar=false
++    am__tar_=false
++    am__untar=false
++    ;;
++  esac
++
++  # If the value was cached, stop now.  We just wanted to have am__tar
++  # and am__untar set.
++  test -n "${am_cv_prog_tar_$1}" && break
++
++  # tar/untar a dummy directory, and stop if the command works
++  rm -rf conftest.dir
++  mkdir conftest.dir
++  echo GrepMe > conftest.dir/file
++  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
++  rm -rf conftest.dir
++  if test -s conftest.tar; then
++    AM_RUN_LOG([$am__untar <conftest.tar])
++    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
++  fi
++done
++rm -rf conftest.dir
++
++AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
++AC_MSG_RESULT([$am_cv_prog_tar_$1])])
++AC_SUBST([am__tar])
++AC_SUBST([am__untar])
++]) # _AM_PROG_TAR
++
++m4_include([../../../acinclude.m4])
+diff -ruN newlib-3.1.0-old/newlib/libc/sys/miosix/configure newlib-3.1.0/newlib/libc/sys/miosix/configure
+--- newlib-3.1.0-old/newlib/libc/sys/miosix/configure	1970-01-01 01:00:00.000000000 +0100
++++ newlib-3.1.0/newlib/libc/sys/miosix/configure	2024-07-26 22:02:58.649581998 +0200
+@@ -0,0 +1,4766 @@
++#! /bin/sh
++# Guess values for system-dependent variables and create Makefiles.
++# Generated by GNU Autoconf 2.68 for newlib 3.1.0.
++#
++#
++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
++# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
++# Foundation, Inc.
++#
++#
++# This configure script is free software; the Free Software Foundation
++# gives unlimited permission to copy, distribute and modify it.
++## -------------------- ##
++## M4sh Initialization. ##
++## -------------------- ##
++
++# Be more Bourne compatible
++DUALCASE=1; export DUALCASE # for MKS sh
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
++  emulate sh
++  NULLCMD=:
++  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
++  # is contrary to our usage.  Disable this feature.
++  alias -g '${1+"$@"}'='"$@"'
++  setopt NO_GLOB_SUBST
++else
++  case `(set -o) 2>/dev/null` in #(
++  *posix*) :
++    set -o posix ;; #(
++  *) :
++     ;;
++esac
++fi
++
++
++as_nl='
++'
++export as_nl
++# Printing a long string crashes Solaris 7 /usr/bin/printf.
++as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
++as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
++as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
++# Prefer a ksh shell builtin over an external printf program on Solaris,
++# but without wasting forks for bash or zsh.
++if test -z "$BASH_VERSION$ZSH_VERSION" \
++    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
++  as_echo='print -r --'
++  as_echo_n='print -rn --'
++elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
++  as_echo='printf %s\n'
++  as_echo_n='printf %s'
++else
++  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
++    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
++    as_echo_n='/usr/ucb/echo -n'
++  else
++    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
++    as_echo_n_body='eval
++      arg=$1;
++      case $arg in #(
++      *"$as_nl"*)
++	expr "X$arg" : "X\\(.*\\)$as_nl";
++	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
++      esac;
++      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
++    '
++    export as_echo_n_body
++    as_echo_n='sh -c $as_echo_n_body as_echo'
++  fi
++  export as_echo_body
++  as_echo='sh -c $as_echo_body as_echo'
++fi
++
++# The user is always right.
++if test "${PATH_SEPARATOR+set}" != set; then
++  PATH_SEPARATOR=:
++  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
++    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
++      PATH_SEPARATOR=';'
++  }
++fi
++
++
++# IFS
++# We need space, tab and new line, in precisely that order.  Quoting is
++# there to prevent editors from complaining about space-tab.
++# (If _AS_PATH_WALK were called with IFS unset, it would disable word
++# splitting by setting IFS to empty value.)
++IFS=" ""	$as_nl"
++
++# Find who we are.  Look in the path if we contain no directory separator.
++as_myself=
++case $0 in #((
++  *[\\/]* ) as_myself=$0 ;;
++  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
++  done
++IFS=$as_save_IFS
++
++     ;;
++esac
++# We did not find ourselves, most probably we were run as `sh COMMAND'
++# in which case we are not to be found in the path.
++if test "x$as_myself" = x; then
++  as_myself=$0
++fi
++if test ! -f "$as_myself"; then
++  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
++  exit 1
++fi
++
++# Unset variables that we do not need and which cause bugs (e.g. in
++# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
++# suppresses any "Segmentation fault" message there.  '((' could
++# trigger a bug in pdksh 5.2.14.
++for as_var in BASH_ENV ENV MAIL MAILPATH
++do eval test x\${$as_var+set} = xset \
++  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
++done
++PS1='$ '
++PS2='> '
++PS4='+ '
++
++# NLS nuisances.
++LC_ALL=C
++export LC_ALL
++LANGUAGE=C
++export LANGUAGE
++
++# CDPATH.
++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
++
++if test "x$CONFIG_SHELL" = x; then
++  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
++  emulate sh
++  NULLCMD=:
++  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
++  # is contrary to our usage.  Disable this feature.
++  alias -g '\${1+\"\$@\"}'='\"\$@\"'
++  setopt NO_GLOB_SUBST
++else
++  case \`(set -o) 2>/dev/null\` in #(
++  *posix*) :
++    set -o posix ;; #(
++  *) :
++     ;;
++esac
++fi
++"
++  as_required="as_fn_return () { (exit \$1); }
++as_fn_success () { as_fn_return 0; }
++as_fn_failure () { as_fn_return 1; }
++as_fn_ret_success () { return 0; }
++as_fn_ret_failure () { return 1; }
++
++exitcode=0
++as_fn_success || { exitcode=1; echo as_fn_success failed.; }
++as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
++as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
++as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
++if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
++
++else
++  exitcode=1; echo positional parameters were not saved.
++fi
++test x\$exitcode = x0 || exit 1"
++  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
++  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
++  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
++  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
++  if (eval "$as_required") 2>/dev/null; then :
++  as_have_required=yes
++else
++  as_have_required=no
++fi
++  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
++
++else
++  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++as_found=false
++for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  as_found=:
++  case $as_dir in #(
++	 /*)
++	   for as_base in sh bash ksh sh5; do
++	     # Try only shells that exist, to save several forks.
++	     as_shell=$as_dir/$as_base
++	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
++		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
++  CONFIG_SHELL=$as_shell as_have_required=yes
++		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
++  break 2
++fi
++fi
++	   done;;
++       esac
++  as_found=false
++done
++$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
++	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
++  CONFIG_SHELL=$SHELL as_have_required=yes
++fi; }
++IFS=$as_save_IFS
++
++
++      if test "x$CONFIG_SHELL" != x; then :
++  # We cannot yet assume a decent shell, so we have to provide a
++	# neutralization value for shells without unset; and this also
++	# works around shells that cannot unset nonexistent variables.
++	# Preserve -v and -x to the replacement shell.
++	BASH_ENV=/dev/null
++	ENV=/dev/null
++	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
++	export CONFIG_SHELL
++	case $- in # ((((
++	  *v*x* | *x*v* ) as_opts=-vx ;;
++	  *v* ) as_opts=-v ;;
++	  *x* ) as_opts=-x ;;
++	  * ) as_opts= ;;
++	esac
++	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
++fi
++
++    if test x$as_have_required = xno; then :
++  $as_echo "$0: This script requires a shell more modern than all"
++  $as_echo "$0: the shells that I found on your system."
++  if test x${ZSH_VERSION+set} = xset ; then
++    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
++    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
++  else
++    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
++$0: including any error possibly output before this
++$0: message. Then install a modern shell, or manually run
++$0: the script under such a shell if you do have one."
++  fi
++  exit 1
++fi
++fi
++fi
++SHELL=${CONFIG_SHELL-/bin/sh}
++export SHELL
++# Unset more variables known to interfere with behavior of common tools.
++CLICOLOR_FORCE= GREP_OPTIONS=
++unset CLICOLOR_FORCE GREP_OPTIONS
++
++## --------------------- ##
++## M4sh Shell Functions. ##
++## --------------------- ##
++# as_fn_unset VAR
++# ---------------
++# Portably unset VAR.
++as_fn_unset ()
++{
++  { eval $1=; unset $1;}
++}
++as_unset=as_fn_unset
++
++# as_fn_set_status STATUS
++# -----------------------
++# Set $? to STATUS, without forking.
++as_fn_set_status ()
++{
++  return $1
++} # as_fn_set_status
++
++# as_fn_exit STATUS
++# -----------------
++# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
++as_fn_exit ()
++{
++  set +e
++  as_fn_set_status $1
++  exit $1
++} # as_fn_exit
++
++# as_fn_mkdir_p
++# -------------
++# Create "$as_dir" as a directory, including parents if necessary.
++as_fn_mkdir_p ()
++{
++
++  case $as_dir in #(
++  -*) as_dir=./$as_dir;;
++  esac
++  test -d "$as_dir" || eval $as_mkdir_p || {
++    as_dirs=
++    while :; do
++      case $as_dir in #(
++      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
++      *) as_qdir=$as_dir;;
++      esac
++      as_dirs="'$as_qdir' $as_dirs"
++      as_dir=`$as_dirname -- "$as_dir" ||
++$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++	 X"$as_dir" : 'X\(//\)[^/]' \| \
++	 X"$as_dir" : 'X\(//\)$' \| \
++	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X"$as_dir" |
++    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\/\)[^/].*/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\/\)$/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\).*/{
++	    s//\1/
++	    q
++	  }
++	  s/.*/./; q'`
++      test -d "$as_dir" && break
++    done
++    test -z "$as_dirs" || eval "mkdir $as_dirs"
++  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
++
++
++} # as_fn_mkdir_p
++# as_fn_append VAR VALUE
++# ----------------------
++# Append the text in VALUE to the end of the definition contained in VAR. Take
++# advantage of any shell optimizations that allow amortized linear growth over
++# repeated appends, instead of the typical quadratic growth present in naive
++# implementations.
++if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
++  eval 'as_fn_append ()
++  {
++    eval $1+=\$2
++  }'
++else
++  as_fn_append ()
++  {
++    eval $1=\$$1\$2
++  }
++fi # as_fn_append
++
++# as_fn_arith ARG...
++# ------------------
++# Perform arithmetic evaluation on the ARGs, and store the result in the
++# global $as_val. Take advantage of shells that can avoid forks. The arguments
++# must be portable across $(()) and expr.
++if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
++  eval 'as_fn_arith ()
++  {
++    as_val=$(( $* ))
++  }'
++else
++  as_fn_arith ()
++  {
++    as_val=`expr "$@" || test $? -eq 1`
++  }
++fi # as_fn_arith
++
++
++# as_fn_error STATUS ERROR [LINENO LOG_FD]
++# ----------------------------------------
++# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
++# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
++# script with STATUS, using 1 if that was 0.
++as_fn_error ()
++{
++  as_status=$1; test $as_status -eq 0 && as_status=1
++  if test "$4"; then
++    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
++  fi
++  $as_echo "$as_me: error: $2" >&2
++  as_fn_exit $as_status
++} # as_fn_error
++
++if expr a : '\(a\)' >/dev/null 2>&1 &&
++   test "X`expr 00001 : '.*\(...\)'`" = X001; then
++  as_expr=expr
++else
++  as_expr=false
++fi
++
++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
++  as_basename=basename
++else
++  as_basename=false
++fi
++
++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
++  as_dirname=dirname
++else
++  as_dirname=false
++fi
++
++as_me=`$as_basename -- "$0" ||
++$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
++	 X"$0" : 'X\(//\)$' \| \
++	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X/"$0" |
++    sed '/^.*\/\([^/][^/]*\)\/*$/{
++	    s//\1/
++	    q
++	  }
++	  /^X\/\(\/\/\)$/{
++	    s//\1/
++	    q
++	  }
++	  /^X\/\(\/\).*/{
++	    s//\1/
++	    q
++	  }
++	  s/.*/./; q'`
++
++# Avoid depending upon Character Ranges.
++as_cr_letters='abcdefghijklmnopqrstuvwxyz'
++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
++as_cr_Letters=$as_cr_letters$as_cr_LETTERS
++as_cr_digits='0123456789'
++as_cr_alnum=$as_cr_Letters$as_cr_digits
++
++
++  as_lineno_1=$LINENO as_lineno_1a=$LINENO
++  as_lineno_2=$LINENO as_lineno_2a=$LINENO
++  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
++  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
++  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
++  sed -n '
++    p
++    /[$]LINENO/=
++  ' <$as_myself |
++    sed '
++      s/[$]LINENO.*/&-/
++      t lineno
++      b
++      :lineno
++      N
++      :loop
++      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
++      t loop
++      s/-\n.*//
++    ' >$as_me.lineno &&
++  chmod +x "$as_me.lineno" ||
++    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
++
++  # Don't try to exec as it changes $[0], causing all sort of problems
++  # (the dirname of $[0] is not the place where we might find the
++  # original and so on.  Autoconf is especially sensitive to this).
++  . "./$as_me.lineno"
++  # Exit status is that of the last command.
++  exit
++}
++
++ECHO_C= ECHO_N= ECHO_T=
++case `echo -n x` in #(((((
++-n*)
++  case `echo 'xy\c'` in
++  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
++  xy)  ECHO_C='\c';;
++  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
++       ECHO_T='	';;
++  esac;;
++*)
++  ECHO_N='-n';;
++esac
++
++rm -f conf$$ conf$$.exe conf$$.file
++if test -d conf$$.dir; then
++  rm -f conf$$.dir/conf$$.file
++else
++  rm -f conf$$.dir
++  mkdir conf$$.dir 2>/dev/null
++fi
++if (echo >conf$$.file) 2>/dev/null; then
++  if ln -s conf$$.file conf$$ 2>/dev/null; then
++    as_ln_s='ln -s'
++    # ... but there are two gotchas:
++    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
++    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
++    # In both cases, we have to default to `cp -p'.
++    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
++      as_ln_s='cp -p'
++  elif ln conf$$.file conf$$ 2>/dev/null; then
++    as_ln_s=ln
++  else
++    as_ln_s='cp -p'
++  fi
++else
++  as_ln_s='cp -p'
++fi
++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
++rmdir conf$$.dir 2>/dev/null
++
++if mkdir -p . 2>/dev/null; then
++  as_mkdir_p='mkdir -p "$as_dir"'
++else
++  test -d ./-p && rmdir ./-p
++  as_mkdir_p=false
++fi
++
++if test -x / >/dev/null 2>&1; then
++  as_test_x='test -x'
++else
++  if ls -dL / >/dev/null 2>&1; then
++    as_ls_L_option=L
++  else
++    as_ls_L_option=
++  fi
++  as_test_x='
++    eval sh -c '\''
++      if test -d "$1"; then
++	test -d "$1/.";
++      else
++	case $1 in #(
++	-*)set "./$1";;
++	esac;
++	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
++	???[sx]*):;;*)false;;esac;fi
++    '\'' sh
++  '
++fi
++as_executable_p=$as_test_x
++
++# Sed expression to map a string onto a valid CPP name.
++as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
++
++# Sed expression to map a string onto a valid variable name.
++as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
++
++
++test -n "$DJDIR" || exec 7<&0 </dev/null
++exec 6>&1
++
++# Name of the host.
++# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
++# so uname gets run too.
++ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
++
++#
++# Initializations.
++#
++ac_default_prefix=/usr/local
++ac_clean_files=
++ac_config_libobj_dir=.
++LIBOBJS=
++cross_compiling=no
++subdirs=
++MFLAGS=
++MAKEFLAGS=
++
++# Identity of this package.
++PACKAGE_NAME='newlib'
++PACKAGE_TARNAME='newlib'
++PACKAGE_VERSION='3.1.0'
++PACKAGE_STRING='newlib 3.1.0'
++PACKAGE_BUGREPORT=''
++PACKAGE_URL=''
++
++ac_unique_file="termios.c"
++ac_subst_vars='LTLIBOBJS
++LIBOBJS
++sys_dir
++machine_dir
++libm_machine_dir
++lpfx
++aext
++oext
++OBJEXT
++USE_LIBTOOL_FALSE
++USE_LIBTOOL_TRUE
++ELIX_LEVEL_4_FALSE
++ELIX_LEVEL_4_TRUE
++ELIX_LEVEL_3_FALSE
++ELIX_LEVEL_3_TRUE
++ELIX_LEVEL_2_FALSE
++ELIX_LEVEL_2_TRUE
++ELIX_LEVEL_1_FALSE
++ELIX_LEVEL_1_TRUE
++ELIX_LEVEL_0_FALSE
++ELIX_LEVEL_0_TRUE
++LDFLAGS
++NO_INCLUDE_LIST
++NEWLIB_CFLAGS
++CCASFLAGS
++CCAS
++MAINT
++MAINTAINER_MODE_FALSE
++MAINTAINER_MODE_TRUE
++READELF
++RANLIB
++AR
++AS
++am__fastdepCC_FALSE
++am__fastdepCC_TRUE
++CCDEPMODE
++am__nodep
++AMDEPBACKSLASH
++AMDEP_FALSE
++AMDEP_TRUE
++am__quote
++am__include
++DEPDIR
++CC
++am__untar
++am__tar
++AMTAR
++am__leading_dot
++SET_MAKE
++AWK
++mkdir_p
++MKDIR_P
++INSTALL_STRIP_PROGRAM
++STRIP
++install_sh
++MAKEINFO
++AUTOHEADER
++AUTOMAKE
++AUTOCONF
++ACLOCAL
++VERSION
++PACKAGE
++CYGPATH_W
++am__isrc
++INSTALL_DATA
++INSTALL_SCRIPT
++INSTALL_PROGRAM
++host_os
++host_vendor
++host_cpu
++host
++build_os
++build_vendor
++build_cpu
++build
++newlib_basedir
++MAY_SUPPLY_SYSCALLS_FALSE
++MAY_SUPPLY_SYSCALLS_TRUE
++target_alias
++host_alias
++build_alias
++LIBS
++ECHO_T
++ECHO_N
++ECHO_C
++DEFS
++mandir
++localedir
++libdir
++psdir
++pdfdir
++dvidir
++htmldir
++infodir
++docdir
++oldincludedir
++includedir
++localstatedir
++sharedstatedir
++sysconfdir
++datadir
++datarootdir
++libexecdir
++sbindir
++bindir
++program_transform_name
++prefix
++exec_prefix
++PACKAGE_URL
++PACKAGE_BUGREPORT
++PACKAGE_STRING
++PACKAGE_VERSION
++PACKAGE_TARNAME
++PACKAGE_NAME
++PATH_SEPARATOR
++SHELL'
++ac_subst_files=''
++ac_user_opts='
++enable_option_checking
++enable_multilib
++enable_target_optspace
++enable_malloc_debugging
++enable_newlib_multithread
++enable_newlib_iconv
++enable_newlib_elix_level
++enable_newlib_io_float
++enable_newlib_supplied_syscalls
++enable_newlib_fno_builtin
++enable_dependency_tracking
++enable_maintainer_mode
++'
++      ac_precious_vars='build_alias
++host_alias
++target_alias
++CCAS
++CCASFLAGS'
++
++
++# Initialize some variables set by options.
++ac_init_help=
++ac_init_version=false
++ac_unrecognized_opts=
++ac_unrecognized_sep=
++# The variables have the same names as the options, with
++# dashes changed to underlines.
++cache_file=/dev/null
++exec_prefix=NONE
++no_create=
++no_recursion=
++prefix=NONE
++program_prefix=NONE
++program_suffix=NONE
++program_transform_name=s,x,x,
++silent=
++site=
++srcdir=
++verbose=
++x_includes=NONE
++x_libraries=NONE
++
++# Installation directory options.
++# These are left unexpanded so users can "make install exec_prefix=/foo"
++# and all the variables that are supposed to be based on exec_prefix
++# by default will actually change.
++# Use braces instead of parens because sh, perl, etc. also accept them.
++# (The list follows the same order as the GNU Coding Standards.)
++bindir='${exec_prefix}/bin'
++sbindir='${exec_prefix}/sbin'
++libexecdir='${exec_prefix}/libexec'
++datarootdir='${prefix}/share'
++datadir='${datarootdir}'
++sysconfdir='${prefix}/etc'
++sharedstatedir='${prefix}/com'
++localstatedir='${prefix}/var'
++includedir='${prefix}/include'
++oldincludedir='/usr/include'
++docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
++infodir='${datarootdir}/info'
++htmldir='${docdir}'
++dvidir='${docdir}'
++pdfdir='${docdir}'
++psdir='${docdir}'
++libdir='${exec_prefix}/lib'
++localedir='${datarootdir}/locale'
++mandir='${datarootdir}/man'
++
++ac_prev=
++ac_dashdash=
++for ac_option
++do
++  # If the previous option needs an argument, assign it.
++  if test -n "$ac_prev"; then
++    eval $ac_prev=\$ac_option
++    ac_prev=
++    continue
++  fi
++
++  case $ac_option in
++  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
++  *=)   ac_optarg= ;;
++  *)    ac_optarg=yes ;;
++  esac
++
++  # Accept the important Cygnus configure options, so we can diagnose typos.
++
++  case $ac_dashdash$ac_option in
++  --)
++    ac_dashdash=yes ;;
++
++  -bindir | --bindir | --bindi | --bind | --bin | --bi)
++    ac_prev=bindir ;;
++  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
++    bindir=$ac_optarg ;;
++
++  -build | --build | --buil | --bui | --bu)
++    ac_prev=build_alias ;;
++  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
++    build_alias=$ac_optarg ;;
++
++  -cache-file | --cache-file | --cache-fil | --cache-fi \
++  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
++    ac_prev=cache_file ;;
++  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
++  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
++    cache_file=$ac_optarg ;;
++
++  --config-cache | -C)
++    cache_file=config.cache ;;
++
++  -datadir | --datadir | --datadi | --datad)
++    ac_prev=datadir ;;
++  -datadir=* | --datadir=* | --datadi=* | --datad=*)
++    datadir=$ac_optarg ;;
++
++  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
++  | --dataroo | --dataro | --datar)
++    ac_prev=datarootdir ;;
++  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
++  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
++    datarootdir=$ac_optarg ;;
++
++  -disable-* | --disable-*)
++    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
++    # Reject names that are not valid shell variable names.
++    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
++      as_fn_error $? "invalid feature name: $ac_useropt"
++    ac_useropt_orig=$ac_useropt
++    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
++    case $ac_user_opts in
++      *"
++"enable_$ac_useropt"
++"*) ;;
++      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
++	 ac_unrecognized_sep=', ';;
++    esac
++    eval enable_$ac_useropt=no ;;
++
++  -docdir | --docdir | --docdi | --doc | --do)
++    ac_prev=docdir ;;
++  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
++    docdir=$ac_optarg ;;
++
++  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
++    ac_prev=dvidir ;;
++  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
++    dvidir=$ac_optarg ;;
++
++  -enable-* | --enable-*)
++    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
++    # Reject names that are not valid shell variable names.
++    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
++      as_fn_error $? "invalid feature name: $ac_useropt"
++    ac_useropt_orig=$ac_useropt
++    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
++    case $ac_user_opts in
++      *"
++"enable_$ac_useropt"
++"*) ;;
++      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
++	 ac_unrecognized_sep=', ';;
++    esac
++    eval enable_$ac_useropt=\$ac_optarg ;;
++
++  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
++  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
++  | --exec | --exe | --ex)
++    ac_prev=exec_prefix ;;
++  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
++  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
++  | --exec=* | --exe=* | --ex=*)
++    exec_prefix=$ac_optarg ;;
++
++  -gas | --gas | --ga | --g)
++    # Obsolete; use --with-gas.
++    with_gas=yes ;;
++
++  -help | --help | --hel | --he | -h)
++    ac_init_help=long ;;
++  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
++    ac_init_help=recursive ;;
++  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
++    ac_init_help=short ;;
++
++  -host | --host | --hos | --ho)
++    ac_prev=host_alias ;;
++  -host=* | --host=* | --hos=* | --ho=*)
++    host_alias=$ac_optarg ;;
++
++  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
++    ac_prev=htmldir ;;
++  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
++  | --ht=*)
++    htmldir=$ac_optarg ;;
++
++  -includedir | --includedir | --includedi | --included | --include \
++  | --includ | --inclu | --incl | --inc)
++    ac_prev=includedir ;;
++  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
++  | --includ=* | --inclu=* | --incl=* | --inc=*)
++    includedir=$ac_optarg ;;
++
++  -infodir | --infodir | --infodi | --infod | --info | --inf)
++    ac_prev=infodir ;;
++  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
++    infodir=$ac_optarg ;;
++
++  -libdir | --libdir | --libdi | --libd)
++    ac_prev=libdir ;;
++  -libdir=* | --libdir=* | --libdi=* | --libd=*)
++    libdir=$ac_optarg ;;
++
++  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
++  | --libexe | --libex | --libe)
++    ac_prev=libexecdir ;;
++  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
++  | --libexe=* | --libex=* | --libe=*)
++    libexecdir=$ac_optarg ;;
++
++  -localedir | --localedir | --localedi | --localed | --locale)
++    ac_prev=localedir ;;
++  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
++    localedir=$ac_optarg ;;
++
++  -localstatedir | --localstatedir | --localstatedi | --localstated \
++  | --localstate | --localstat | --localsta | --localst | --locals)
++    ac_prev=localstatedir ;;
++  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
++  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
++    localstatedir=$ac_optarg ;;
++
++  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
++    ac_prev=mandir ;;
++  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
++    mandir=$ac_optarg ;;
++
++  -nfp | --nfp | --nf)
++    # Obsolete; use --without-fp.
++    with_fp=no ;;
++
++  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
++  | --no-cr | --no-c | -n)
++    no_create=yes ;;
++
++  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
++  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
++    no_recursion=yes ;;
++
++  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
++  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
++  | --oldin | --oldi | --old | --ol | --o)
++    ac_prev=oldincludedir ;;
++  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
++  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
++  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
++    oldincludedir=$ac_optarg ;;
++
++  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
++    ac_prev=prefix ;;
++  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
++    prefix=$ac_optarg ;;
++
++  -program-prefix | --program-prefix | --program-prefi | --program-pref \
++  | --program-pre | --program-pr | --program-p)
++    ac_prev=program_prefix ;;
++  -program-prefix=* | --program-prefix=* | --program-prefi=* \
++  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
++    program_prefix=$ac_optarg ;;
++
++  -program-suffix | --program-suffix | --program-suffi | --program-suff \
++  | --program-suf | --program-su | --program-s)
++    ac_prev=program_suffix ;;
++  -program-suffix=* | --program-suffix=* | --program-suffi=* \
++  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
++    program_suffix=$ac_optarg ;;
++
++  -program-transform-name | --program-transform-name \
++  | --program-transform-nam | --program-transform-na \
++  | --program-transform-n | --program-transform- \
++  | --program-transform | --program-transfor \
++  | --program-transfo | --program-transf \
++  | --program-trans | --program-tran \
++  | --progr-tra | --program-tr | --program-t)
++    ac_prev=program_transform_name ;;
++  -program-transform-name=* | --program-transform-name=* \
++  | --program-transform-nam=* | --program-transform-na=* \
++  | --program-transform-n=* | --program-transform-=* \
++  | --program-transform=* | --program-transfor=* \
++  | --program-transfo=* | --program-transf=* \
++  | --program-trans=* | --program-tran=* \
++  | --progr-tra=* | --program-tr=* | --program-t=*)
++    program_transform_name=$ac_optarg ;;
++
++  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
++    ac_prev=pdfdir ;;
++  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
++    pdfdir=$ac_optarg ;;
++
++  -psdir | --psdir | --psdi | --psd | --ps)
++    ac_prev=psdir ;;
++  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
++    psdir=$ac_optarg ;;
++
++  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
++  | -silent | --silent | --silen | --sile | --sil)
++    silent=yes ;;
++
++  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
++    ac_prev=sbindir ;;
++  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
++  | --sbi=* | --sb=*)
++    sbindir=$ac_optarg ;;
++
++  -sharedstatedir | --sharedstatedir | --sharedstatedi \
++  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
++  | --sharedst | --shareds | --shared | --share | --shar \
++  | --sha | --sh)
++    ac_prev=sharedstatedir ;;
++  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
++  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
++  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
++  | --sha=* | --sh=*)
++    sharedstatedir=$ac_optarg ;;
++
++  -site | --site | --sit)
++    ac_prev=site ;;
++  -site=* | --site=* | --sit=*)
++    site=$ac_optarg ;;
++
++  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
++    ac_prev=srcdir ;;
++  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
++    srcdir=$ac_optarg ;;
++
++  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
++  | --syscon | --sysco | --sysc | --sys | --sy)
++    ac_prev=sysconfdir ;;
++  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
++  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
++    sysconfdir=$ac_optarg ;;
++
++  -target | --target | --targe | --targ | --tar | --ta | --t)
++    ac_prev=target_alias ;;
++  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
++    target_alias=$ac_optarg ;;
++
++  -v | -verbose | --verbose | --verbos | --verbo | --verb)
++    verbose=yes ;;
++
++  -version | --version | --versio | --versi | --vers | -V)
++    ac_init_version=: ;;
++
++  -with-* | --with-*)
++    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
++    # Reject names that are not valid shell variable names.
++    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
++      as_fn_error $? "invalid package name: $ac_useropt"
++    ac_useropt_orig=$ac_useropt
++    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
++    case $ac_user_opts in
++      *"
++"with_$ac_useropt"
++"*) ;;
++      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
++	 ac_unrecognized_sep=', ';;
++    esac
++    eval with_$ac_useropt=\$ac_optarg ;;
++
++  -without-* | --without-*)
++    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
++    # Reject names that are not valid shell variable names.
++    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
++      as_fn_error $? "invalid package name: $ac_useropt"
++    ac_useropt_orig=$ac_useropt
++    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
++    case $ac_user_opts in
++      *"
++"with_$ac_useropt"
++"*) ;;
++      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
++	 ac_unrecognized_sep=', ';;
++    esac
++    eval with_$ac_useropt=no ;;
++
++  --x)
++    # Obsolete; use --with-x.
++    with_x=yes ;;
++
++  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
++  | --x-incl | --x-inc | --x-in | --x-i)
++    ac_prev=x_includes ;;
++  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
++  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
++    x_includes=$ac_optarg ;;
++
++  -x-libraries | --x-libraries | --x-librarie | --x-librari \
++  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
++    ac_prev=x_libraries ;;
++  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
++  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
++    x_libraries=$ac_optarg ;;
++
++  -*) as_fn_error $? "unrecognized option: \`$ac_option'
++Try \`$0 --help' for more information"
++    ;;
++
++  *=*)
++    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
++    # Reject names that are not valid shell variable names.
++    case $ac_envvar in #(
++      '' | [0-9]* | *[!_$as_cr_alnum]* )
++      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
++    esac
++    eval $ac_envvar=\$ac_optarg
++    export $ac_envvar ;;
++
++  *)
++    # FIXME: should be removed in autoconf 3.0.
++    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
++    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
++      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
++    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
++    ;;
++
++  esac
++done
++
++if test -n "$ac_prev"; then
++  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
++  as_fn_error $? "missing argument to $ac_option"
++fi
++
++if test -n "$ac_unrecognized_opts"; then
++  case $enable_option_checking in
++    no) ;;
++    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
++    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
++  esac
++fi
++
++# Check all directory arguments for consistency.
++for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
++		datadir sysconfdir sharedstatedir localstatedir includedir \
++		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
++		libdir localedir mandir
++do
++  eval ac_val=\$$ac_var
++  # Remove trailing slashes.
++  case $ac_val in
++    */ )
++      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
++      eval $ac_var=\$ac_val;;
++  esac
++  # Be sure to have absolute directory names.
++  case $ac_val in
++    [\\/$]* | ?:[\\/]* )  continue;;
++    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
++  esac
++  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
++done
++
++# There might be people who depend on the old broken behavior: `$host'
++# used to hold the argument of --host etc.
++# FIXME: To remove some day.
++build=$build_alias
++host=$host_alias
++target=$target_alias
++
++# FIXME: To remove some day.
++if test "x$host_alias" != x; then
++  if test "x$build_alias" = x; then
++    cross_compiling=maybe
++    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
++    If a cross compiler is detected then cross compile mode will be used" >&2
++  elif test "x$build_alias" != "x$host_alias"; then
++    cross_compiling=yes
++  fi
++fi
++
++ac_tool_prefix=
++test -n "$host_alias" && ac_tool_prefix=$host_alias-
++
++test "$silent" = yes && exec 6>/dev/null
++
++
++ac_pwd=`pwd` && test -n "$ac_pwd" &&
++ac_ls_di=`ls -di .` &&
++ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
++  as_fn_error $? "working directory cannot be determined"
++test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
++  as_fn_error $? "pwd does not report name of working directory"
++
++
++# Find the source files, if location was not specified.
++if test -z "$srcdir"; then
++  ac_srcdir_defaulted=yes
++  # Try the directory containing this script, then the parent directory.
++  ac_confdir=`$as_dirname -- "$as_myself" ||
++$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++	 X"$as_myself" : 'X\(//\)[^/]' \| \
++	 X"$as_myself" : 'X\(//\)$' \| \
++	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X"$as_myself" |
++    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\/\)[^/].*/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\/\)$/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\).*/{
++	    s//\1/
++	    q
++	  }
++	  s/.*/./; q'`
++  srcdir=$ac_confdir
++  if test ! -r "$srcdir/$ac_unique_file"; then
++    srcdir=..
++  fi
++else
++  ac_srcdir_defaulted=no
++fi
++if test ! -r "$srcdir/$ac_unique_file"; then
++  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
++  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
++fi
++ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
++ac_abs_confdir=`(
++	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
++	pwd)`
++# When building in place, set srcdir=.
++if test "$ac_abs_confdir" = "$ac_pwd"; then
++  srcdir=.
++fi
++# Remove unnecessary trailing slashes from srcdir.
++# Double slashes in file names in object file debugging info
++# mess up M-x gdb in Emacs.
++case $srcdir in
++*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
++esac
++for ac_var in $ac_precious_vars; do
++  eval ac_env_${ac_var}_set=\${${ac_var}+set}
++  eval ac_env_${ac_var}_value=\$${ac_var}
++  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
++  eval ac_cv_env_${ac_var}_value=\$${ac_var}
++done
++
++#
++# Report the --help message.
++#
++if test "$ac_init_help" = "long"; then
++  # Omit some internal or obsolete options to make the list less imposing.
++  # This message is too long to be a string in the A/UX 3.1 sh.
++  cat <<_ACEOF
++\`configure' configures newlib 3.1.0 to adapt to many kinds of systems.
++
++Usage: $0 [OPTION]... [VAR=VALUE]...
++
++To assign environment variables (e.g., CC, CFLAGS...), specify them as
++VAR=VALUE.  See below for descriptions of some of the useful variables.
++
++Defaults for the options are specified in brackets.
++
++Configuration:
++  -h, --help              display this help and exit
++      --help=short        display options specific to this package
++      --help=recursive    display the short help of all the included packages
++  -V, --version           display version information and exit
++  -q, --quiet, --silent   do not print \`checking ...' messages
++      --cache-file=FILE   cache test results in FILE [disabled]
++  -C, --config-cache      alias for \`--cache-file=config.cache'
++  -n, --no-create         do not create output files
++      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
++
++Installation directories:
++  --prefix=PREFIX         install architecture-independent files in PREFIX
++                          [$ac_default_prefix]
++  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
++                          [PREFIX]
++
++By default, \`make install' will install all the files in
++\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
++an installation prefix other than \`$ac_default_prefix' using \`--prefix',
++for instance \`--prefix=\$HOME'.
++
++For better control, use the options below.
++
++Fine tuning of the installation directories:
++  --bindir=DIR            user executables [EPREFIX/bin]
++  --sbindir=DIR           system admin executables [EPREFIX/sbin]
++  --libexecdir=DIR        program executables [EPREFIX/libexec]
++  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
++  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
++  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
++  --libdir=DIR            object code libraries [EPREFIX/lib]
++  --includedir=DIR        C header files [PREFIX/include]
++  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
++  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
++  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
++  --infodir=DIR           info documentation [DATAROOTDIR/info]
++  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
++  --mandir=DIR            man documentation [DATAROOTDIR/man]
++  --docdir=DIR            documentation root [DATAROOTDIR/doc/newlib]
++  --htmldir=DIR           html documentation [DOCDIR]
++  --dvidir=DIR            dvi documentation [DOCDIR]
++  --pdfdir=DIR            pdf documentation [DOCDIR]
++  --psdir=DIR             ps documentation [DOCDIR]
++_ACEOF
++
++  cat <<\_ACEOF
++
++Program names:
++  --program-prefix=PREFIX            prepend PREFIX to installed program names
++  --program-suffix=SUFFIX            append SUFFIX to installed program names
++  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
++
++System types:
++  --build=BUILD     configure for building on BUILD [guessed]
++  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
++_ACEOF
++fi
++
++if test -n "$ac_init_help"; then
++  case $ac_init_help in
++     short | recursive ) echo "Configuration of newlib 3.1.0:";;
++   esac
++  cat <<\_ACEOF
++
++Optional Features:
++  --disable-option-checking  ignore unrecognized --enable/--with options
++  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
++  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
++  --enable-multilib         build many library versions (default)
++  --enable-target-optspace  optimize for space
++  --enable-malloc-debugging indicate malloc debugging requested
++  --enable-newlib-multithread        enable support for multiple threads
++  --enable-newlib-iconv     enable iconv library support
++  --enable-newlib-elix-level         supply desired elix library level (1-4)
++  --disable-newlib-io-float disable printf/scanf family float support
++  --disable-newlib-supplied-syscalls disable newlib from supplying syscalls
++  --disable-newlib-fno-builtin disable -fno-builtin flag to allow compiler to use builtin library functions
++  --disable-dependency-tracking  speeds up one-time build
++  --enable-dependency-tracking   do not reject slow dependency extractors
++  --enable-maintainer-mode  enable make rules and dependencies not useful
++			  (and sometimes confusing) to the casual installer
++
++Some influential environment variables:
++  CCAS        assembler compiler command (defaults to CC)
++  CCASFLAGS   assembler compiler flags (defaults to CFLAGS)
++
++Use these variables to override the choices made by `configure' or to help
++it to find libraries and programs with nonstandard names/locations.
++
++Report bugs to the package provider.
++_ACEOF
++ac_status=$?
++fi
++
++if test "$ac_init_help" = "recursive"; then
++  # If there are subdirs, report their specific --help.
++  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
++    test -d "$ac_dir" ||
++      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
++      continue
++    ac_builddir=.
++
++case "$ac_dir" in
++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
++*)
++  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
++  # A ".." for each directory in $ac_dir_suffix.
++  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
++  case $ac_top_builddir_sub in
++  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
++  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
++  esac ;;
++esac
++ac_abs_top_builddir=$ac_pwd
++ac_abs_builddir=$ac_pwd$ac_dir_suffix
++# for backward compatibility:
++ac_top_builddir=$ac_top_build_prefix
++
++case $srcdir in
++  .)  # We are building in place.
++    ac_srcdir=.
++    ac_top_srcdir=$ac_top_builddir_sub
++    ac_abs_top_srcdir=$ac_pwd ;;
++  [\\/]* | ?:[\\/]* )  # Absolute name.
++    ac_srcdir=$srcdir$ac_dir_suffix;
++    ac_top_srcdir=$srcdir
++    ac_abs_top_srcdir=$srcdir ;;
++  *) # Relative name.
++    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
++    ac_top_srcdir=$ac_top_build_prefix$srcdir
++    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
++esac
++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
++
++    cd "$ac_dir" || { ac_status=$?; continue; }
++    # Check for guested configure.
++    if test -f "$ac_srcdir/configure.gnu"; then
++      echo &&
++      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
++    elif test -f "$ac_srcdir/configure"; then
++      echo &&
++      $SHELL "$ac_srcdir/configure" --help=recursive
++    else
++      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
++    fi || ac_status=$?
++    cd "$ac_pwd" || { ac_status=$?; break; }
++  done
++fi
++
++test -n "$ac_init_help" && exit $ac_status
++if $ac_init_version; then
++  cat <<\_ACEOF
++newlib configure 3.1.0
++generated by GNU Autoconf 2.68
++
++Copyright (C) 2010 Free Software Foundation, Inc.
++This configure script is free software; the Free Software Foundation
++gives unlimited permission to copy, distribute and modify it.
++_ACEOF
++  exit
++fi
++
++## ------------------------ ##
++## Autoconf initialization. ##
++## ------------------------ ##
++
++# ac_fn_c_try_compile LINENO
++# --------------------------
++# Try to compile conftest.$ac_ext, and return whether this succeeded.
++ac_fn_c_try_compile ()
++{
++  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++  rm -f conftest.$ac_objext
++  if { { ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++  (eval "$ac_compile") 2>conftest.err
++  ac_status=$?
++  if test -s conftest.err; then
++    grep -v '^ *+' conftest.err >conftest.er1
++    cat conftest.er1 >&5
++    mv -f conftest.er1 conftest.err
++  fi
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; } && {
++	 test -z "$ac_c_werror_flag" ||
++	 test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then :
++  ac_retval=0
++else
++  $as_echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++	ac_retval=1
++fi
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
++  as_fn_set_status $ac_retval
++
++} # ac_fn_c_try_compile
++cat >config.log <<_ACEOF
++This file contains any messages produced by compilers while
++running configure, to aid debugging if configure makes a mistake.
++
++It was created by newlib $as_me 3.1.0, which was
++generated by GNU Autoconf 2.68.  Invocation command line was
++
++  $ $0 $@
++
++_ACEOF
++exec 5>>config.log
++{
++cat <<_ASUNAME
++## --------- ##
++## Platform. ##
++## --------- ##
++
++hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
++uname -m = `(uname -m) 2>/dev/null || echo unknown`
++uname -r = `(uname -r) 2>/dev/null || echo unknown`
++uname -s = `(uname -s) 2>/dev/null || echo unknown`
++uname -v = `(uname -v) 2>/dev/null || echo unknown`
++
++/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
++/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
++
++/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
++/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
++/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
++/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
++/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
++/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
++/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
++
++_ASUNAME
++
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    $as_echo "PATH: $as_dir"
++  done
++IFS=$as_save_IFS
++
++} >&5
++
++cat >&5 <<_ACEOF
++
++
++## ----------- ##
++## Core tests. ##
++## ----------- ##
++
++_ACEOF
++
++
++# Keep a trace of the command line.
++# Strip out --no-create and --no-recursion so they do not pile up.
++# Strip out --silent because we don't want to record it for future runs.
++# Also quote any args containing shell meta-characters.
++# Make two passes to allow for proper duplicate-argument suppression.
++ac_configure_args=
++ac_configure_args0=
++ac_configure_args1=
++ac_must_keep_next=false
++for ac_pass in 1 2
++do
++  for ac_arg
++  do
++    case $ac_arg in
++    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
++    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
++    | -silent | --silent | --silen | --sile | --sil)
++      continue ;;
++    *\'*)
++      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
++    esac
++    case $ac_pass in
++    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
++    2)
++      as_fn_append ac_configure_args1 " '$ac_arg'"
++      if test $ac_must_keep_next = true; then
++	ac_must_keep_next=false # Got value, back to normal.
++      else
++	case $ac_arg in
++	  *=* | --config-cache | -C | -disable-* | --disable-* \
++	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
++	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
++	  | -with-* | --with-* | -without-* | --without-* | --x)
++	    case "$ac_configure_args0 " in
++	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
++	    esac
++	    ;;
++	  -* ) ac_must_keep_next=true ;;
++	esac
++      fi
++      as_fn_append ac_configure_args " '$ac_arg'"
++      ;;
++    esac
++  done
++done
++{ ac_configure_args0=; unset ac_configure_args0;}
++{ ac_configure_args1=; unset ac_configure_args1;}
++
++# When interrupted or exit'd, cleanup temporary files, and complete
++# config.log.  We remove comments because anyway the quotes in there
++# would cause problems or look ugly.
++# WARNING: Use '\'' to represent an apostrophe within the trap.
++# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
++trap 'exit_status=$?
++  # Save into config.log some information that might help in debugging.
++  {
++    echo
++
++    $as_echo "## ---------------- ##
++## Cache variables. ##
++## ---------------- ##"
++    echo
++    # The following way of writing the cache mishandles newlines in values,
++(
++  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
++    eval ac_val=\$$ac_var
++    case $ac_val in #(
++    *${as_nl}*)
++      case $ac_var in #(
++      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
++$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
++      esac
++      case $ac_var in #(
++      _ | IFS | as_nl) ;; #(
++      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
++      *) { eval $ac_var=; unset $ac_var;} ;;
++      esac ;;
++    esac
++  done
++  (set) 2>&1 |
++    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
++    *${as_nl}ac_space=\ *)
++      sed -n \
++	"s/'\''/'\''\\\\'\'''\''/g;
++	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
++      ;; #(
++    *)
++      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
++      ;;
++    esac |
++    sort
++)
++    echo
++
++    $as_echo "## ----------------- ##
++## Output variables. ##
++## ----------------- ##"
++    echo
++    for ac_var in $ac_subst_vars
++    do
++      eval ac_val=\$$ac_var
++      case $ac_val in
++      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
++      esac
++      $as_echo "$ac_var='\''$ac_val'\''"
++    done | sort
++    echo
++
++    if test -n "$ac_subst_files"; then
++      $as_echo "## ------------------- ##
++## File substitutions. ##
++## ------------------- ##"
++      echo
++      for ac_var in $ac_subst_files
++      do
++	eval ac_val=\$$ac_var
++	case $ac_val in
++	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
++	esac
++	$as_echo "$ac_var='\''$ac_val'\''"
++      done | sort
++      echo
++    fi
++
++    if test -s confdefs.h; then
++      $as_echo "## ----------- ##
++## confdefs.h. ##
++## ----------- ##"
++      echo
++      cat confdefs.h
++      echo
++    fi
++    test "$ac_signal" != 0 &&
++      $as_echo "$as_me: caught signal $ac_signal"
++    $as_echo "$as_me: exit $exit_status"
++  } >&5
++  rm -f core *.core core.conftest.* &&
++    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
++    exit $exit_status
++' 0
++for ac_signal in 1 2 13 15; do
++  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
++done
++ac_signal=0
++
++# confdefs.h avoids OS command line length limits that DEFS can exceed.
++rm -f -r conftest* confdefs.h
++
++$as_echo "/* confdefs.h */" > confdefs.h
++
++# Predefined preprocessor variables.
++
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_NAME "$PACKAGE_NAME"
++_ACEOF
++
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
++_ACEOF
++
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_VERSION "$PACKAGE_VERSION"
++_ACEOF
++
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_STRING "$PACKAGE_STRING"
++_ACEOF
++
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
++_ACEOF
++
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_URL "$PACKAGE_URL"
++_ACEOF
++
++
++# Let the site file select an alternate cache file if it wants to.
++# Prefer an explicitly selected file to automatically selected ones.
++ac_site_file1=NONE
++ac_site_file2=NONE
++if test -n "$CONFIG_SITE"; then
++  # We do not want a PATH search for config.site.
++  case $CONFIG_SITE in #((
++    -*)  ac_site_file1=./$CONFIG_SITE;;
++    */*) ac_site_file1=$CONFIG_SITE;;
++    *)   ac_site_file1=./$CONFIG_SITE;;
++  esac
++elif test "x$prefix" != xNONE; then
++  ac_site_file1=$prefix/share/config.site
++  ac_site_file2=$prefix/etc/config.site
++else
++  ac_site_file1=$ac_default_prefix/share/config.site
++  ac_site_file2=$ac_default_prefix/etc/config.site
++fi
++for ac_site_file in "$ac_site_file1" "$ac_site_file2"
++do
++  test "x$ac_site_file" = xNONE && continue
++  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
++    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
++$as_echo "$as_me: loading site script $ac_site_file" >&6;}
++    sed 's/^/| /' "$ac_site_file" >&5
++    . "$ac_site_file" \
++      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error $? "failed to load site script $ac_site_file
++See \`config.log' for more details" "$LINENO" 5; }
++  fi
++done
++
++if test -r "$cache_file"; then
++  # Some versions of bash will fail to source /dev/null (special files
++  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
++  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
++    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
++$as_echo "$as_me: loading cache $cache_file" >&6;}
++    case $cache_file in
++      [\\/]* | ?:[\\/]* ) . "$cache_file";;
++      *)                      . "./$cache_file";;
++    esac
++  fi
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
++$as_echo "$as_me: creating cache $cache_file" >&6;}
++  >$cache_file
++fi
++
++# Check that the precious variables saved in the cache have kept the same
++# value.
++ac_cache_corrupted=false
++for ac_var in $ac_precious_vars; do
++  eval ac_old_set=\$ac_cv_env_${ac_var}_set
++  eval ac_new_set=\$ac_env_${ac_var}_set
++  eval ac_old_val=\$ac_cv_env_${ac_var}_value
++  eval ac_new_val=\$ac_env_${ac_var}_value
++  case $ac_old_set,$ac_new_set in
++    set,)
++      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
++$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
++      ac_cache_corrupted=: ;;
++    ,set)
++      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
++$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
++      ac_cache_corrupted=: ;;
++    ,);;
++    *)
++      if test "x$ac_old_val" != "x$ac_new_val"; then
++	# differences in whitespace do not lead to failure.
++	ac_old_val_w=`echo x $ac_old_val`
++	ac_new_val_w=`echo x $ac_new_val`
++	if test "$ac_old_val_w" != "$ac_new_val_w"; then
++	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
++$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
++	  ac_cache_corrupted=:
++	else
++	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
++$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
++	  eval $ac_var=\$ac_old_val
++	fi
++	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
++$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
++	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
++$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
++      fi;;
++  esac
++  # Pass precious variables to config.status.
++  if test "$ac_new_set" = set; then
++    case $ac_new_val in
++    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
++    *) ac_arg=$ac_var=$ac_new_val ;;
++    esac
++    case " $ac_configure_args " in
++      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
++      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
++    esac
++  fi
++done
++if $ac_cache_corrupted; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
++$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
++  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
++fi
++## -------------------- ##
++## Main body of script. ##
++## -------------------- ##
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++
++
++ac_aux_dir=
++for ac_dir in ../../../.. "$srcdir"/../../../..; do
++  if test -f "$ac_dir/install-sh"; then
++    ac_aux_dir=$ac_dir
++    ac_install_sh="$ac_aux_dir/install-sh -c"
++    break
++  elif test -f "$ac_dir/install.sh"; then
++    ac_aux_dir=$ac_dir
++    ac_install_sh="$ac_aux_dir/install.sh -c"
++    break
++  elif test -f "$ac_dir/shtool"; then
++    ac_aux_dir=$ac_dir
++    ac_install_sh="$ac_aux_dir/shtool install -c"
++    break
++  fi
++done
++if test -z "$ac_aux_dir"; then
++  as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../../../.. \"$srcdir\"/../../../.." "$LINENO" 5
++fi
++
++# These three variables are undocumented and unsupported,
++# and are intended to be withdrawn in a future Autoconf release.
++# They can cause serious problems if a builder's source tree is in a directory
++# whose full name contains unusual characters.
++ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
++ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
++ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
++
++
++
++
++# Make sure we can run config.sub.
++$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
++  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
++$as_echo_n "checking build system type... " >&6; }
++if ${ac_cv_build+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  ac_build_alias=$build_alias
++test "x$ac_build_alias" = x &&
++  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
++test "x$ac_build_alias" = x &&
++  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
++ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
++  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
++$as_echo "$ac_cv_build" >&6; }
++case $ac_cv_build in
++*-*-*) ;;
++*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
++esac
++build=$ac_cv_build
++ac_save_IFS=$IFS; IFS='-'
++set x $ac_cv_build
++shift
++build_cpu=$1
++build_vendor=$2
++shift; shift
++# Remember, the first character of IFS is used to create $*,
++# except with old shells:
++build_os=$*
++IFS=$ac_save_IFS
++case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
++$as_echo_n "checking host system type... " >&6; }
++if ${ac_cv_host+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test "x$host_alias" = x; then
++  ac_cv_host=$ac_cv_build
++else
++  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
++    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
++$as_echo "$ac_cv_host" >&6; }
++case $ac_cv_host in
++*-*-*) ;;
++*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
++esac
++host=$ac_cv_host
++ac_save_IFS=$IFS; IFS='-'
++set x $ac_cv_host
++shift
++host_cpu=$1
++host_vendor=$2
++shift; shift
++# Remember, the first character of IFS is used to create $*,
++# except with old shells:
++host_os=$*
++IFS=$ac_save_IFS
++case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
++
++
++am__api_version='1.11'
++
++# Find a good install program.  We prefer a C program (faster),
++# so one script is as good as another.  But avoid the broken or
++# incompatible versions:
++# SysV /etc/install, /usr/sbin/install
++# SunOS /usr/etc/install
++# IRIX /sbin/install
++# AIX /bin/install
++# AmigaOS /C/install, which installs bootblocks on floppy discs
++# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
++# AFS /usr/afsws/bin/install, which mishandles nonexistent args
++# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
++# OS/2's system install, which has a completely different semantic
++# ./install, which can be erroneously created by make from ./install.sh.
++# Reject install programs that cannot install multiple files.
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
++$as_echo_n "checking for a BSD-compatible install... " >&6; }
++if test -z "$INSTALL"; then
++if ${ac_cv_path_install+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    # Account for people who put trailing slashes in PATH elements.
++case $as_dir/ in #((
++  ./ | .// | /[cC]/* | \
++  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
++  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
++  /usr/ucb/* ) ;;
++  *)
++    # OSF1 and SCO ODT 3.0 have their own names for install.
++    # Don't use installbsd from OSF since it installs stuff as root
++    # by default.
++    for ac_prog in ginstall scoinst install; do
++      for ac_exec_ext in '' $ac_executable_extensions; do
++	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
++	  if test $ac_prog = install &&
++	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
++	    # AIX install.  It has an incompatible calling convention.
++	    :
++	  elif test $ac_prog = install &&
++	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
++	    # program-specific install script used by HP pwplus--don't use.
++	    :
++	  else
++	    rm -rf conftest.one conftest.two conftest.dir
++	    echo one > conftest.one
++	    echo two > conftest.two
++	    mkdir conftest.dir
++	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
++	      test -s conftest.one && test -s conftest.two &&
++	      test -s conftest.dir/conftest.one &&
++	      test -s conftest.dir/conftest.two
++	    then
++	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
++	      break 3
++	    fi
++	  fi
++	fi
++      done
++    done
++    ;;
++esac
++
++  done
++IFS=$as_save_IFS
++
++rm -rf conftest.one conftest.two conftest.dir
++
++fi
++  if test "${ac_cv_path_install+set}" = set; then
++    INSTALL=$ac_cv_path_install
++  else
++    # As a last resort, use the slow shell script.  Don't cache a
++    # value for INSTALL within a source directory, because that will
++    # break other packages using the cache if that directory is
++    # removed, or if the value is a relative name.
++    INSTALL=$ac_install_sh
++  fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
++$as_echo "$INSTALL" >&6; }
++
++# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
++# It thinks the first close brace ends the variable substitution.
++test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
++
++test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
++
++test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
++$as_echo_n "checking whether build environment is sane... " >&6; }
++# Just in case
++sleep 1
++echo timestamp > conftest.file
++# Reject unsafe characters in $srcdir or the absolute working directory
++# name.  Accept space and tab only in the latter.
++am_lf='
++'
++case `pwd` in
++  *[\\\"\#\$\&\'\`$am_lf]*)
++    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
++esac
++case $srcdir in
++  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
++    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
++esac
++
++# Do `set' in a subshell so we don't clobber the current shell's
++# arguments.  Must try -L first in case configure is actually a
++# symlink; some systems play weird games with the mod time of symlinks
++# (eg FreeBSD returns the mod time of the symlink's containing
++# directory).
++if (
++   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
++   if test "$*" = "X"; then
++      # -L didn't work.
++      set X `ls -t "$srcdir/configure" conftest.file`
++   fi
++   rm -f conftest.file
++   if test "$*" != "X $srcdir/configure conftest.file" \
++      && test "$*" != "X conftest.file $srcdir/configure"; then
++
++      # If neither matched, then we have a broken ls.  This can happen
++      # if, for instance, CONFIG_SHELL is bash and it inherits a
++      # broken ls alias from the environment.  This has actually
++      # happened.  Such a system could not be considered "sane".
++      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
++alias in your environment" "$LINENO" 5
++   fi
++
++   test "$2" = conftest.file
++   )
++then
++   # Ok.
++   :
++else
++   as_fn_error $? "newly created file is older than distributed files!
++Check your system clock" "$LINENO" 5
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++test "$program_prefix" != NONE &&
++  program_transform_name="s&^&$program_prefix&;$program_transform_name"
++# Use a double $ so make ignores it.
++test "$program_suffix" != NONE &&
++  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
++# Double any \ or $.
++# By default was `s,x,x', remove it if useless.
++ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
++program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
++
++# expand $ac_aux_dir to an absolute path
++am_aux_dir=`cd $ac_aux_dir && pwd`
++
++if test x"${MISSING+set}" != xset; then
++  case $am_aux_dir in
++  *\ * | *\	*)
++    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
++  *)
++    MISSING="\${SHELL} $am_aux_dir/missing" ;;
++  esac
++fi
++# Use eval to expand $SHELL
++if eval "$MISSING --run true"; then
++  am_missing_run="$MISSING --run "
++else
++  am_missing_run=
++  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
++$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
++fi
++
++if test x"${install_sh}" != xset; then
++  case $am_aux_dir in
++  *\ * | *\	*)
++    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
++  *)
++    install_sh="\${SHELL} $am_aux_dir/install-sh"
++  esac
++fi
++
++# Installed binaries are usually stripped using `strip' when the user
++# run `make install-strip'.  However `strip' might not be the right
++# tool to use in cross-compilation environments, therefore Automake
++# will honor the `STRIP' environment variable to overrule this program.
++if test "$cross_compiling" != no; then
++  if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
++set dummy ${ac_tool_prefix}strip; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_STRIP+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$STRIP"; then
++  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++STRIP=$ac_cv_prog_STRIP
++if test -n "$STRIP"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
++$as_echo "$STRIP" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_STRIP"; then
++  ac_ct_STRIP=$STRIP
++  # Extract the first word of "strip", so it can be a program name with args.
++set dummy strip; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$ac_ct_STRIP"; then
++  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_ac_ct_STRIP="strip"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
++if test -n "$ac_ct_STRIP"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
++$as_echo "$ac_ct_STRIP" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++  if test "x$ac_ct_STRIP" = x; then
++    STRIP=":"
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++    STRIP=$ac_ct_STRIP
++  fi
++else
++  STRIP="$ac_cv_prog_STRIP"
++fi
++
++fi
++INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
++$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
++if test -z "$MKDIR_P"; then
++  if ${ac_cv_path_mkdir+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_prog in mkdir gmkdir; do
++	 for ac_exec_ext in '' $ac_executable_extensions; do
++	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
++	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
++	     'mkdir (GNU coreutils) '* | \
++	     'mkdir (coreutils) '* | \
++	     'mkdir (fileutils) '4.1*)
++	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
++	       break 3;;
++	   esac
++	 done
++       done
++  done
++IFS=$as_save_IFS
++
++fi
++
++  test -d ./--version && rmdir ./--version
++  if test "${ac_cv_path_mkdir+set}" = set; then
++    MKDIR_P="$ac_cv_path_mkdir -p"
++  else
++    # As a last resort, use the slow shell script.  Don't cache a
++    # value for MKDIR_P within a source directory, because that will
++    # break other packages using the cache if that directory is
++    # removed, or if the value is a relative name.
++    MKDIR_P="$ac_install_sh -d"
++  fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
++$as_echo "$MKDIR_P" >&6; }
++
++mkdir_p="$MKDIR_P"
++case $mkdir_p in
++  [\\/$]* | ?:[\\/]*) ;;
++  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
++esac
++
++for ac_prog in gawk mawk nawk awk
++do
++  # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_AWK+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$AWK"; then
++  ac_cv_prog_AWK="$AWK" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_AWK="$ac_prog"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++AWK=$ac_cv_prog_AWK
++if test -n "$AWK"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
++$as_echo "$AWK" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++  test -n "$AWK" && break
++done
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
++$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
++set x ${MAKE-make}
++ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
++if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  cat >conftest.make <<\_ACEOF
++SHELL = /bin/sh
++all:
++	@echo '@@@%%%=$(MAKE)=@@@%%%'
++_ACEOF
++# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
++case `${MAKE-make} -f conftest.make 2>/dev/null` in
++  *@@@%%%=?*=@@@%%%*)
++    eval ac_cv_prog_make_${ac_make}_set=yes;;
++  *)
++    eval ac_cv_prog_make_${ac_make}_set=no;;
++esac
++rm -f conftest.make
++fi
++if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++  SET_MAKE=
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++  SET_MAKE="MAKE=${MAKE-make}"
++fi
++
++rm -rf .tst 2>/dev/null
++mkdir .tst 2>/dev/null
++if test -d .tst; then
++  am__leading_dot=.
++else
++  am__leading_dot=_
++fi
++rmdir .tst 2>/dev/null
++
++DEPDIR="${am__leading_dot}deps"
++
++ac_config_commands="$ac_config_commands depfiles"
++
++
++am_make=${MAKE-make}
++cat > confinc << 'END'
++am__doit:
++	@echo this is the am__doit target
++.PHONY: am__doit
++END
++# If we don't find an include directive, just comment out the code.
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
++$as_echo_n "checking for style of include used by $am_make... " >&6; }
++am__include="#"
++am__quote=
++_am_result=none
++# First try GNU make style include.
++echo "include confinc" > confmf
++# Ignore all kinds of additional output from `make'.
++case `$am_make -s -f confmf 2> /dev/null` in #(
++*the\ am__doit\ target*)
++  am__include=include
++  am__quote=
++  _am_result=GNU
++  ;;
++esac
++# Now try BSD make style include.
++if test "$am__include" = "#"; then
++   echo '.include "confinc"' > confmf
++   case `$am_make -s -f confmf 2> /dev/null` in #(
++   *the\ am__doit\ target*)
++     am__include=.include
++     am__quote="\""
++     _am_result=BSD
++     ;;
++   esac
++fi
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
++$as_echo "$_am_result" >&6; }
++rm -f confinc confmf
++
++# Check whether --enable-dependency-tracking was given.
++if test "${enable_dependency_tracking+set}" = set; then :
++  enableval=$enable_dependency_tracking;
++fi
++
++if test "x$enable_dependency_tracking" != xno; then
++  am_depcomp="$ac_aux_dir/depcomp"
++  AMDEPBACKSLASH='\'
++  am__nodep='_no'
++fi
++ if test "x$enable_dependency_tracking" != xno; then
++  AMDEP_TRUE=
++  AMDEP_FALSE='#'
++else
++  AMDEP_TRUE='#'
++  AMDEP_FALSE=
++fi
++
++
++
++# Check whether --enable-multilib was given.
++if test "${enable_multilib+set}" = set; then :
++  enableval=$enable_multilib; case "${enableval}" in
++  yes) multilib=yes ;;
++  no)  multilib=no ;;
++  *)   as_fn_error $? "bad value ${enableval} for multilib option" "$LINENO" 5 ;;
++ esac
++else
++  multilib=yes
++fi
++
++# Check whether --enable-target-optspace was given.
++if test "${enable_target_optspace+set}" = set; then :
++  enableval=$enable_target_optspace; case "${enableval}" in
++  yes) target_optspace=yes ;;
++  no)  target_optspace=no ;;
++  *)   as_fn_error $? "bad value ${enableval} for target-optspace option" "$LINENO" 5 ;;
++ esac
++else
++  target_optspace=
++fi
++
++# Check whether --enable-malloc-debugging was given.
++if test "${enable_malloc_debugging+set}" = set; then :
++  enableval=$enable_malloc_debugging; case "${enableval}" in
++  yes) malloc_debugging=yes ;;
++  no)  malloc_debugging=no ;;
++  *)   as_fn_error $? "bad value ${enableval} for malloc-debugging option" "$LINENO" 5 ;;
++ esac
++else
++  malloc_debugging=
++fi
++
++# Check whether --enable-newlib-multithread was given.
++if test "${enable_newlib_multithread+set}" = set; then :
++  enableval=$enable_newlib_multithread; case "${enableval}" in
++  yes) newlib_multithread=yes ;;
++  no)  newlib_multithread=no ;;
++  *)   as_fn_error $? "bad value ${enableval} for newlib-multithread option" "$LINENO" 5 ;;
++ esac
++else
++  newlib_multithread=yes
++fi
++
++# Check whether --enable-newlib-iconv was given.
++if test "${enable_newlib_iconv+set}" = set; then :
++  enableval=$enable_newlib_iconv; if test "${newlib_iconv+set}" != set; then
++   case "${enableval}" in
++     yes) newlib_iconv=yes ;;
++     no)  newlib_iconv=no ;;
++     *)   as_fn_error $? "bad value ${enableval} for newlib-iconv option" "$LINENO" 5 ;;
++   esac
++ fi
++else
++  newlib_iconv=${newlib_iconv}
++fi
++
++# Check whether --enable-newlib-elix-level was given.
++if test "${enable_newlib_elix_level+set}" = set; then :
++  enableval=$enable_newlib_elix_level; case "${enableval}" in
++  0)   newlib_elix_level=0 ;;
++  1)   newlib_elix_level=1 ;;
++  2)   newlib_elix_level=2 ;;
++  3)   newlib_elix_level=3 ;;
++  4)   newlib_elix_level=4 ;;
++  *)   as_fn_error $? "bad value ${enableval} for newlib-elix-level option" "$LINENO" 5 ;;
++ esac
++else
++  newlib_elix_level=0
++fi
++
++# Check whether --enable-newlib-io-float was given.
++if test "${enable_newlib_io_float+set}" = set; then :
++  enableval=$enable_newlib_io_float; case "${enableval}" in
++  yes) newlib_io_float=yes ;;
++  no)  newlib_io_float=no ;;
++  *)   as_fn_error $? "bad value ${enableval} for newlib-io-float option" "$LINENO" 5 ;;
++ esac
++else
++  newlib_io_float=yes
++fi
++
++# Check whether --enable-newlib-supplied-syscalls was given.
++if test "${enable_newlib_supplied_syscalls+set}" = set; then :
++  enableval=$enable_newlib_supplied_syscalls; case "${enableval}" in
++  yes) newlib_may_supply_syscalls=yes ;;
++  no)  newlib_may_supply_syscalls=no ;;
++  *)   as_fn_error $? "bad value ${enableval} for newlib-supplied-syscalls option" "$LINENO" 5 ;;
++ esac
++else
++  newlib_may_supply_syscalls=yes
++fi
++
++ if test x${newlib_may_supply_syscalls} = xyes; then
++  MAY_SUPPLY_SYSCALLS_TRUE=
++  MAY_SUPPLY_SYSCALLS_FALSE='#'
++else
++  MAY_SUPPLY_SYSCALLS_TRUE='#'
++  MAY_SUPPLY_SYSCALLS_FALSE=
++fi
++
++
++# Check whether --enable-newlib-fno-builtin was given.
++if test "${enable_newlib_fno_builtin+set}" = set; then :
++  enableval=$enable_newlib_fno_builtin; case "${enableval}" in
++  yes) newlib_fno_builtin=yes ;;
++  no)  newlib_fno_builtin=no ;;
++  *)   as_fn_error $? "bad value ${enableval} for newlib-fno-builtin option" "$LINENO" 5 ;;
++ esac
++else
++  newlib_fno_builtin=
++fi
++
++
++
++test -z "${with_target_subdir}" && with_target_subdir=.
++
++if test "${srcdir}" = "."; then
++  if test "${with_target_subdir}" != "."; then
++    newlib_basedir="${srcdir}/${with_multisrctop}../../../.."
++  else
++    newlib_basedir="${srcdir}/${with_multisrctop}../../.."
++  fi
++else
++  newlib_basedir="${srcdir}/../../.."
++fi
++
++
++
++
++if test "`cd $srcdir && pwd`" != "`pwd`"; then
++  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
++  # is not polluted with repeated "-I."
++  am__isrc=' -I$(srcdir)'
++  # test to see if srcdir already configured
++  if test -f $srcdir/config.status; then
++    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
++  fi
++fi
++
++# test whether we have cygpath
++if test -z "$CYGPATH_W"; then
++  if (cygpath --version) >/dev/null 2>/dev/null; then
++    CYGPATH_W='cygpath -w'
++  else
++    CYGPATH_W=echo
++  fi
++fi
++
++
++# Define the identity of the package.
++ PACKAGE='newlib'
++ VERSION='3.1.0'
++
++
++# Some tools Automake needs.
++
++ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
++
++
++AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
++
++
++AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
++
++
++AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
++
++
++MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
++
++# We need awk for the "check" target.  The system "awk" is bad on
++# some platforms.
++# Always define AMTAR for backward compatibility.  Yes, it's still used
++# in the wild :-(  We should find a proper way to deprecate it ...
++AMTAR='$${TAR-tar}'
++
++am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
++
++
++
++
++
++
++# FIXME: We temporarily define our own version of AC_PROG_CC.  This is
++# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
++# are probably using a cross compiler, which will not be able to fully
++# link an executable.  This should really be fixed in autoconf
++# itself.
++
++
++
++
++
++
++
++# Extract the first word of "gcc", so it can be a program name with args.
++set dummy gcc; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_CC+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$CC"; then
++  ac_cv_prog_CC="$CC" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_CC="gcc"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++CC=$ac_cv_prog_CC
++if test -n "$CC"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
++$as_echo "$CC" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++
++depcc="$CC"   am_compiler_list=
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
++$as_echo_n "checking dependency style of $depcc... " >&6; }
++if ${am_cv_CC_dependencies_compiler_type+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
++  # We make a subdir and do the tests there.  Otherwise we can end up
++  # making bogus files that we don't know about and never remove.  For
++  # instance it was reported that on HP-UX the gcc test will end up
++  # making a dummy file named `D' -- because `-MD' means `put the output
++  # in D'.
++  rm -rf conftest.dir
++  mkdir conftest.dir
++  # Copy depcomp to subdir because otherwise we won't find it if we're
++  # using a relative directory.
++  cp "$am_depcomp" conftest.dir
++  cd conftest.dir
++  # We will build objects and dependencies in a subdirectory because
++  # it helps to detect inapplicable dependency modes.  For instance
++  # both Tru64's cc and ICC support -MD to output dependencies as a
++  # side effect of compilation, but ICC will put the dependencies in
++  # the current directory while Tru64 will put them in the object
++  # directory.
++  mkdir sub
++
++  am_cv_CC_dependencies_compiler_type=none
++  if test "$am_compiler_list" = ""; then
++     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
++  fi
++  am__universal=false
++  case " $depcc " in #(
++     *\ -arch\ *\ -arch\ *) am__universal=true ;;
++     esac
++
++  for depmode in $am_compiler_list; do
++    # Setup a source with many dependencies, because some compilers
++    # like to wrap large dependency lists on column 80 (with \), and
++    # we should not choose a depcomp mode which is confused by this.
++    #
++    # We need to recreate these files for each test, as the compiler may
++    # overwrite some of them when testing with obscure command lines.
++    # This happens at least with the AIX C compiler.
++    : > sub/conftest.c
++    for i in 1 2 3 4 5 6; do
++      echo '#include "conftst'$i'.h"' >> sub/conftest.c
++      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
++      # Solaris 8's {/usr,}/bin/sh.
++      touch sub/conftst$i.h
++    done
++    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
++
++    # We check with `-c' and `-o' for the sake of the "dashmstdout"
++    # mode.  It turns out that the SunPro C++ compiler does not properly
++    # handle `-M -o', and we need to detect this.  Also, some Intel
++    # versions had trouble with output in subdirs
++    am__obj=sub/conftest.${OBJEXT-o}
++    am__minus_obj="-o $am__obj"
++    case $depmode in
++    gcc)
++      # This depmode causes a compiler race in universal mode.
++      test "$am__universal" = false || continue
++      ;;
++    nosideeffect)
++      # after this tag, mechanisms are not by side-effect, so they'll
++      # only be used when explicitly requested
++      if test "x$enable_dependency_tracking" = xyes; then
++	continue
++      else
++	break
++      fi
++      ;;
++    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
++      # This compiler won't grok `-c -o', but also, the minuso test has
++      # not run yet.  These depmodes are late enough in the game, and
++      # so weak that their functioning should not be impacted.
++      am__obj=conftest.${OBJEXT-o}
++      am__minus_obj=
++      ;;
++    none) break ;;
++    esac
++    if depmode=$depmode \
++       source=sub/conftest.c object=$am__obj \
++       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
++       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
++         >/dev/null 2>conftest.err &&
++       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
++       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
++       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
++       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
++      # icc doesn't choke on unknown options, it will just issue warnings
++      # or remarks (even with -Werror).  So we grep stderr for any message
++      # that says an option was ignored or not supported.
++      # When given -MP, icc 7.0 and 7.1 complain thusly:
++      #   icc: Command line warning: ignoring option '-M'; no argument required
++      # The diagnosis changed in icc 8.0:
++      #   icc: Command line remark: option '-MP' not supported
++      if (grep 'ignoring option' conftest.err ||
++          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
++        am_cv_CC_dependencies_compiler_type=$depmode
++        break
++      fi
++    fi
++  done
++
++  cd ..
++  rm -rf conftest.dir
++else
++  am_cv_CC_dependencies_compiler_type=none
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
++$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
++CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
++
++ if
++  test "x$enable_dependency_tracking" != xno \
++  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
++  am__fastdepCC_TRUE=
++  am__fastdepCC_FALSE='#'
++else
++  am__fastdepCC_TRUE='#'
++  am__fastdepCC_FALSE=
++fi
++
++
++if test -z "$CC"; then
++  # Extract the first word of "cc", so it can be a program name with args.
++set dummy cc; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_CC+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$CC"; then
++  ac_cv_prog_CC="$CC" # Let the user override the test.
++else
++  ac_prog_rejected=no
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
++       ac_prog_rejected=yes
++       continue
++     fi
++    ac_cv_prog_CC="cc"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++if test $ac_prog_rejected = yes; then
++  # We found a bogon in the path, so make sure we never use it.
++  set dummy $ac_cv_prog_CC
++  shift
++  if test $# != 0; then
++    # We chose a different compiler from the bogus one.
++    # However, it has the same basename, so the bogon will be chosen
++    # first if we set CC to just the basename; use the full file name.
++    shift
++    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
++  fi
++fi
++fi
++fi
++CC=$ac_cv_prog_CC
++if test -n "$CC"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
++$as_echo "$CC" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++  test -z "$CC" && as_fn_error $? "no acceptable cc found in \$PATH" "$LINENO" 5
++fi
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using GNU C" >&5
++$as_echo_n "checking whether we are using GNU C... " >&6; }
++if ${ac_cv_c_compiler_gnu+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  cat > conftest.c <<EOF
++#ifdef __GNUC__
++  yes;
++#endif
++EOF
++if { ac_try='${CC-cc} -E conftest.c'
++  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; }; } | egrep yes >/dev/null 2>&1; then
++  ac_cv_c_compiler_gnu=yes
++else
++  ac_cv_c_compiler_gnu=no
++fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
++$as_echo "$ac_cv_c_compiler_gnu" >&6; }
++
++if test $ac_cv_c_compiler_gnu = yes; then
++  GCC=yes
++  ac_test_CFLAGS="${CFLAGS+set}"
++  ac_save_CFLAGS="$CFLAGS"
++  ac_test_CFLAGS=${CFLAGS+set}
++ac_save_CFLAGS=$CFLAGS
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
++$as_echo_n "checking whether $CC accepts -g... " >&6; }
++if ${ac_cv_prog_cc_g+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  ac_save_c_werror_flag=$ac_c_werror_flag
++   ac_c_werror_flag=yes
++   ac_cv_prog_cc_g=no
++   CFLAGS="-g"
++   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++  ac_cv_prog_cc_g=yes
++else
++  CFLAGS=""
++      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++
++else
++  ac_c_werror_flag=$ac_save_c_werror_flag
++	 CFLAGS="-g"
++	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++  ac_cv_prog_cc_g=yes
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++   ac_c_werror_flag=$ac_save_c_werror_flag
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
++$as_echo "$ac_cv_prog_cc_g" >&6; }
++if test "$ac_test_CFLAGS" = set; then
++  CFLAGS=$ac_save_CFLAGS
++elif test $ac_cv_prog_cc_g = yes; then
++  if test "$GCC" = yes; then
++    CFLAGS="-g -O2"
++  else
++    CFLAGS="-g"
++  fi
++else
++  if test "$GCC" = yes; then
++    CFLAGS="-O2"
++  else
++    CFLAGS=
++  fi
++fi
++  if test "$ac_test_CFLAGS" = set; then
++    CFLAGS="$ac_save_CFLAGS"
++  elif test $ac_cv_prog_cc_g = yes; then
++    CFLAGS="-g -O2"
++  else
++    CFLAGS="-O2"
++  fi
++else
++  GCC=
++  test "${CFLAGS+set}" = set || CFLAGS="-g"
++fi
++
++
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
++set dummy ${ac_tool_prefix}as; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_AS+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$AS"; then
++  ac_cv_prog_AS="$AS" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_AS="${ac_tool_prefix}as"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++AS=$ac_cv_prog_AS
++if test -n "$AS"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
++$as_echo "$AS" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_AS"; then
++  ac_ct_AS=$AS
++  # Extract the first word of "as", so it can be a program name with args.
++set dummy as; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_AS+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$ac_ct_AS"; then
++  ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_ac_ct_AS="as"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_AS=$ac_cv_prog_ac_ct_AS
++if test -n "$ac_ct_AS"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
++$as_echo "$ac_ct_AS" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++  if test "x$ac_ct_AS" = x; then
++    AS=""
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++    AS=$ac_ct_AS
++  fi
++else
++  AS="$ac_cv_prog_AS"
++fi
++
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
++set dummy ${ac_tool_prefix}ar; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_AR+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$AR"; then
++  ac_cv_prog_AR="$AR" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_AR="${ac_tool_prefix}ar"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++AR=$ac_cv_prog_AR
++if test -n "$AR"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
++$as_echo "$AR" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_AR"; then
++  ac_ct_AR=$AR
++  # Extract the first word of "ar", so it can be a program name with args.
++set dummy ar; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_AR+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$ac_ct_AR"; then
++  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_ac_ct_AR="ar"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_AR=$ac_cv_prog_ac_ct_AR
++if test -n "$ac_ct_AR"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
++$as_echo "$ac_ct_AR" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++  if test "x$ac_ct_AR" = x; then
++    AR=""
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++    AR=$ac_ct_AR
++  fi
++else
++  AR="$ac_cv_prog_AR"
++fi
++
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
++set dummy ${ac_tool_prefix}ranlib; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_RANLIB+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$RANLIB"; then
++  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++RANLIB=$ac_cv_prog_RANLIB
++if test -n "$RANLIB"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
++$as_echo "$RANLIB" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_RANLIB"; then
++  ac_ct_RANLIB=$RANLIB
++  # Extract the first word of "ranlib", so it can be a program name with args.
++set dummy ranlib; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$ac_ct_RANLIB"; then
++  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_ac_ct_RANLIB="ranlib"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
++if test -n "$ac_ct_RANLIB"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
++$as_echo "$ac_ct_RANLIB" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++  if test "x$ac_ct_RANLIB" = x; then
++    RANLIB=":"
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++    RANLIB=$ac_ct_RANLIB
++  fi
++else
++  RANLIB="$ac_cv_prog_RANLIB"
++fi
++
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}readelf", so it can be a program name with args.
++set dummy ${ac_tool_prefix}readelf; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_READELF+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$READELF"; then
++  ac_cv_prog_READELF="$READELF" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_READELF="${ac_tool_prefix}readelf"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++READELF=$ac_cv_prog_READELF
++if test -n "$READELF"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5
++$as_echo "$READELF" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_READELF"; then
++  ac_ct_READELF=$READELF
++  # Extract the first word of "readelf", so it can be a program name with args.
++set dummy readelf; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_READELF+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$ac_ct_READELF"; then
++  ac_cv_prog_ac_ct_READELF="$ac_ct_READELF" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_ac_ct_READELF="readelf"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_READELF=$ac_cv_prog_ac_ct_READELF
++if test -n "$ac_ct_READELF"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_READELF" >&5
++$as_echo "$ac_ct_READELF" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++  if test "x$ac_ct_READELF" = x; then
++    READELF=":"
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++    READELF=$ac_ct_READELF
++  fi
++else
++  READELF="$ac_cv_prog_READELF"
++fi
++
++
++
++
++# Hack to ensure that INSTALL won't be set to "../" with autoconf 2.13.  */
++ac_given_INSTALL=$INSTALL
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
++$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
++    # Check whether --enable-maintainer-mode was given.
++if test "${enable_maintainer_mode+set}" = set; then :
++  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
++else
++  USE_MAINTAINER_MODE=no
++fi
++
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
++$as_echo "$USE_MAINTAINER_MODE" >&6; }
++   if test $USE_MAINTAINER_MODE = yes; then
++  MAINTAINER_MODE_TRUE=
++  MAINTAINER_MODE_FALSE='#'
++else
++  MAINTAINER_MODE_TRUE='#'
++  MAINTAINER_MODE_FALSE=
++fi
++
++  MAINT=$MAINTAINER_MODE_TRUE
++
++
++# By default we simply use the C compiler to build assembly code.
++
++test "${CCAS+set}" = set || CCAS=$CC
++test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
++
++
++
++
++# We need AC_EXEEXT to keep automake happy in cygnus mode.  However,
++# at least currently, we never actually build a program, so we never
++# need to use $(EXEEXT).  Moreover, the test for EXEEXT normally
++# fails, because we are probably configuring with a cross compiler
++# which can't create executables.  So we include AC_EXEEXT to keep
++# automake happy, but we don't execute it, since we don't care about
++# the result.
++if false; then
++
++  dummy_var=1
++fi
++
++. ${newlib_basedir}/configure.host
++
++NEWLIB_CFLAGS=${newlib_cflags}
++
++
++NO_INCLUDE_LIST=${noinclude}
++
++
++LDFLAGS=${ldflags}
++
++
++ if test x${newlib_elix_level} = x0; then
++  ELIX_LEVEL_0_TRUE=
++  ELIX_LEVEL_0_FALSE='#'
++else
++  ELIX_LEVEL_0_TRUE='#'
++  ELIX_LEVEL_0_FALSE=
++fi
++
++ if test x${newlib_elix_level} = x1; then
++  ELIX_LEVEL_1_TRUE=
++  ELIX_LEVEL_1_FALSE='#'
++else
++  ELIX_LEVEL_1_TRUE='#'
++  ELIX_LEVEL_1_FALSE=
++fi
++
++ if test x${newlib_elix_level} = x2; then
++  ELIX_LEVEL_2_TRUE=
++  ELIX_LEVEL_2_FALSE='#'
++else
++  ELIX_LEVEL_2_TRUE='#'
++  ELIX_LEVEL_2_FALSE=
++fi
++
++ if test x${newlib_elix_level} = x3; then
++  ELIX_LEVEL_3_TRUE=
++  ELIX_LEVEL_3_FALSE='#'
++else
++  ELIX_LEVEL_3_TRUE='#'
++  ELIX_LEVEL_3_FALSE=
++fi
++
++ if test x${newlib_elix_level} = x4; then
++  ELIX_LEVEL_4_TRUE=
++  ELIX_LEVEL_4_FALSE='#'
++else
++  ELIX_LEVEL_4_TRUE='#'
++  ELIX_LEVEL_4_FALSE=
++fi
++
++
++ if test x${use_libtool} = xyes; then
++  USE_LIBTOOL_TRUE=
++  USE_LIBTOOL_FALSE='#'
++else
++  USE_LIBTOOL_TRUE='#'
++  USE_LIBTOOL_FALSE=
++fi
++
++
++# Emit any target-specific warnings.
++if test "x${newlib_msg_warn}" != "x"; then
++   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ${newlib_msg_warn}" >&5
++$as_echo "$as_me: WARNING: ${newlib_msg_warn}" >&2;}
++fi
++
++# Hard-code OBJEXT.  Normally it is set by AC_OBJEXT, but we
++# use oext, which is set in configure.host based on the target platform.
++OBJEXT=${oext}
++
++
++
++
++
++
++
++
++
++
++
++ac_config_files="$ac_config_files Makefile"
++
++cat >confcache <<\_ACEOF
++# This file is a shell script that caches the results of configure
++# tests run on this system so they can be shared between configure
++# scripts and configure runs, see configure's option --config-cache.
++# It is not useful on other systems.  If it contains results you don't
++# want to keep, you may remove or edit it.
++#
++# config.status only pays attention to the cache file if you give it
++# the --recheck option to rerun configure.
++#
++# `ac_cv_env_foo' variables (set or unset) will be overridden when
++# loading this file, other *unset* `ac_cv_foo' will be assigned the
++# following values.
++
++_ACEOF
++
++# The following way of writing the cache mishandles newlines in values,
++# but we know of no workaround that is simple, portable, and efficient.
++# So, we kill variables containing newlines.
++# Ultrix sh set writes to stderr and can't be redirected directly,
++# and sets the high bit in the cache file unless we assign to the vars.
++(
++  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
++    eval ac_val=\$$ac_var
++    case $ac_val in #(
++    *${as_nl}*)
++      case $ac_var in #(
++      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
++$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
++      esac
++      case $ac_var in #(
++      _ | IFS | as_nl) ;; #(
++      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
++      *) { eval $ac_var=; unset $ac_var;} ;;
++      esac ;;
++    esac
++  done
++
++  (set) 2>&1 |
++    case $as_nl`(ac_space=' '; set) 2>&1` in #(
++    *${as_nl}ac_space=\ *)
++      # `set' does not quote correctly, so add quotes: double-quote
++      # substitution turns \\\\ into \\, and sed turns \\ into \.
++      sed -n \
++	"s/'/'\\\\''/g;
++	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
++      ;; #(
++    *)
++      # `set' quotes correctly as required by POSIX, so do not add quotes.
++      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
++      ;;
++    esac |
++    sort
++) |
++  sed '
++     /^ac_cv_env_/b end
++     t clear
++     :clear
++     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
++     t end
++     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
++     :end' >>confcache
++if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
++  if test -w "$cache_file"; then
++    if test "x$cache_file" != "x/dev/null"; then
++      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
++$as_echo "$as_me: updating cache $cache_file" >&6;}
++      if test ! -f "$cache_file" || test -h "$cache_file"; then
++	cat confcache >"$cache_file"
++      else
++        case $cache_file in #(
++        */* | ?:*)
++	  mv -f confcache "$cache_file"$$ &&
++	  mv -f "$cache_file"$$ "$cache_file" ;; #(
++        *)
++	  mv -f confcache "$cache_file" ;;
++	esac
++      fi
++    fi
++  else
++    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
++$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
++  fi
++fi
++rm -f confcache
++
++test "x$prefix" = xNONE && prefix=$ac_default_prefix
++# Let make expand exec_prefix.
++test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
++
++# Transform confdefs.h into DEFS.
++# Protect against shell expansion while executing Makefile rules.
++# Protect against Makefile macro expansion.
++#
++# If the first sed substitution is executed (which looks for macros that
++# take arguments), then branch to the quote section.  Otherwise,
++# look for a macro that doesn't take arguments.
++ac_script='
++:mline
++/\\$/{
++ N
++ s,\\\n,,
++ b mline
++}
++t clear
++:clear
++s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*([^)]*)\)[	 ]*\(.*\)/-D\1=\2/g
++t quote
++s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)/-D\1=\2/g
++t quote
++b any
++:quote
++s/[	 `~#$^&*(){}\\|;'\''"<>?]/\\&/g
++s/\[/\\&/g
++s/\]/\\&/g
++s/\$/$$/g
++H
++:any
++${
++	g
++	s/^\n//
++	s/\n/ /g
++	p
++}
++'
++DEFS=`sed -n "$ac_script" confdefs.h`
++
++
++ac_libobjs=
++ac_ltlibobjs=
++U=
++for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
++  # 1. Remove the extension, and $U if already installed.
++  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
++  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
++  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
++  #    will be set to the directory where LIBOBJS objects are built.
++  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
++  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
++done
++LIBOBJS=$ac_libobjs
++
++LTLIBOBJS=$ac_ltlibobjs
++
++
++if test -z "${MAY_SUPPLY_SYSCALLS_TRUE}" && test -z "${MAY_SUPPLY_SYSCALLS_FALSE}"; then
++  as_fn_error $? "conditional \"MAY_SUPPLY_SYSCALLS\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++
++if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
++  as_fn_error $? "conditional \"AMDEP\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
++  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
++  as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${ELIX_LEVEL_0_TRUE}" && test -z "${ELIX_LEVEL_0_FALSE}"; then
++  as_fn_error $? "conditional \"ELIX_LEVEL_0\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${ELIX_LEVEL_1_TRUE}" && test -z "${ELIX_LEVEL_1_FALSE}"; then
++  as_fn_error $? "conditional \"ELIX_LEVEL_1\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${ELIX_LEVEL_2_TRUE}" && test -z "${ELIX_LEVEL_2_FALSE}"; then
++  as_fn_error $? "conditional \"ELIX_LEVEL_2\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${ELIX_LEVEL_3_TRUE}" && test -z "${ELIX_LEVEL_3_FALSE}"; then
++  as_fn_error $? "conditional \"ELIX_LEVEL_3\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${ELIX_LEVEL_4_TRUE}" && test -z "${ELIX_LEVEL_4_FALSE}"; then
++  as_fn_error $? "conditional \"ELIX_LEVEL_4\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${USE_LIBTOOL_TRUE}" && test -z "${USE_LIBTOOL_FALSE}"; then
++  as_fn_error $? "conditional \"USE_LIBTOOL\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++
++: "${CONFIG_STATUS=./config.status}"
++ac_write_fail=0
++ac_clean_files_save=$ac_clean_files
++ac_clean_files="$ac_clean_files $CONFIG_STATUS"
++{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
++$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
++as_write_fail=0
++cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
++#! $SHELL
++# Generated by $as_me.
++# Run this file to recreate the current configuration.
++# Compiler output produced by configure, useful for debugging
++# configure, is in config.log if it exists.
++
++debug=false
++ac_cs_recheck=false
++ac_cs_silent=false
++
++SHELL=\${CONFIG_SHELL-$SHELL}
++export SHELL
++_ASEOF
++cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
++## -------------------- ##
++## M4sh Initialization. ##
++## -------------------- ##
++
++# Be more Bourne compatible
++DUALCASE=1; export DUALCASE # for MKS sh
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
++  emulate sh
++  NULLCMD=:
++  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
++  # is contrary to our usage.  Disable this feature.
++  alias -g '${1+"$@"}'='"$@"'
++  setopt NO_GLOB_SUBST
++else
++  case `(set -o) 2>/dev/null` in #(
++  *posix*) :
++    set -o posix ;; #(
++  *) :
++     ;;
++esac
++fi
++
++
++as_nl='
++'
++export as_nl
++# Printing a long string crashes Solaris 7 /usr/bin/printf.
++as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
++as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
++as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
++# Prefer a ksh shell builtin over an external printf program on Solaris,
++# but without wasting forks for bash or zsh.
++if test -z "$BASH_VERSION$ZSH_VERSION" \
++    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
++  as_echo='print -r --'
++  as_echo_n='print -rn --'
++elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
++  as_echo='printf %s\n'
++  as_echo_n='printf %s'
++else
++  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
++    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
++    as_echo_n='/usr/ucb/echo -n'
++  else
++    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
++    as_echo_n_body='eval
++      arg=$1;
++      case $arg in #(
++      *"$as_nl"*)
++	expr "X$arg" : "X\\(.*\\)$as_nl";
++	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
++      esac;
++      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
++    '
++    export as_echo_n_body
++    as_echo_n='sh -c $as_echo_n_body as_echo'
++  fi
++  export as_echo_body
++  as_echo='sh -c $as_echo_body as_echo'
++fi
++
++# The user is always right.
++if test "${PATH_SEPARATOR+set}" != set; then
++  PATH_SEPARATOR=:
++  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
++    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
++      PATH_SEPARATOR=';'
++  }
++fi
++
++
++# IFS
++# We need space, tab and new line, in precisely that order.  Quoting is
++# there to prevent editors from complaining about space-tab.
++# (If _AS_PATH_WALK were called with IFS unset, it would disable word
++# splitting by setting IFS to empty value.)
++IFS=" ""	$as_nl"
++
++# Find who we are.  Look in the path if we contain no directory separator.
++as_myself=
++case $0 in #((
++  *[\\/]* ) as_myself=$0 ;;
++  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
++  done
++IFS=$as_save_IFS
++
++     ;;
++esac
++# We did not find ourselves, most probably we were run as `sh COMMAND'
++# in which case we are not to be found in the path.
++if test "x$as_myself" = x; then
++  as_myself=$0
++fi
++if test ! -f "$as_myself"; then
++  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
++  exit 1
++fi
++
++# Unset variables that we do not need and which cause bugs (e.g. in
++# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
++# suppresses any "Segmentation fault" message there.  '((' could
++# trigger a bug in pdksh 5.2.14.
++for as_var in BASH_ENV ENV MAIL MAILPATH
++do eval test x\${$as_var+set} = xset \
++  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
++done
++PS1='$ '
++PS2='> '
++PS4='+ '
++
++# NLS nuisances.
++LC_ALL=C
++export LC_ALL
++LANGUAGE=C
++export LANGUAGE
++
++# CDPATH.
++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
++
++
++# as_fn_error STATUS ERROR [LINENO LOG_FD]
++# ----------------------------------------
++# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
++# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
++# script with STATUS, using 1 if that was 0.
++as_fn_error ()
++{
++  as_status=$1; test $as_status -eq 0 && as_status=1
++  if test "$4"; then
++    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
++  fi
++  $as_echo "$as_me: error: $2" >&2
++  as_fn_exit $as_status
++} # as_fn_error
++
++
++# as_fn_set_status STATUS
++# -----------------------
++# Set $? to STATUS, without forking.
++as_fn_set_status ()
++{
++  return $1
++} # as_fn_set_status
++
++# as_fn_exit STATUS
++# -----------------
++# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
++as_fn_exit ()
++{
++  set +e
++  as_fn_set_status $1
++  exit $1
++} # as_fn_exit
++
++# as_fn_unset VAR
++# ---------------
++# Portably unset VAR.
++as_fn_unset ()
++{
++  { eval $1=; unset $1;}
++}
++as_unset=as_fn_unset
++# as_fn_append VAR VALUE
++# ----------------------
++# Append the text in VALUE to the end of the definition contained in VAR. Take
++# advantage of any shell optimizations that allow amortized linear growth over
++# repeated appends, instead of the typical quadratic growth present in naive
++# implementations.
++if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
++  eval 'as_fn_append ()
++  {
++    eval $1+=\$2
++  }'
++else
++  as_fn_append ()
++  {
++    eval $1=\$$1\$2
++  }
++fi # as_fn_append
++
++# as_fn_arith ARG...
++# ------------------
++# Perform arithmetic evaluation on the ARGs, and store the result in the
++# global $as_val. Take advantage of shells that can avoid forks. The arguments
++# must be portable across $(()) and expr.
++if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
++  eval 'as_fn_arith ()
++  {
++    as_val=$(( $* ))
++  }'
++else
++  as_fn_arith ()
++  {
++    as_val=`expr "$@" || test $? -eq 1`
++  }
++fi # as_fn_arith
++
++
++if expr a : '\(a\)' >/dev/null 2>&1 &&
++   test "X`expr 00001 : '.*\(...\)'`" = X001; then
++  as_expr=expr
++else
++  as_expr=false
++fi
++
++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
++  as_basename=basename
++else
++  as_basename=false
++fi
++
++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
++  as_dirname=dirname
++else
++  as_dirname=false
++fi
++
++as_me=`$as_basename -- "$0" ||
++$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
++	 X"$0" : 'X\(//\)$' \| \
++	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X/"$0" |
++    sed '/^.*\/\([^/][^/]*\)\/*$/{
++	    s//\1/
++	    q
++	  }
++	  /^X\/\(\/\/\)$/{
++	    s//\1/
++	    q
++	  }
++	  /^X\/\(\/\).*/{
++	    s//\1/
++	    q
++	  }
++	  s/.*/./; q'`
++
++# Avoid depending upon Character Ranges.
++as_cr_letters='abcdefghijklmnopqrstuvwxyz'
++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
++as_cr_Letters=$as_cr_letters$as_cr_LETTERS
++as_cr_digits='0123456789'
++as_cr_alnum=$as_cr_Letters$as_cr_digits
++
++ECHO_C= ECHO_N= ECHO_T=
++case `echo -n x` in #(((((
++-n*)
++  case `echo 'xy\c'` in
++  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
++  xy)  ECHO_C='\c';;
++  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
++       ECHO_T='	';;
++  esac;;
++*)
++  ECHO_N='-n';;
++esac
++
++rm -f conf$$ conf$$.exe conf$$.file
++if test -d conf$$.dir; then
++  rm -f conf$$.dir/conf$$.file
++else
++  rm -f conf$$.dir
++  mkdir conf$$.dir 2>/dev/null
++fi
++if (echo >conf$$.file) 2>/dev/null; then
++  if ln -s conf$$.file conf$$ 2>/dev/null; then
++    as_ln_s='ln -s'
++    # ... but there are two gotchas:
++    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
++    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
++    # In both cases, we have to default to `cp -p'.
++    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
++      as_ln_s='cp -p'
++  elif ln conf$$.file conf$$ 2>/dev/null; then
++    as_ln_s=ln
++  else
++    as_ln_s='cp -p'
++  fi
++else
++  as_ln_s='cp -p'
++fi
++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
++rmdir conf$$.dir 2>/dev/null
++
++
++# as_fn_mkdir_p
++# -------------
++# Create "$as_dir" as a directory, including parents if necessary.
++as_fn_mkdir_p ()
++{
++
++  case $as_dir in #(
++  -*) as_dir=./$as_dir;;
++  esac
++  test -d "$as_dir" || eval $as_mkdir_p || {
++    as_dirs=
++    while :; do
++      case $as_dir in #(
++      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
++      *) as_qdir=$as_dir;;
++      esac
++      as_dirs="'$as_qdir' $as_dirs"
++      as_dir=`$as_dirname -- "$as_dir" ||
++$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++	 X"$as_dir" : 'X\(//\)[^/]' \| \
++	 X"$as_dir" : 'X\(//\)$' \| \
++	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X"$as_dir" |
++    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\/\)[^/].*/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\/\)$/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\).*/{
++	    s//\1/
++	    q
++	  }
++	  s/.*/./; q'`
++      test -d "$as_dir" && break
++    done
++    test -z "$as_dirs" || eval "mkdir $as_dirs"
++  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
++
++
++} # as_fn_mkdir_p
++if mkdir -p . 2>/dev/null; then
++  as_mkdir_p='mkdir -p "$as_dir"'
++else
++  test -d ./-p && rmdir ./-p
++  as_mkdir_p=false
++fi
++
++if test -x / >/dev/null 2>&1; then
++  as_test_x='test -x'
++else
++  if ls -dL / >/dev/null 2>&1; then
++    as_ls_L_option=L
++  else
++    as_ls_L_option=
++  fi
++  as_test_x='
++    eval sh -c '\''
++      if test -d "$1"; then
++	test -d "$1/.";
++      else
++	case $1 in #(
++	-*)set "./$1";;
++	esac;
++	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
++	???[sx]*):;;*)false;;esac;fi
++    '\'' sh
++  '
++fi
++as_executable_p=$as_test_x
++
++# Sed expression to map a string onto a valid CPP name.
++as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
++
++# Sed expression to map a string onto a valid variable name.
++as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
++
++
++exec 6>&1
++## ----------------------------------- ##
++## Main body of $CONFIG_STATUS script. ##
++## ----------------------------------- ##
++_ASEOF
++test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
++
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++# Save the log message, to keep $0 and so on meaningful, and to
++# report actual input values of CONFIG_FILES etc. instead of their
++# values after options handling.
++ac_log="
++This file was extended by newlib $as_me 3.1.0, which was
++generated by GNU Autoconf 2.68.  Invocation command line was
++
++  CONFIG_FILES    = $CONFIG_FILES
++  CONFIG_HEADERS  = $CONFIG_HEADERS
++  CONFIG_LINKS    = $CONFIG_LINKS
++  CONFIG_COMMANDS = $CONFIG_COMMANDS
++  $ $0 $@
++
++on `(hostname || uname -n) 2>/dev/null | sed 1q`
++"
++
++_ACEOF
++
++case $ac_config_files in *"
++"*) set x $ac_config_files; shift; ac_config_files=$*;;
++esac
++
++
++
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++# Files that config.status was made for.
++config_files="$ac_config_files"
++config_commands="$ac_config_commands"
++
++_ACEOF
++
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++ac_cs_usage="\
++\`$as_me' instantiates files and other configuration actions
++from templates according to the current configuration.  Unless the files
++and actions are specified as TAGs, all are instantiated by default.
++
++Usage: $0 [OPTION]... [TAG]...
++
++  -h, --help       print this help, then exit
++  -V, --version    print version number and configuration settings, then exit
++      --config     print configuration, then exit
++  -q, --quiet, --silent
++                   do not print progress messages
++  -d, --debug      don't remove temporary files
++      --recheck    update $as_me by reconfiguring in the same conditions
++      --file=FILE[:TEMPLATE]
++                   instantiate the configuration file FILE
++
++Configuration files:
++$config_files
++
++Configuration commands:
++$config_commands
++
++Report bugs to the package provider."
++
++_ACEOF
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
++ac_cs_version="\\
++newlib config.status 3.1.0
++configured by $0, generated by GNU Autoconf 2.68,
++  with options \\"\$ac_cs_config\\"
++
++Copyright (C) 2010 Free Software Foundation, Inc.
++This config.status script is free software; the Free Software Foundation
++gives unlimited permission to copy, distribute and modify it."
++
++ac_pwd='$ac_pwd'
++srcdir='$srcdir'
++INSTALL='$INSTALL'
++MKDIR_P='$MKDIR_P'
++AWK='$AWK'
++test -n "\$AWK" || AWK=awk
++_ACEOF
++
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++# The default lists apply if the user does not specify any file.
++ac_need_defaults=:
++while test $# != 0
++do
++  case $1 in
++  --*=?*)
++    ac_option=`expr "X$1" : 'X\([^=]*\)='`
++    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
++    ac_shift=:
++    ;;
++  --*=)
++    ac_option=`expr "X$1" : 'X\([^=]*\)='`
++    ac_optarg=
++    ac_shift=:
++    ;;
++  *)
++    ac_option=$1
++    ac_optarg=$2
++    ac_shift=shift
++    ;;
++  esac
++
++  case $ac_option in
++  # Handling of the options.
++  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
++    ac_cs_recheck=: ;;
++  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
++    $as_echo "$ac_cs_version"; exit ;;
++  --config | --confi | --conf | --con | --co | --c )
++    $as_echo "$ac_cs_config"; exit ;;
++  --debug | --debu | --deb | --de | --d | -d )
++    debug=: ;;
++  --file | --fil | --fi | --f )
++    $ac_shift
++    case $ac_optarg in
++    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
++    '') as_fn_error $? "missing file argument" ;;
++    esac
++    as_fn_append CONFIG_FILES " '$ac_optarg'"
++    ac_need_defaults=false;;
++  --he | --h |  --help | --hel | -h )
++    $as_echo "$ac_cs_usage"; exit ;;
++  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
++  | -silent | --silent | --silen | --sile | --sil | --si | --s)
++    ac_cs_silent=: ;;
++
++  # This is an error.
++  -*) as_fn_error $? "unrecognized option: \`$1'
++Try \`$0 --help' for more information." ;;
++
++  *) as_fn_append ac_config_targets " $1"
++     ac_need_defaults=false ;;
++
++  esac
++  shift
++done
++
++ac_configure_extra_args=
++
++if $ac_cs_silent; then
++  exec 6>/dev/null
++  ac_configure_extra_args="$ac_configure_extra_args --silent"
++fi
++
++_ACEOF
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++if \$ac_cs_recheck; then
++  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
++  shift
++  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
++  CONFIG_SHELL='$SHELL'
++  export CONFIG_SHELL
++  exec "\$@"
++fi
++
++_ACEOF
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++exec 5>>config.log
++{
++  echo
++  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
++## Running $as_me. ##
++_ASBOX
++  $as_echo "$ac_log"
++} >&5
++
++_ACEOF
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++#
++# INIT-COMMANDS
++#
++AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
++
++_ACEOF
++
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++
++# Handling of arguments.
++for ac_config_target in $ac_config_targets
++do
++  case $ac_config_target in
++    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
++    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
++
++  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
++  esac
++done
++
++
++# If the user did not use the arguments to specify the items to instantiate,
++# then the envvar interface is used.  Set only those that are not.
++# We use the long form for the default assignment because of an extremely
++# bizarre bug on SunOS 4.1.3.
++if $ac_need_defaults; then
++  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
++  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
++fi
++
++# Have a temporary directory for convenience.  Make it in the build tree
++# simply because there is no reason against having it here, and in addition,
++# creating and moving files from /tmp can sometimes cause problems.
++# Hook for its removal unless debugging.
++# Note that there is a small window in which the directory will not be cleaned:
++# after its creation but before its name has been assigned to `$tmp'.
++$debug ||
++{
++  tmp= ac_tmp=
++  trap 'exit_status=$?
++  : "${ac_tmp:=$tmp}"
++  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
++' 0
++  trap 'as_fn_exit 1' 1 2 13 15
++}
++# Create a (secure) tmp directory for tmp files.
++
++{
++  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
++  test -d "$tmp"
++}  ||
++{
++  tmp=./conf$$-$RANDOM
++  (umask 077 && mkdir "$tmp")
++} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
++ac_tmp=$tmp
++
++# Set up the scripts for CONFIG_FILES section.
++# No need to generate them if there are no CONFIG_FILES.
++# This happens for instance with `./config.status config.h'.
++if test -n "$CONFIG_FILES"; then
++
++
++ac_cr=`echo X | tr X '\015'`
++# On cygwin, bash can eat \r inside `` if the user requested igncr.
++# But we know of no other shell where ac_cr would be empty at this
++# point, so we can use a bashism as a fallback.
++if test "x$ac_cr" = x; then
++  eval ac_cr=\$\'\\r\'
++fi
++ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
++if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
++  ac_cs_awk_cr='\\r'
++else
++  ac_cs_awk_cr=$ac_cr
++fi
++
++echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
++_ACEOF
++
++
++{
++  echo "cat >conf$$subs.awk <<_ACEOF" &&
++  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
++  echo "_ACEOF"
++} >conf$$subs.sh ||
++  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
++ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
++ac_delim='%!_!# '
++for ac_last_try in false false false false false :; do
++  . ./conf$$subs.sh ||
++    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
++
++  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
++  if test $ac_delim_n = $ac_delim_num; then
++    break
++  elif $ac_last_try; then
++    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
++  else
++    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
++  fi
++done
++rm -f conf$$subs.sh
++
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
++_ACEOF
++sed -n '
++h
++s/^/S["/; s/!.*/"]=/
++p
++g
++s/^[^!]*!//
++:repl
++t repl
++s/'"$ac_delim"'$//
++t delim
++:nl
++h
++s/\(.\{148\}\)..*/\1/
++t more1
++s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
++p
++n
++b repl
++:more1
++s/["\\]/\\&/g; s/^/"/; s/$/"\\/
++p
++g
++s/.\{148\}//
++t nl
++:delim
++h
++s/\(.\{148\}\)..*/\1/
++t more2
++s/["\\]/\\&/g; s/^/"/; s/$/"/
++p
++b
++:more2
++s/["\\]/\\&/g; s/^/"/; s/$/"\\/
++p
++g
++s/.\{148\}//
++t delim
++' <conf$$subs.awk | sed '
++/^[^""]/{
++  N
++  s/\n//
++}
++' >>$CONFIG_STATUS || ac_write_fail=1
++rm -f conf$$subs.awk
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++_ACAWK
++cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
++  for (key in S) S_is_set[key] = 1
++  FS = ""
++
++}
++{
++  line = $ 0
++  nfields = split(line, field, "@")
++  substed = 0
++  len = length(field[1])
++  for (i = 2; i < nfields; i++) {
++    key = field[i]
++    keylen = length(key)
++    if (S_is_set[key]) {
++      value = S[key]
++      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
++      len += length(value) + length(field[++i])
++      substed = 1
++    } else
++      len += 1 + keylen
++  }
++
++  print line
++}
++
++_ACAWK
++_ACEOF
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
++  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
++else
++  cat
++fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
++  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
++_ACEOF
++
++# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
++# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
++# trailing colons and then remove the whole line if VPATH becomes empty
++# (actually we leave an empty line to preserve line numbers).
++if test "x$srcdir" = x.; then
++  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
++h
++s///
++s/^/:/
++s/[	 ]*$/:/
++s/:\$(srcdir):/:/g
++s/:\${srcdir}:/:/g
++s/:@srcdir@:/:/g
++s/^:*//
++s/:*$//
++x
++s/\(=[	 ]*\).*/\1/
++G
++s/\n//
++s/^[^=]*=[	 ]*$//
++}'
++fi
++
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++fi # test -n "$CONFIG_FILES"
++
++
++eval set X "  :F $CONFIG_FILES      :C $CONFIG_COMMANDS"
++shift
++for ac_tag
++do
++  case $ac_tag in
++  :[FHLC]) ac_mode=$ac_tag; continue;;
++  esac
++  case $ac_mode$ac_tag in
++  :[FHL]*:*);;
++  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
++  :[FH]-) ac_tag=-:-;;
++  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
++  esac
++  ac_save_IFS=$IFS
++  IFS=:
++  set x $ac_tag
++  IFS=$ac_save_IFS
++  shift
++  ac_file=$1
++  shift
++
++  case $ac_mode in
++  :L) ac_source=$1;;
++  :[FH])
++    ac_file_inputs=
++    for ac_f
++    do
++      case $ac_f in
++      -) ac_f="$ac_tmp/stdin";;
++      *) # Look for the file first in the build tree, then in the source tree
++	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
++	 # because $ac_f cannot contain `:'.
++	 test -f "$ac_f" ||
++	   case $ac_f in
++	   [\\/$]*) false;;
++	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
++	   esac ||
++	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
++      esac
++      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
++      as_fn_append ac_file_inputs " '$ac_f'"
++    done
++
++    # Let's still pretend it is `configure' which instantiates (i.e., don't
++    # use $as_me), people would be surprised to read:
++    #    /* config.h.  Generated by config.status.  */
++    configure_input='Generated from '`
++	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
++	`' by configure.'
++    if test x"$ac_file" != x-; then
++      configure_input="$ac_file.  $configure_input"
++      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
++$as_echo "$as_me: creating $ac_file" >&6;}
++    fi
++    # Neutralize special characters interpreted by sed in replacement strings.
++    case $configure_input in #(
++    *\&* | *\|* | *\\* )
++       ac_sed_conf_input=`$as_echo "$configure_input" |
++       sed 's/[\\\\&|]/\\\\&/g'`;; #(
++    *) ac_sed_conf_input=$configure_input;;
++    esac
++
++    case $ac_tag in
++    *:-:* | *:-) cat >"$ac_tmp/stdin" \
++      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
++    esac
++    ;;
++  esac
++
++  ac_dir=`$as_dirname -- "$ac_file" ||
++$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++	 X"$ac_file" : 'X\(//\)[^/]' \| \
++	 X"$ac_file" : 'X\(//\)$' \| \
++	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X"$ac_file" |
++    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\/\)[^/].*/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\/\)$/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\).*/{
++	    s//\1/
++	    q
++	  }
++	  s/.*/./; q'`
++  as_dir="$ac_dir"; as_fn_mkdir_p
++  ac_builddir=.
++
++case "$ac_dir" in
++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
++*)
++  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
++  # A ".." for each directory in $ac_dir_suffix.
++  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
++  case $ac_top_builddir_sub in
++  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
++  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
++  esac ;;
++esac
++ac_abs_top_builddir=$ac_pwd
++ac_abs_builddir=$ac_pwd$ac_dir_suffix
++# for backward compatibility:
++ac_top_builddir=$ac_top_build_prefix
++
++case $srcdir in
++  .)  # We are building in place.
++    ac_srcdir=.
++    ac_top_srcdir=$ac_top_builddir_sub
++    ac_abs_top_srcdir=$ac_pwd ;;
++  [\\/]* | ?:[\\/]* )  # Absolute name.
++    ac_srcdir=$srcdir$ac_dir_suffix;
++    ac_top_srcdir=$srcdir
++    ac_abs_top_srcdir=$srcdir ;;
++  *) # Relative name.
++    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
++    ac_top_srcdir=$ac_top_build_prefix$srcdir
++    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
++esac
++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
++
++
++  case $ac_mode in
++  :F)
++  #
++  # CONFIG_FILE
++  #
++
++  case $INSTALL in
++  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
++  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
++  esac
++  ac_MKDIR_P=$MKDIR_P
++  case $MKDIR_P in
++  [\\/$]* | ?:[\\/]* ) ;;
++  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
++  esac
++_ACEOF
++
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++# If the template does not know about datarootdir, expand it.
++# FIXME: This hack should be removed a few years after 2.60.
++ac_datarootdir_hack=; ac_datarootdir_seen=
++ac_sed_dataroot='
++/datarootdir/ {
++  p
++  q
++}
++/@datadir@/p
++/@docdir@/p
++/@infodir@/p
++/@localedir@/p
++/@mandir@/p'
++case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
++*datarootdir*) ac_datarootdir_seen=yes;;
++*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
++  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
++$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
++_ACEOF
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++  ac_datarootdir_hack='
++  s&@datadir@&$datadir&g
++  s&@docdir@&$docdir&g
++  s&@infodir@&$infodir&g
++  s&@localedir@&$localedir&g
++  s&@mandir@&$mandir&g
++  s&\\\${datarootdir}&$datarootdir&g' ;;
++esac
++_ACEOF
++
++# Neutralize VPATH when `$srcdir' = `.'.
++# Shell code in configure.ac might set extrasub.
++# FIXME: do we really want to maintain this feature?
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++ac_sed_extra="$ac_vpsub
++$extrasub
++_ACEOF
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++:t
++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
++s|@configure_input@|$ac_sed_conf_input|;t t
++s&@top_builddir@&$ac_top_builddir_sub&;t t
++s&@top_build_prefix@&$ac_top_build_prefix&;t t
++s&@srcdir@&$ac_srcdir&;t t
++s&@abs_srcdir@&$ac_abs_srcdir&;t t
++s&@top_srcdir@&$ac_top_srcdir&;t t
++s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
++s&@builddir@&$ac_builddir&;t t
++s&@abs_builddir@&$ac_abs_builddir&;t t
++s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
++s&@INSTALL@&$ac_INSTALL&;t t
++s&@MKDIR_P@&$ac_MKDIR_P&;t t
++$ac_datarootdir_hack
++"
++eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
++  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
++
++test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
++  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
++  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
++      "$ac_tmp/out"`; test -z "$ac_out"; } &&
++  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
++which seems to be undefined.  Please make sure it is defined" >&5
++$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
++which seems to be undefined.  Please make sure it is defined" >&2;}
++
++  rm -f "$ac_tmp/stdin"
++  case $ac_file in
++  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
++  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
++  esac \
++  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
++ ;;
++
++
++  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
++$as_echo "$as_me: executing $ac_file commands" >&6;}
++ ;;
++  esac
++
++
++  case $ac_file$ac_mode in
++    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
++  # Autoconf 2.62 quotes --file arguments for eval, but not when files
++  # are listed without --file.  Let's play safe and only enable the eval
++  # if we detect the quoting.
++  case $CONFIG_FILES in
++  *\'*) eval set x "$CONFIG_FILES" ;;
++  *)   set x $CONFIG_FILES ;;
++  esac
++  shift
++  for mf
++  do
++    # Strip MF so we end up with the name of the file.
++    mf=`echo "$mf" | sed -e 's/:.*$//'`
++    # Check whether this is an Automake generated Makefile or not.
++    # We used to match only the files named `Makefile.in', but
++    # some people rename them; so instead we look at the file content.
++    # Grep'ing the first line is not enough: some people post-process
++    # each Makefile.in and add a new line on top of each file to say so.
++    # Grep'ing the whole file is not good either: AIX grep has a line
++    # limit of 2048, but all sed's we know have understand at least 4000.
++    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
++      dirpart=`$as_dirname -- "$mf" ||
++$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++	 X"$mf" : 'X\(//\)[^/]' \| \
++	 X"$mf" : 'X\(//\)$' \| \
++	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X"$mf" |
++    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\/\)[^/].*/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\/\)$/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\).*/{
++	    s//\1/
++	    q
++	  }
++	  s/.*/./; q'`
++    else
++      continue
++    fi
++    # Extract the definition of DEPDIR, am__include, and am__quote
++    # from the Makefile without running `make'.
++    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
++    test -z "$DEPDIR" && continue
++    am__include=`sed -n 's/^am__include = //p' < "$mf"`
++    test -z "am__include" && continue
++    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
++    # When using ansi2knr, U may be empty or an underscore; expand it
++    U=`sed -n 's/^U = //p' < "$mf"`
++    # Find all dependency output files, they are included files with
++    # $(DEPDIR) in their names.  We invoke sed twice because it is the
++    # simplest approach to changing $(DEPDIR) to its actual value in the
++    # expansion.
++    for file in `sed -n "
++      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
++	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
++      # Make sure the directory exists.
++      test -f "$dirpart/$file" && continue
++      fdir=`$as_dirname -- "$file" ||
++$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++	 X"$file" : 'X\(//\)[^/]' \| \
++	 X"$file" : 'X\(//\)$' \| \
++	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X"$file" |
++    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\/\)[^/].*/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\/\)$/{
++	    s//\1/
++	    q
++	  }
++	  /^X\(\/\).*/{
++	    s//\1/
++	    q
++	  }
++	  s/.*/./; q'`
++      as_dir=$dirpart/$fdir; as_fn_mkdir_p
++      # echo "creating $dirpart/$file"
++      echo '# dummy' > "$dirpart/$file"
++    done
++  done
++}
++ ;;
++
++  esac
++done # for ac_tag
++
++
++as_fn_exit 0
++_ACEOF
++ac_clean_files=$ac_clean_files_save
++
++test $ac_write_fail = 0 ||
++  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
++
++
++# configure is writing to config.log, and then calls config.status.
++# config.status does its own redirection, appending to config.log.
++# Unfortunately, on DOS this fails, as config.log is still kept open
++# by configure, so config.status won't be able to write to it; its
++# output is simply discarded.  So we exec the FD to /dev/null,
++# effectively closing config.log, so it can be properly (re)opened and
++# appended to by config.status.  When coming back to configure, we
++# need to make the FD available again.
++if test "$no_create" != yes; then
++  ac_cs_success=:
++  ac_config_status_args=
++  test "$silent" = yes &&
++    ac_config_status_args="$ac_config_status_args --quiet"
++  exec 5>/dev/null
++  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
++  exec 5>>config.log
++  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
++  # would make configure fail if this is the last instruction.
++  $ac_cs_success || as_fn_exit 1
++fi
++if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
++$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
++fi
++
+diff -ruN newlib-3.1.0-old/newlib/libc/sys/miosix/configure.in newlib-3.1.0/newlib/libc/sys/miosix/configure.in
+--- newlib-3.1.0-old/newlib/libc/sys/miosix/configure.in	1970-01-01 01:00:00.000000000 +0100
++++ newlib-3.1.0/newlib/libc/sys/miosix/configure.in	2024-07-26 22:02:58.649581998 +0200
+@@ -0,0 +1,14 @@
++dnl This is the newlib/libc/sys/miosix 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([termios.c])
++
++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-3.1.0-old/newlib/libc/sys/miosix/crt0.c newlib-3.1.0/newlib/libc/sys/miosix/crt0.c
+--- newlib-3.1.0-old/newlib/libc/sys/miosix/crt0.c	1970-01-01 01:00:00.000000000 +0100
++++ newlib-3.1.0/newlib/libc/sys/miosix/crt0.c	2024-07-26 22:02:58.653582053 +0200
+@@ -0,0 +1,4 @@
++/*
++ * This file is currently empty but is still required as a crt0.o
++ * is expected by the newlib build system.
++ */
+diff -ruN newlib-3.1.0-old/newlib/libc/sys/miosix/Makefile.am newlib-3.1.0/newlib/libc/sys/miosix/Makefile.am
+--- newlib-3.1.0-old/newlib/libc/sys/miosix/Makefile.am	1970-01-01 01:00:00.000000000 +0100
++++ newlib-3.1.0/newlib/libc/sys/miosix/Makefile.am	2024-07-26 22:02:58.653582053 +0200
+@@ -0,0 +1,18 @@
++## 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 = termios.c stubs.c
++lib_a_CCASFLAGS = $(AM_CCASFLAGS)
++lib_a_CFLAGS = $(AM_CFLAGS)
++
++all-local: crt0.o
++
++ACLOCAL_AMFLAGS = -I ../../.. -I ../../../..
++CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
+diff -ruN newlib-3.1.0-old/newlib/libc/sys/miosix/Makefile.in newlib-3.1.0/newlib/libc/sys/miosix/Makefile.in
+--- newlib-3.1.0-old/newlib/libc/sys/miosix/Makefile.in	1970-01-01 01:00:00.000000000 +0100
++++ newlib-3.1.0/newlib/libc/sys/miosix/Makefile.in	2024-07-26 22:02:58.653582053 +0200
+@@ -0,0 +1,446 @@
++# Makefile.in generated by automake 1.11.6 from Makefile.am.
++# @configure_input@
++
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
++# Foundation, Inc.
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
++# PARTICULAR PURPOSE.
++
++@SET_MAKE@
++
++VPATH = @srcdir@
++am__make_dryrun = \
++  { \
++    am__dry=no; \
++    case $$MAKEFLAGS in \
++      *\\[\ \	]*) \
++        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
++          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
++      *) \
++        for am__flg in $$MAKEFLAGS; do \
++          case $$am__flg in \
++            *=*|--*) ;; \
++            *n*) am__dry=yes; break;; \
++          esac; \
++        done;; \
++    esac; \
++    test $$am__dry = yes; \
++  }
++pkgdatadir = $(datadir)/@PACKAGE@
++pkgincludedir = $(includedir)/@PACKAGE@
++pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
++install_sh_DATA = $(install_sh) -c -m 644
++install_sh_PROGRAM = $(install_sh) -c
++install_sh_SCRIPT = $(install_sh) -c
++INSTALL_HEADER = $(INSTALL_DATA)
++transform = $(program_transform_name)
++NORMAL_INSTALL = :
++PRE_INSTALL = :
++POST_INSTALL = :
++NORMAL_UNINSTALL = :
++PRE_UNINSTALL = :
++POST_UNINSTALL = :
++build_triplet = @build@
++host_triplet = @host@
++subdir = .
++DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
++	$(top_srcdir)/configure $(am__configure_deps) \
++	$(srcdir)/../../../../mkinstalldirs
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/../../../acinclude.m4 \
++	$(top_srcdir)/configure.in
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++	$(ACLOCAL_M4)
++am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
++ configure.lineno config.status.lineno
++mkinstalldirs = $(SHELL) $(top_srcdir)/../../../../mkinstalldirs
++CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
++LIBRARIES = $(noinst_LIBRARIES)
++ARFLAGS = cru
++lib_a_AR = $(AR) $(ARFLAGS)
++lib_a_LIBADD =
++am_lib_a_OBJECTS = lib_a-termios.$(OBJEXT) lib_a-stubs.$(OBJEXT)
++lib_a_OBJECTS = $(am_lib_a_OBJECTS)
++DEFAULT_INCLUDES = -I.@am__isrc@
++depcomp =
++am__depfiles_maybe =
++COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
++	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
++SOURCES = $(lib_a_SOURCES)
++am__can_run_installinfo = \
++  case $$AM_UPDATE_INFO_DIR in \
++    n|no|NO) false;; \
++    *) (install-info --version) >/dev/null 2>&1;; \
++  esac
++ETAGS = etags
++CTAGS = ctags
++ACLOCAL = @ACLOCAL@
++AMTAR = @AMTAR@
++AR = @AR@
++AS = @AS@
++AUTOCONF = @AUTOCONF@
++AUTOHEADER = @AUTOHEADER@
++AUTOMAKE = @AUTOMAKE@
++AWK = @AWK@
++CC = @CC@
++CCAS = @CCAS@
++CCASFLAGS = @CCASFLAGS@
++CCDEPMODE = @CCDEPMODE@
++CYGPATH_W = @CYGPATH_W@
++DEFS = @DEFS@
++DEPDIR = @DEPDIR@
++ECHO_C = @ECHO_C@
++ECHO_N = @ECHO_N@
++ECHO_T = @ECHO_T@
++INSTALL = @INSTALL@
++INSTALL_DATA = @INSTALL_DATA@
++INSTALL_PROGRAM = @INSTALL_PROGRAM@
++INSTALL_SCRIPT = @INSTALL_SCRIPT@
++INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
++LDFLAGS = @LDFLAGS@
++LIBOBJS = @LIBOBJS@
++LIBS = @LIBS@
++LTLIBOBJS = @LTLIBOBJS@
++MAINT = @MAINT@
++MAKEINFO = @MAKEINFO@
++MKDIR_P = @MKDIR_P@
++NEWLIB_CFLAGS = @NEWLIB_CFLAGS@
++NO_INCLUDE_LIST = @NO_INCLUDE_LIST@
++OBJEXT = @OBJEXT@
++PACKAGE = @PACKAGE@
++PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
++PACKAGE_NAME = @PACKAGE_NAME@
++PACKAGE_STRING = @PACKAGE_STRING@
++PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
++PACKAGE_VERSION = @PACKAGE_VERSION@
++PATH_SEPARATOR = @PATH_SEPARATOR@
++RANLIB = @RANLIB@
++READELF = @READELF@
++SET_MAKE = @SET_MAKE@
++SHELL = @SHELL@
++STRIP = @STRIP@
++VERSION = @VERSION@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
++aext = @aext@
++am__include = @am__include@
++am__leading_dot = @am__leading_dot@
++am__quote = @am__quote@
++am__tar = @am__tar@
++am__untar = @am__untar@
++bindir = @bindir@
++build = @build@
++build_alias = @build_alias@
++build_cpu = @build_cpu@
++build_os = @build_os@
++build_vendor = @build_vendor@
++builddir = @builddir@
++datadir = @datadir@
++datarootdir = @datarootdir@
++docdir = @docdir@
++dvidir = @dvidir@
++exec_prefix = @exec_prefix@
++host = @host@
++host_alias = @host_alias@
++host_cpu = @host_cpu@
++host_os = @host_os@
++host_vendor = @host_vendor@
++htmldir = @htmldir@
++includedir = @includedir@
++infodir = @infodir@
++install_sh = @install_sh@
++libdir = @libdir@
++libexecdir = @libexecdir@
++libm_machine_dir = @libm_machine_dir@
++localedir = @localedir@
++localstatedir = @localstatedir@
++lpfx = @lpfx@
++machine_dir = @machine_dir@
++mandir = @mandir@
++mkdir_p = @mkdir_p@
++newlib_basedir = @newlib_basedir@
++oext = @oext@
++oldincludedir = @oldincludedir@
++pdfdir = @pdfdir@
++prefix = @prefix@
++program_transform_name = @program_transform_name@
++psdir = @psdir@
++sbindir = @sbindir@
++sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
++sys_dir = @sys_dir@
++sysconfdir = @sysconfdir@
++target_alias = @target_alias@
++top_build_prefix = @top_build_prefix@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
++AUTOMAKE_OPTIONS = cygnus
++INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
++AM_CCASFLAGS = $(INCLUDES)
++noinst_LIBRARIES = lib.a
++lib_a_SOURCES = termios.c stubs.c
++lib_a_CCASFLAGS = $(AM_CCASFLAGS)
++lib_a_CFLAGS = $(AM_CFLAGS)
++ACLOCAL_AMFLAGS = -I ../../.. -I ../../../..
++CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
++all: all-am
++
++.SUFFIXES:
++.SUFFIXES: .c .o .obj
++am--refresh: Makefile
++	@:
++$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
++	@for dep in $?; do \
++	  case '$(am__configure_deps)' in \
++	    *$$dep*) \
++	      echo ' cd $(srcdir) && $(AUTOMAKE) --cygnus'; \
++	      $(am__cd) $(srcdir) && $(AUTOMAKE) --cygnus \
++		&& exit 0; \
++	      exit 1;; \
++	  esac; \
++	done; \
++	echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile'; \
++	$(am__cd) $(top_srcdir) && \
++	  $(AUTOMAKE) --cygnus Makefile
++.PRECIOUS: Makefile
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++	@case '$?' in \
++	  *config.status*) \
++	    echo ' $(SHELL) ./config.status'; \
++	    $(SHELL) ./config.status;; \
++	  *) \
++	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
++	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
++	esac;
++
++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
++	$(SHELL) ./config.status --recheck
++
++$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
++	$(am__cd) $(srcdir) && $(AUTOCONF)
++$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
++	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
++$(am__aclocal_m4_deps):
++
++clean-noinstLIBRARIES:
++	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
++lib.a: $(lib_a_OBJECTS) $(lib_a_DEPENDENCIES) $(EXTRA_lib_a_DEPENDENCIES) 
++	-rm -f lib.a
++	$(lib_a_AR) lib.a $(lib_a_OBJECTS) $(lib_a_LIBADD)
++	$(RANLIB) lib.a
++
++mostlyclean-compile:
++	-rm -f *.$(OBJEXT)
++
++distclean-compile:
++	-rm -f *.tab.c
++
++.c.o:
++	$(COMPILE) -c $<
++
++.c.obj:
++	$(COMPILE) -c `$(CYGPATH_W) '$<'`
++
++lib_a-termios.o: termios.c
++	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-termios.o `test -f 'termios.c' || echo '$(srcdir)/'`termios.c
++
++lib_a-termios.obj: termios.c
++	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-termios.obj `if test -f 'termios.c'; then $(CYGPATH_W) 'termios.c'; else $(CYGPATH_W) '$(srcdir)/termios.c'; fi`
++
++lib_a-stubs.o: stubs.c
++	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-stubs.o `test -f 'stubs.c' || echo '$(srcdir)/'`stubs.c
++
++lib_a-stubs.obj: stubs.c
++	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-stubs.obj `if test -f 'stubs.c'; then $(CYGPATH_W) 'stubs.c'; else $(CYGPATH_W) '$(srcdir)/stubs.c'; fi`
++
++ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
++	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++	unique=`for i in $$list; do \
++	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++	  done | \
++	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++	      END { if (nonempty) { for (i in files) print i; }; }'`; \
++	mkid -fID $$unique
++tags: TAGS
++
++TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
++		$(TAGS_FILES) $(LISP)
++	set x; \
++	here=`pwd`; \
++	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
++	unique=`for i in $$list; do \
++	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++	  done | \
++	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++	      END { if (nonempty) { for (i in files) print i; }; }'`; \
++	shift; \
++	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
++	  test -n "$$unique" || unique=$$empty_fix; \
++	  if test $$# -gt 0; then \
++	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++	      "$$@" $$unique; \
++	  else \
++	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++	      $$unique; \
++	  fi; \
++	fi
++ctags: CTAGS
++CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
++		$(TAGS_FILES) $(LISP)
++	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
++	unique=`for i in $$list; do \
++	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++	  done | \
++	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++	      END { if (nonempty) { for (i in files) print i; }; }'`; \
++	test -z "$(CTAGS_ARGS)$$unique" \
++	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
++	     $$unique
++
++GTAGS:
++	here=`$(am__cd) $(top_builddir) && pwd` \
++	  && $(am__cd) $(top_srcdir) \
++	  && gtags -i $(GTAGS_ARGS) "$$here"
++
++distclean-tags:
++	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
++check-am:
++check: check-am
++all-am: Makefile $(LIBRARIES) all-local
++installdirs:
++install: install-am
++install-exec: install-exec-am
++install-data: install-data-am
++uninstall: uninstall-am
++
++install-am: all-am
++	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
++
++installcheck: installcheck-am
++install-strip:
++	if test -z '$(STRIP)'; then \
++	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++	      install; \
++	else \
++	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
++	fi
++mostlyclean-generic:
++
++clean-generic:
++
++distclean-generic:
++	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
++
++maintainer-clean-generic:
++	@echo "This command is intended for maintainers to use"
++	@echo "it deletes files that may require special tools to rebuild."
++clean: clean-am
++
++clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
++
++distclean: distclean-am
++	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
++	-rm -f Makefile
++distclean-am: clean-am distclean-compile distclean-generic \
++	distclean-tags
++
++dvi: dvi-am
++
++dvi-am:
++
++html: html-am
++
++html-am:
++
++info: info-am
++
++info-am:
++
++install-data-am:
++
++install-dvi: install-dvi-am
++
++install-dvi-am:
++
++install-exec-am:
++
++install-html: install-html-am
++
++install-html-am:
++
++install-info: install-info-am
++
++install-info-am:
++
++install-man:
++
++install-pdf: install-pdf-am
++
++install-pdf-am:
++
++install-ps: install-ps-am
++
++install-ps-am:
++
++installcheck-am:
++
++maintainer-clean: maintainer-clean-am
++	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
++	-rm -rf $(top_srcdir)/autom4te.cache
++	-rm -f Makefile
++maintainer-clean-am: distclean-am maintainer-clean-generic
++
++mostlyclean: mostlyclean-am
++
++mostlyclean-am: mostlyclean-compile mostlyclean-generic
++
++pdf: pdf-am
++
++pdf-am:
++
++ps: ps-am
++
++ps-am:
++
++uninstall-am:
++
++.MAKE: install-am install-strip
++
++.PHONY: CTAGS GTAGS all all-am all-local am--refresh check check-am \
++	clean clean-generic clean-noinstLIBRARIES ctags distclean \
++	distclean-compile distclean-generic distclean-tags dvi dvi-am \
++	html html-am info info-am install install-am install-data \
++	install-data-am install-dvi install-dvi-am install-exec \
++	install-exec-am install-html install-html-am install-info \
++	install-info-am install-man install-pdf install-pdf-am \
++	install-ps install-ps-am install-strip installcheck \
++	installcheck-am installdirs maintainer-clean \
++	maintainer-clean-generic mostlyclean mostlyclean-compile \
++	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
++	uninstall-am
++
++
++all-local: crt0.o
++
++# Tell versions [3.59,3.63) of GNU make to not export all variables.
++# Otherwise a system limit (for SysV at least) may be exceeded.
++.NOEXPORT:
+diff -ruN newlib-3.1.0-old/newlib/libc/sys/miosix/stubs.c newlib-3.1.0/newlib/libc/sys/miosix/stubs.c
+--- newlib-3.1.0-old/newlib/libc/sys/miosix/stubs.c	1970-01-01 01:00:00.000000000 +0100
++++ newlib-3.1.0/newlib/libc/sys/miosix/stubs.c	2025-01-24 16:17:01.356757897 +0100
+@@ -0,0 +1,98 @@
++/*
++ * RATIONALE: these stubs exists so that an attempt to use arm-miosix-eabi-gcc
++ * to compile simple programs such as the ones used by autotools to check
++ * whether the compiler works doesn't fail. The need for this behaviour was
++ * discovered when compiling libatomic as part of GCC.
++ * None of these stubs are meant to be useful for making a program that can
++ * be executed, for now. If miosix processes are developed further, this file
++ * can be a starting point to make stdlibs more standalone.
++ */
++
++#include <pthread.h>
++#include <sys/types.h>
++#include <sys/time.h>
++#include <time.h>
++#include <reent.h>
++#include <dirent.h>
++
++#ifdef __getreent
++#undef __getreent
++#endif
++
++#define AW __attribute__((weak))
++
++int    AW __register_exitproc(int a, void (*b)(), void *c, void *d)  { return 0; }
++void   AW __call_exitprocs(int a, void *b)                           {}
++void   AW _exit(int a)                                               { for(;;) ; }
++void * AW _sbrk_r(struct _reent *a, ptrdiff_t b)                     { return (void*)-1; }
++void   AW __malloc_lock()                                            {}
++void   AW __malloc_unlock()                                          {}
++struct _reent * AW __getreent()                                      { return _impure_ptr; }
++int    AW _open_r( struct _reent *a, const char *b, int c, int d)    { return -1; }
++int    AW open(const char *a, int b, ...)                            { return -1; }
++int    AW _close_r(struct _reent *a, int b)                          { return -1; }
++int    AW close(int a)                                               { return -1; }
++int    AW _write_r(struct _reent *a, int b, const void *c, size_t d) { return -1; }
++int    AW write(int a, const void *b, size_t c)                      { return -1; }
++int    AW _read_r( struct _reent *a, int b, void *c, size_t d)       { return -1; }
++int    AW read(int a, void *b, size_t c)                             { return -1; }
++off_t  AW _lseek_r(struct _reent *a, int b, off_t c, int d)          { return -1; }
++off_t  AW lseek(int a, off_t b, int c)                               { return -1; }
++int    AW _fstat_r(struct _reent *a, int b, struct stat *c)          { return -1; }
++int    AW fstat(int a, struct stat *b)                               { return -1; }
++int    AW _stat_r( struct _reent *a, const char *b, struct stat *c)  { return -1; }
++int    AW stat(const char *a, struct stat *b)                        { return -1; }
++int    AW _isatty_r(struct _reent *a, int b)                         { return 0;  }
++int    AW isatty(int a)                                              { return 0;  }
++int    AW _fcntl_r(struct _reent *a, int b, int c, int d)            { return -1; }
++int    AW fcntl(int a, int b, ...)                                   { return -1; }
++int    AW _ioctl_r(struct _reent *a, int b, int c, void *d)          { return -1; }
++int    AW ioctl(int a, int b, void *c)                               { return -1; }
++char * AW _getcwd_r(struct _reent *a, char *b, size_t c)             { return 0; }
++char * AW getcwd(char *a, size_t b)                                  { return 0; }
++int    AW _chdir_r(struct _reent *a, const char *b)                  { return -1; }
++int    AW chdir(const char *a)                                       { return -1; }
++int    AW _mkdir_r(struct _reent *a, const char *b, int c)           { return -1; }
++int    AW mkdir(const char *a, mode_t b)                             { return -1; }
++int    AW _rmdir_r(struct _reent *a, const char *b)                  { return -1; }
++int    AW rmdir(const char *a)                                       { return -1; }
++int    AW _link_r( struct _reent *a, const char *b, const char *c)   { return -1; }
++int    AW link(const char *a, const char *b)                         { return -1; }
++int    AW _unlink_r(struct _reent *a, const char *b)                 { return -1; }
++int    AW unlink(const char *a)                                      { return -1; }
++int    AW _rename_r(struct _reent *a, const char *b, const char *c)  { return -1; }
++int    AW rename(const char *a, const char *b)                       { return -1; }
++int    AW getdents(unsigned int a, struct dirent *b, unsigned int c) { return -1; }
++int    AW pthread_create(pthread_t *a, const pthread_attr_t *b, void *(*c)(void *), void *d) { return -1; }
++int    AW pthread_join(pthread_t a, void **b)                         { return -1; }
++int    AW pthread_detach(pthread_t a)                                { return -1; }
++pthread_t AW pthread_self()                                          { return -1; }
++int    AW pthread_mutex_init(pthread_mutex_t *a, const pthread_mutexattr_t *b) { return -1; }
++int    AW pthread_mutex_lock(pthread_mutex_t *a)                     { return 0; }
++int    AW pthread_mutex_unlock(pthread_mutex_t *a)                   { return 0; }
++int    AW pthread_mutex_destroy(pthread_mutex_t *a)                  { return 0; }
++int    AW pthread_cond_init(pthread_cond_t *a, const pthread_condattr_t *b) { return -1; }
++int    AW pthread_cond_wait(pthread_cond_t *a, pthread_mutex_t *b)   { return -1; }
++int    AW pthread_cond_timedwait(pthread_cond_t *a, pthread_mutex_t *b, const struct timespec *c) { return -1; }
++int    AW pthread_cond_signal(pthread_cond_t *a)                     { return -1; }
++int    AW pthread_cond_broadcast(pthread_cond_t *a)                  { return -1; }
++int    AW pthread_cond_destroy(pthread_cond_t *a)                    { return -1; }
++int    AW pthread_once(pthread_once_t *a, void (*b)())               { return -1; }
++int    AW pthread_setcancelstate(int a, int *b)                      { return 0; }
++int    AW clock_gettime(clockid_t a, struct timespec *b)             { return -1; }
++int    AW clock_settime(clockid_t a, const struct timespec *b)       { return -1; }
++int    AW clock_getres(clockid_t a, struct timespec *b)              { return -1; }
++int    AW clock_nanosleep(clockid_t a, int b,
++                    const struct timespec *c, struct timespec *d)    { return -1; }
++clock_t AW _times_r(struct _reent *a, struct tms *b)                 { return -1; }
++clock_t AW times(struct tms *a)                                      { return -1; }
++int    AW _gettimeofday_r(struct _reent *a, struct timeval *b, void *c) { return -1; }
++int    AW gettimeofday(struct timeval *a, void *b)                   { return -1; }
++int    AW nanosleep(const struct timespec *a, struct timespec *b)    { return -1; }
++int    AW _kill_r(struct _reent* a, int b, int c)                    { return -1; }
++int    AW kill(int a, int b)                                         { return -1; }
++int    AW _getpid_r(struct _reent* a)                                { return 0; }
++int    AW getpid()                                                   { return 0; }
++int    AW _wait_r(struct _reent *a, int *b)                          { return -1; }
++int    AW wait(int *a)                                               { return -1; }
++
+diff -ruN newlib-3.1.0-old/newlib/libc/sys/miosix/sys/dirent.h newlib-3.1.0/newlib/libc/sys/miosix/sys/dirent.h
+--- newlib-3.1.0-old/newlib/libc/sys/miosix/sys/dirent.h	1970-01-01 01:00:00.000000000 +0100
++++ newlib-3.1.0/newlib/libc/sys/miosix/sys/dirent.h	2024-07-26 22:02:58.653582053 +0200
+@@ -0,0 +1,62 @@
++#ifndef _SYS_DIRENT_H
++#define _SYS_DIRENT_H
++
++#include <limits.h>
++#include <sys/types.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/*
++ * This file was written to be compatible with the BSD directory
++ * routines, so it looks like it.  But it was written from scratch.
++ * Sean Eric Fagan, sef@Kithrup.COM.
++ * Additionally modified for Miosix by Terraneo Federico, fede.tft@miosix.org
++ */
++
++#define MAXNAMLEN NAME_MAX
++
++typedef struct __DIR
++{
++    int dd_fd;
++    long dd_loc;
++    long dd_size;
++    char *dd_buf;
++    int dd_len;
++    long dd_seek;
++    void (*dd_onclose)(struct __DIR *);
++} DIR;
++
++struct dirent
++{
++    unsigned long d_ino;
++    off_t d_off;
++    unsigned short d_reclen;
++    char d_type;
++    char d_name[NAME_MAX + 1];
++};
++
++enum
++{
++    DT_UNKNOWN = 0,
++    /* Equivalent to S_XXXX in sys/stat.h, but shifted to fit in a char */
++    DT_FIFO = 0010000>>12,
++    DT_CHR  = 0020000>>12,
++    DT_DIR  = 0040000>>12,
++    DT_BLK  = 0060000>>12,
++    DT_REG  = 0100000>>12,
++    DT_LNK  = 0120000>>12,
++    DT_SOCK = 0140000>>12,
++};
++
++#define IFTODT(mode) (((mode) & 0170000)>>12)
++#define DTTOIF(type) ((type)<<12)
++
++#define __dirfd(dp) ((dp)->dd_fd)
++
++#ifdef __cplusplus
++}
++#endif 
++
++#endif
+diff -ruN newlib-3.1.0-old/newlib/libc/sys/miosix/sys/ioctl.h newlib-3.1.0/newlib/libc/sys/miosix/sys/ioctl.h
+--- newlib-3.1.0-old/newlib/libc/sys/miosix/sys/ioctl.h	1970-01-01 01:00:00.000000000 +0100
++++ newlib-3.1.0/newlib/libc/sys/miosix/sys/ioctl.h	2024-07-26 22:02:58.653582053 +0200
+@@ -0,0 +1,26 @@
++
++#ifndef _SYS_IOCTL_H
++#define _SYS_IOCTL_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/* keep in sync with miosix/filesystem/ioctl.h */
++enum Ioctl
++{
++    IOCTL_SYNC=100,
++    IOCTL_TCGETATTR=101,
++    IOCTL_TCSETATTR_NOW=102,
++    IOCTL_TCSETATTR_FLUSH=103,
++    IOCTL_TCSETATTR_DRAIN=104,
++    IOCTL_FLUSH=105
++};
++
++int ioctl(int fd, int cmd, void *arg);
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /*_SYS_IOCTL_H*/
+diff -ruN newlib-3.1.0-old/newlib/libc/sys/miosix/sys/lock.h newlib-3.1.0/newlib/libc/sys/miosix/sys/lock.h
+--- newlib-3.1.0-old/newlib/libc/sys/miosix/sys/lock.h	1970-01-01 01:00:00.000000000 +0100
++++ newlib-3.1.0/newlib/libc/sys/miosix/sys/lock.h	2024-07-26 22:02:58.653582053 +0200
+@@ -0,0 +1,62 @@
++#ifndef __SYS_LOCK_H__
++#define __SYS_LOCK_H__
++
++#include <_ansi.h>
++
++/*
++ * The Miosix filesystem code assumes off_t is a signed 64 bit type.
++ * Technically this definition should be in sys/types.h, but we don't
++ * provide a Miosix-specific version of sys/types.h yet.
++ */
++typedef signed long long _off_t;
++#define __machine_off_t_defined 1
++
++/*
++ * The type of pthread_mutex_t, has been moved here from sys/types.h, because
++ * sys/types.h #includes sys/_types.h which in turn #includes sys/lock.h,
++ * and sys/lock.h actually needs to know the type of pthread_mutex_t.
++ * Unfortunately simply adding an #include sys/types.h into sys/lock.h didn't
++ * work because it caused a cyclic dependency between headers
++ */
++
++struct WaitingList
++{
++    void *thread; /* Actually, a Thread * but C doesn't know about C++ classes */
++    struct WaitingList *next;
++};
++
++typedef struct
++{
++    void *owner;  /* Actually, a Thread * but C doesn't know about C++ classes */
++    struct WaitingList *first;
++    struct WaitingList *last;
++    int recursive; /* -1 = special value for non recursive */
++} pthread_mutex_t;
++
++/*
++ * Finished declaring pthread stuff, now starting real content of lock.h
++ */
++
++typedef pthread_mutex_t _LOCK_T;
++typedef pthread_mutex_t _LOCK_RECURSIVE_T;
++
++#define __LOCK_INIT(clazz,lock) clazz pthread_mutex_t lock = {0,0,0,-1}
++#define __LOCK_INIT_RECURSIVE(clazz,lock) clazz pthread_mutex_t lock = {0,0,0,0}
++#define __lock_init(lock) pthread_mutex_init(&lock,NULL) 
++#define __lock_init_recursive(lock) \
++do { \
++    (lock).owner=0; \
++    (lock).first=0; \
++    (lock).last=0; \
++    (lock).recursive=0; \
++} while(0)
++#define __lock_close(lock) pthread_mutex_destroy(&lock)
++#define __lock_close_recursive(lock) pthread_mutex_destroy(&lock)
++#define __lock_acquire(lock) pthread_mutex_lock(&lock)
++#define __lock_acquire_recursive(lock) pthread_mutex_lock(&lock)
++#define __lock_try_acquire(lock) pthread_mutex_trylock(&lock)
++#define __lock_try_acquire_recursive(lock) pthread_mutex_trylock(&lock)
++#define __lock_release(lock) pthread_mutex_unlock(&lock)
++#define __lock_release_recursive(lock) pthread_mutex_unlock(&lock)
++
++#endif /* __SYS_LOCK_H__ */
+diff -ruN newlib-3.1.0-old/newlib/libc/sys/miosix/sys/syslimits.h newlib-3.1.0/newlib/libc/sys/miosix/sys/syslimits.h
+--- newlib-3.1.0-old/newlib/libc/sys/miosix/sys/syslimits.h	1970-01-01 01:00:00.000000000 +0100
++++ newlib-3.1.0/newlib/libc/sys/miosix/sys/syslimits.h	2024-07-26 22:02:58.653582053 +0200
+@@ -0,0 +1,20 @@
++
++#ifndef _SYS_SYSLIMITS_H
++#define _SYS_SYSLIMITS_H
++
++/* 
++ * Max length of command line arguments (including environment),
++ * POSIX requires at least 4096, but for now 1024 will do.
++ */
++#define ARG_MAX 1024
++
++/*
++ * Max nonblocking pipe read,
++ * POSIX requires at least 512, but for now 128 will do.
++ */
++#define PIPE_BUF 128
++
++#define NAME_MAX 255 /* Max filename, not including NUL, used for dirent */
++#define PATH_MAX 512 /* Max filesystem path, including NUL */
++
++#endif /* _SYS_SYSLIMITS_H */
+diff -ruN newlib-3.1.0-old/newlib/libc/sys/miosix/sys/termios.h newlib-3.1.0/newlib/libc/sys/miosix/sys/termios.h
+--- newlib-3.1.0-old/newlib/libc/sys/miosix/sys/termios.h	1970-01-01 01:00:00.000000000 +0100
++++ newlib-3.1.0/newlib/libc/sys/miosix/sys/termios.h	2024-07-26 22:02:58.653582053 +0200
+@@ -0,0 +1,113 @@
++/* Adapted from sys/sysvi386/sys */
++
++#ifndef _SYS_TERMIOS_H
++#define _SYS_TERMIOS_H
++
++/* c_iflag */
++#define IGNBRK  000001
++#define BRKINT  000002
++#define IGNPAR  000004
++#define INPCK   000020
++#define ISTRIP  000040
++#define INLCR   000100
++#define IGNCR   000200
++#define ICRNL   000400
++#define IXON    002000
++#define IXOFF   010000
++#define IUTF8   040000
++
++/* c_oflag */
++#define OPOST   000001
++#define OCRNL   000004
++#define ONLCR   000010
++#define ONOCR   000020
++#define ONLRET  000040
++
++/* c_cflag */
++#define B0      0
++#define B50     50
++#define B75     75
++#define B110    110
++#define B134    134
++#define B150    150
++#define B200    200
++#define B300    300
++#define B600    600
++#define B1200   1200
++#define B1800   1800
++#define B2400   2400
++#define B4800   4800
++#define B9600   9600
++#define B19200  19200
++#define B38400  38400
++#define B57600  57600
++#define B115200 115200
++#define B230400 230400
++
++#define CSIZE   (0x03<<24)
++#define CS5     (0x00<<24)
++#define CS6     (0x01<<24)
++#define CS7     (0x02<<24)
++#define CS8     (0x03<<24)
++#define CSTOPB  (0x04<<24)
++#define PARENB  (0x08<<24)
++#define PAODD   (0x10<<24)
++#define CRTSCTS (0x20<<24)
++#define CREAD   (0x40<<24)
++
++/* c_lflag */
++#define ISIG    0000001
++#define ICANON  0000002
++#define ECHO    0000010
++#define ECHOE   0000020
++#define ECHOK   0000040
++#define ECHONL  0000100
++#define NOFLSH  0000200
++#define TOSTOP  0001000
++
++/* c_cc indices */
++#define VEOF    4   /* also VMIN -- thanks, AT&T */
++#define VEOL    5   /* also VTIME -- thanks again */
++#define VERASE  2
++#define VINTR   0
++#define VKILL   3
++#define VMIN    4   /* also VEOF */
++#define VQUIT   1
++#define VSUSP   10
++#define VTIME   5   /* also VEOL */
++#define VSTART  11
++#define VSTOP   12
++
++/* tcsetattr opt */
++#define TCSAFLUSH  0
++#define TCSANOW    1
++#define TCSADRAIN  2
++
++/* tcflush opt */
++#define TCIFLUSH   0
++#define TCOFLUSH   1
++#define TCIOFLUSH  2
++
++#define NCCS 13
++
++typedef unsigned char cc_t;
++typedef unsigned int tcflag_t;
++typedef unsigned int speed_t;
++
++struct termios
++{
++    tcflag_t c_iflag;
++    tcflag_t c_oflag;
++    tcflag_t c_cflag;
++    tcflag_t c_lflag;
++    cc_t c_cc[NCCS];
++};
++
++int tcgetattr(int fd, struct termios *t);
++int tcsetattr(int fd, int opt, const struct termios *t);
++speed_t cfgetospeed(const struct termios *t);
++int cfsetospeed(struct termios *t, speed_t speed);
++int tcdrain(int fd);
++int tcflush(int fd, int opt);
++
++#endif /*_SYS_TERMIOS_H*/
+diff -ruN newlib-3.1.0-old/newlib/libc/sys/miosix/termios.c newlib-3.1.0/newlib/libc/sys/miosix/termios.c
+--- newlib-3.1.0-old/newlib/libc/sys/miosix/termios.c	1970-01-01 01:00:00.000000000 +0100
++++ newlib-3.1.0/newlib/libc/sys/miosix/termios.c	2024-07-26 22:02:58.653582053 +0200
+@@ -0,0 +1,46 @@
++
++#include <termios.h>
++#include <errno.h>
++#include <sys/ioctl.h>
++
++int tcgetattr(int fd, struct termios *t)
++{
++    return ioctl(fd,IOCTL_TCGETATTR,(void*)t);
++}
++
++int tcsetattr(int fd, int opt, const struct termios *t)
++{
++    switch(opt)
++    {
++        case TCSAFLUSH:
++            return ioctl(fd,IOCTL_TCSETATTR_FLUSH,(void*)t);
++        case TCSANOW:
++            return ioctl(fd,IOCTL_TCSETATTR_NOW,(void*)t);
++        case TCSADRAIN:
++            return ioctl(fd,IOCTL_TCSETATTR_DRAIN,(void*)t);
++        default:
++            errno = EINVAL;
++            return -1;
++    }
++}
++
++speed_t cfgetospeed(const struct termios *t)
++{
++    return t->c_cflag & 0x00ffffff;
++}
++
++int cfsetospeed(struct termios *t, speed_t speed)
++{
++    t->c_cflag = (t->c_cflag & (~0x00ffffff)) | speed;
++    return 0;
++}
++
++int tcdrain(int fd)
++{
++    return ioctl(fd,IOCTL_SYNC,0);
++}
++
++int tcflush(int fd, int opt)
++{
++    return ioctl(fd,IOCTL_FLUSH,(void*)opt);
++}
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/ramdisk.sh b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/ramdisk.sh
new file mode 100755
index 0000000000000000000000000000000000000000..e997e6fe01b10ae447b5d48ce3d784df25d52f2d
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/ramdisk.sh
@@ -0,0 +1,32 @@
+#!/usr/bin/env bash
+
+# Useful script to speed up compilation and/or save write cycles on an SSD by
+# compiling in a ramdisk. Only viable if you have at least 16GByte of RAM.
+
+case $(uname -s) in
+	Linux)
+		mkdir -p ramdisk
+		sudo umount ramdisk 2> /dev/null # If not already mounted it's not an error
+		sudo mount -t tmpfs -o size=9G,uid=`id -u`,gid=`id -g`,mode=700 tmpfs ramdisk
+		sudo -k
+		;;
+	Darwin)
+		ramdisk_size=$(( 9 * 1024 * 1024 ))
+		ramdisk_name="miosix_ramdisk_$RANDOM"
+		diskutil erasevolume HFS+ "$ramdisk_name" $(hdiutil attach -nobrowse -nomount ram://$(( ramdisk_size ))) > /dev/stderr
+		ln -s "/Volumes/$ramdisk_name/" ./ramdisk
+		;;
+	*)
+		echo "error: I don't know how to make a ramdisk on platform " $(uname -s) > /dev/stderr
+		exit 1
+		;;
+esac
+
+ln -s `pwd`/downloaded ramdisk/downloaded
+cp -R installers ramdisk
+cp -R mx-postlinker ramdisk
+cp -R patches ramdisk
+cp cleanup.sh ramdisk
+cp install-script.sh ramdisk
+cp uninstall.sh ramdisk
+cp lpc21isp_148_src.zip ramdisk
diff --git a/miosix/_tools/compiler/gcc-9.2.0-mp3.3/uninstall.sh b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/uninstall.sh
new file mode 100755
index 0000000000000000000000000000000000000000..62a98a0b684c7a195c9ffb48a7069f720beb7caf
--- /dev/null
+++ b/miosix/_tools/compiler/gcc-9.2.0-mp3.3/uninstall.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env bash
+
+# Uninstall script: removes the arm-miosix-eabi-gcc compiler
+
+PREFIX="arm-miosix-eabi-"
+# Do not remove any item from this list, some users may have installed a very old Miosix compiler
+FILES="addr2line ar as c++ c++filt cpp elfedit g++ gcc gcc-ar gcc-nm gcc-ranlib gccbug gcov gcov-dump gcov-tool gdb gdbtui gdb-add-index gprof ld ld.bfd nm objcopy objdump ranlib readelf run size strings strip"
+
+# Remove symlinks to the compiler
+for i in $FILES; do
+	# install-script.sh installs links in /usr/bin
+	# Using -h because the file must be a symlink
+	if [ -h "/usr/bin/$PREFIX$i" ]; then
+		sudo rm "/usr/bin/$PREFIX$i"
+	fi
+	# Very old install-script.sh used to install links in /usr/local/bin,
+	# so remove also those links for backward compatibility
+	if [ -h "/usr/local/bin/$PREFIX$i" ]; then
+		sudo rm "/usr/local/bin/$PREFIX$i"
+	fi
+done
+
+# Remove lpc21isp
+if [ -h "/usr/bin/lpc21isp" ]; then
+	sudo rm "/usr/bin/lpc21isp"
+fi
+if [ -h "/usr/local/bin/lpc21isp" ]; then
+	sudo rm "/usr/local/bin/lpc21isp"
+fi
+
+# Remove mx-postlinker
+if [ -h "/usr/bin/mx-postlinker" ]; then
+	sudo rm "/usr/bin/mx-postlinker"
+fi
+if [ -h "/usr/local/bin/mx-postlinker" ]; then
+	sudo rm "/usr/local/bin/mx-postlinker"
+fi
+
+# Remove the compiler
+sudo rm -rf /opt/arm-miosix-eabi