This is the glibc ports add-on, an add-on for the GNU C Library (glibc).
It contains code that is not maintained in the official glibc source tree.

This includes working ports to GNU/Linux on some machine architectures that
are not maintained in the official glibc source tree.  It also includes
some code once used by old libc ports now defunct, which has been abandoned
but may be useful for some future porter to examine.  It may also include
some optimized functions tailored for specific CPU implementations of an
architecture, to be selected using --with-cpu.

The ports add-on is cooperatively maintained by volunteers on the
<libc-ports@sourceware.org> mailing list, and housed in the ports
subdirectory of the glibc git repository.  See
http://www.gnu.org/software/libc/download.html for details on using
git.  To report a bug in code housed in the ports add-on, please go to
http://sourceware.org/bugzilla/ and file a bug report under the glibc
"ports" component.

An add-on for an individual port can be made from just the sysdeps/
subdirectories containing the port's code.  You may want to include a
README and Banner of your own talking about your port's code in particular,
rather than the generic ones here.

The real source code for any ports is found in the sysdeps/ subdirectories.
These should be exactly what would go into the main libc source tree if you
were to incorporate it directly.  The only exceptions are the files
sysdeps/*/preconfigure and sysdeps/*/preconfigure.ac; these are fragments
used by this add-on's configure fragment.  The purpose of these is to set
$base_machine et al when the main libc configure's defaults are not right
for some machine.  Everything else can and should be done from a normal
sysdeps/.../configure fragment that is used only when the configuration
selects that sysdeps subdirectory.  Each port that requires some special
treatment before the sysdeps directory list is calculated, should add a
sysdeps/CPU/preconfigure file; this can either be written by hand or
generated by Autoconf from sysdeps/CPU/preconfigure.ac, and follow the
rules for glibc add-on configure fragments.  No preconfigure file should do
anything on an unrelated configuration, so that disparate ports can be put
into a single add-on without interfering with each other.

Like all glibc add-ons, this must be used by specifying the directory in
the --enable-add-ons option when running glibc's configure script.

The GNU C Library is free software.  See the file COPYING.LIB in the
libc repository for copying conditions, and LICENSES for notices about
a few contributions that require these additional notices to be
distributed.  License copyright years may be listed using range
notation, e.g., 2000-2013, indicating that every year in the range,
inclusive, is a copyrightable year that would otherwise be listed
individually.
