A C standard library for sh3eb-elf.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Memallox b27b8de827 Add _console_read() implementation which is called by the read syscall (does not work yet!) 1 year ago
doc Add nvptx port. 1 year ago
iconvdata Add nvptx port. 1 year ago
libc Add _console_read() implementation which is called by the read syscall (does not work yet!) 1 year ago
libm Implement nanl in newlib only 1 year ago
testsuite Don't run UTF-8.exp test if newlib is not built with multibyte support. 3 years ago
ChangeLog Deprecate newlib and winsup ChangeLog files 4 years ago
ChangeLog-2015 Deprecate newlib and winsup ChangeLog files 4 years ago
HOWTO HOWTO: remove reference to TRAD_SYNOPSIS 2 years ago
MAINTAINERS Remove myself from MAINTAINERS 1 year ago
Makefile.am make target for explicit Unicode data tables generation 2 years ago
Makefile.in Add nvptx port. 1 year ago
Makefile.shared makedoc: make errors visible 2 years ago
NEWS Bump release to 3.0.0 for yearly snapshot 2 years ago
README Bump release to 3.0.0 for yearly snapshot 2 years ago
_newlib_version.hin Define the newlib version macros in one place: _newlib_version.h. 4 years ago
acconfig.h 2014-07-04 Bin Cheng <bin.cheng@arm.com> 5 years ago
acinclude.m4 Add --disable-newlib-fno-builtin to allow compilation without -fno-builtin for smaller and faster code. 1 year ago
aclocal.m4 Fix _newlib_version.h logic to support building gcc with newlib. 4 years ago
configure Add --disable-newlib-fno-builtin to allow compilation without -fno-builtin for smaller and faster code. 1 year ago
configure.host Enable newlib_io_c99_format to provide support for the %zu format specifier 1 year ago
configure.in Fix typo with newlib-long-time_t default value. 2 years ago
confsubdir.m4 2007-04-23 Ralf Wildenhues <Ralf.Wildenhues <at> gmx.de> 13 years ago
man.xsl Make newlib manpages (v3) 3 years ago
newlib.hin Change time_t to 64-bit by default 2 years ago
refcontainers.xslt Make newlib manpages (v3) 3 years ago
stamp-h.in 2006-01-20 Jeff Johnston <jjohnstn@redhat.com> 14 years ago


                        README for newlib-3.0.0 release
(mostly cribbed from the README in the gdb-4.13 release)

This is `newlib', a simple ANSI C library, math library, and collection
of board support packages.

Prior to the 3.0.0 release, newlib supported both ANSI and K&R-style
compilers. As of 3.0.0, K&R is no longer supported.

The newlib and libgloss subdirectories are a collection of software from
several sources, each with their own copyright and license. See the file
COPYING.NEWLIB for details. The rest of the release tree is under either
the GNU GPL or LGPL licenses.


Unpacking and Installation -- quick overview

When you unpack the newlib-3.0.0.tar.gz file, you'll find a directory
called `newlib-3.0.0', which contains:

COPYING config/ install-sh* mpw-configure
COPYING.LIB config-ml.in libgloss/ mpw-install
COPYING.NEWLIB config.guess* mkinstalldirs* newlib/
CYGNUS config.sub* move-if-change* symlink-tree*
ChangeLog configure* mpw-README texinfo/
Makefile.in configure.in mpw-build.in
README etc/ mpw-config.in

To build NEWLIB, you must follow the instructions in the section entitled
"Compiling NEWLIB".

This will configure and build all the libraries and crt0 (if one exists).
If `configure' can't determine your host system type, specify one as its
argument, e.g., sun4 or sun4sol2. NEWLIB is most often used in cross


More Documentation

Newlib documentation is available on the net via:

All the documentation for NEWLIB comes as part of the machine-readable
distribution. The documentation is written in Texinfo format, which is
a documentation system that uses a single source file to produce both
on-line information and a printed manual. You can use one of the Info
formatting commands to create the on-line version of the documentation
and TeX (or `texi2roff') to typeset the printed version.

If you want to format these Info files yourself, you need one of the
Info formatting programs, such as `texinfo-format-buffer' or `makeinfo'.

If you want to typeset and print copies of this manual, you need TeX,
a program to print its DVI output files, and `texinfo.tex', the Texinfo
definitions file.

TeX is a typesetting program; it does not print files directly, but
produces output files called DVI files. To print a typeset document,
you need a program to print DVI files. If your system has TeX
installed, chances are it has such a program. The precise command to
use depends on your system; `lpr -d' is common; another (for PostScript
devices) is `dvips'. The DVI print command may require a file name
without any extension or a `.dvi' extension.

TeX also requires a macro definitions file called `texinfo.tex'.
This file tells TeX how to typeset a document written in Texinfo
format. On its own, TeX cannot read, much less typeset a Texinfo file.
`texinfo.tex' is distributed with NEWLIB and is located in the
`newlib-VERSION-NUMBER/texinfo' directory.

Compiling NEWLIB

To compile NEWLIB, you must build it in a directory separate from
the source directory. If you want to run NEWLIB versions for several host
or target machines, you need a different `newlib' compiled for each combination
of host and target. `configure' is designed to make this easy by allowing
you to generate each configuration in a separate subdirectory.
If your `make' program handles the `VPATH' feature correctly (like GNU `make')
running `make' in each of these directories builds the `newlib' libraries
specified there.

To build `newlib' in a specific directory, run `configure' with the
`--srcdir' option to specify where to find the source. (You also need
to specify a path to find `configure' itself from your working
directory. If the path to `configure' would be the same as the
argument to `--srcdir', you can leave out the `--srcdir' option; it
will be assumed.)

For example, with version 3.0.0, you can build NEWLIB in a separate
directory for a Sun 4 cross m68k-aout environment like this:

cd newlib-3.0.0
mkdir ../newlib-m68k-aout
cd ../newlib-m68k-aout
../newlib-3.0.0/configure --host=sun4 --target=m68k-aout

When `configure' builds a configuration using a remote source
directory, it creates a tree for the binaries with the same structure
(and using the same names) as the tree under the source directory. In
the example, you'd find the Sun 4 library `libiberty.a' in the
directory `newlib-m68k-aout/libiberty', and NEWLIB itself in

When you run `make' to build a program or library, you must run it
in a configured directory--whatever directory you were in when you
called `configure' (or one of its subdirectories).

The `Makefile' that `configure' generates in each source directory
also runs recursively. If you type `make' in a source directory such
as `newlib-3.0.0' (or in a separate configured directory configured with
`--srcdir=PATH/newlib-3.0.0'), you will build all the required libraries.

When you have multiple hosts or targets configured in separate
directories, you can run `make' on them in parallel (for example, if
they are NFS-mounted on each of the hosts); they will not interfere
with each other.

Specifying names for hosts and targets

The specifications used for hosts and targets in the `configure'
script are based on a three-part naming scheme, but some short
predefined aliases are also supported. The full naming scheme encodes
three pieces of information in the following pattern:


For example, you can use the alias `sun4' as a HOST argument or in a
`--target=TARGET' option. The equivalent full name is

The `configure' script accompanying NEWLIB does not provide any query
facility to list all supported host and target names or aliases.
`configure' calls the Bourne shell script `config.sub' to map
abbreviations to full names; you can read the script, if you wish, or
you can use it to test your guesses on abbreviations--for example:

% sh config.sub sun4
% sh config.sub sun3
% sh config.sub decstation
% sh config.sub hp300bsd
% sh config.sub i386v
% sh config.sub i786v
Invalid configuration `i786v': machine `i786v' not recognized

The Build, Host and Target Concepts in newlib

The build, host and target concepts are defined for gcc as follows:

build: the platform on which gcc is built.
host: the platform on which gcc is run.
target: the platform for which gcc generates code.

Since newlib is a library, the target concept does not apply to it, and the
build, host, and target options given to the top-level configure script must
be changed for newlib's use.

The build system shifts the options according to these correspondences:

gcc's build platform has no equivalent in newlib.
gcc's host platform is newlib's build platform.
gcc's target platform is newlib's host platform.
and as mentioned before, newlib has no concept of target.

In summary: the --target=TARGET switch to the top-level configure
script configures newlib's host platform.

`configure' options

Here is a summary of the `configure' options and arguments that are
most often useful for building NEWLIB. `configure' also has several other
options not listed here.

configure [--help]
[--target=TARGET] HOST

You may introduce options with a single `-' rather than `--' if you
prefer; but you may abbreviate option names if you use `--'.

Display a quick summary of how to invoke `configure'.

Configure the source to install programs and files in directory

Configure the source to install host-dependent files in directory

*Warning: using this option requires GNU `make', or another `make'
that compatibly implements the `VPATH' feature.
Use this option to make configurations in directories separate
from the NEWLIB source directories. Among other things, you can use
this to build (or maintain) several configurations simultaneously,
in separate directories. `configure' writes configuration
specific files in the current directory, but arranges for them to
use the source in the directory PATH. `configure' will create
directories under the working directory in parallel to the source
directories below PATH.

Configure only the directory level where `configure' is executed;
do not propagate configuration to subdirectories.

Configure NEWLIB for running on the specified TARGET.

There is no convenient way to generate a list of all available

`HOST ...'
Configure NEWLIB to be built using a cross compiler running on
the specified HOST.

There is no convenient way to generate a list of all available

To fit diverse usage models, NEWLIB supports a group of configuration
options so that library features can be turned on/off according to
target system's requirements.

One feature can be enabled by specifying `--enable-FEATURE=yes' or
`--enable-FEATURE'. Or it can be disable by `--enable-FEATURE=no' or

Enable printf-family positional arg support.
Disabled by default, but some hosts enable it in configure.host.

Enable C99 support in IO functions like printf/scanf.
Disabled by default, but some hosts enable it in configure.host.

Enable finalization function registration using atexit.
Disabled by default.

Enable long long type support in IO functions like printf/scanf.
Disabled by default, but many hosts enable it in configure.host.

Enable long double type support in IO functions printf/scanf.
Disabled by default, but some hosts enable it in configure.host.

Enable multibyte support.
Disabled by default.

Enable specific comma-separated list of bidirectional iconv
encodings to be built-in.
Disabled by default.

Enable specific comma-separated list of \"from\" iconv encodings
to be built-in.
Disabled by default.

Enable specific comma-separated list of \"to\" iconv encodings
to be built-in.
Disabled by default.

Enable capabilities to load external CCS files for iconv.
Disabled by default.

Disable dynamic allocation of atexit entries.
Most hosts and targets have it enabled in configure.host.

Enable atexit data structure as global variable. By doing so it is
move out of _reent structure, and can be garbage collected if atexit
is not referenced.
Disabled by default.

Enable to move the stdio stream FILE objects out of struct _reent and make
them global. The stdio stream pointers of struct _reent are initialized
to point to the global stdio FILE stream objects.
Disabled by default.

Enable small reentrant struct support.
Disabled by default.

NEWLIB implements the vector buffer mechanism to support stream IO
buffering required by C standard. This feature is possibly
unnecessary for embedded systems which won't change file buffering
with functions like `setbuf' or `setvbuf'. The buffering mechanism
still acts as default for STDIN/STDOUT/STDERR even if this option
is specified.
Enabled by default.

Disable fseek optimization. It can decrease code size of application
calling `fseek`.
Enabled by default.

C99 states that each stream has an orientation, wide or byte. This
feature is possibly unnecessary for embedded systems which only do
byte input/output operations on stream. It can decrease code size
by disable the feature.
Enabled by default.

NEWLIB has two implementations of malloc family's functions, one in
`mallocr.c' and the other one in `nano-mallocr.c'. This options
enables the nano-malloc implementation, which is for small systems
with very limited memory. Note that this implementation does not
support `--enable-malloc-debugging' any more.
Disabled by default.

NEWLIB does optimization when `fprintf to write only unbuffered unix
file'. It creates a temorary buffer to do the optimization that
increases stack consumption by about `BUFSIZ' bytes. This option
disables the optimization and saves size of text and stack.
Enabled by default.

Define time_t to long. On platforms with a 32-bit long type, this gives
raise to the year 2038 problem. The default type for time_t is a signed
64-bit integer on most systems.
Disabled by default.

Build many library versions.
Enabled by default.

Optimize for space.
Disabled by default.

Indicate malloc debugging requested.
Disabled by default.

Enable support for multiple threads.
Enabled by default.

Enable iconv library support.
Disabled by default.

Supply desired elix library level (1-4). Please refer to HOWTO for
more information about this option.
Set to level 0 by default.

Disable printf/scanf family float support.
Enabled by default.

Disable newlib from supplying syscalls.
Enabled by default.

Enable lite exit, a size-reduced implementation of exit that doesn't
invoke clean-up functions such as _fini or global destructors.
Disabled by default.

This builds NEWLIB with a special implementation of formatted I/O
functions, designed to lower the size of application on small systems
with size constraint issues. This option does not affect wide-char
formatted I/O functions. Some notes about the feature:
1) The non-wide-char formatted I/O functions only support the C89
standard. The only exception is the configuration option provides
limited support for long double. Internally, the nano formatted I/O
functions use double so accuracy is only guaranteed to double
2) Floating-point support is split out of the formatted I/O code into
weak functions which are not linked by default. Programs that need
floating-point I/O support must explicitly request linking of one or
both of the floating-point functions: _printf_float or _scanf_float.
This can be done at link time using the -u option which can be passed
to either gcc or ld. The -u option forces the link to resolve those
function references. Floating-point format specifiers are recognized
by default, but if the floating-point functions are not explicitly
linked in, this may result in undefined behavior for programs that
need floating-point I/O support.
3) Integer-only versions of the formatted I/O functions (the iprintf/
iscanf family) simply alias their regular counter-parts.
The affected functions are:

diprintf vdiprintf

siprintf fiprintf iprintf sniprintf asiprintf asniprintf

siscanf fiscanf iscanf

viprintf vfiprintf vsiprintf vsniprintf vasiprintf vasniprintf

viscanf vfiscanf vsiscanf

_diprintf_r _vdiprintf_r

_siprintf_r _fiprintf_r _iprintf_r _sniprintf_r _asiprintf_r

_siscanf_r _fiscanf_r _iscanf_r

_viprintf_r _vfiprintf_r _vsiprintf_r _asniprintf_r _vasiprintf_r

_viscanf_r _vfiscanf_r _vsiscanf_r

4) As mentioned, the option does not affect wide-char formatted I/O.
The following configuration options are ignored for non-wide-char
formatted I/O functions, and can be thought of as disabled.


Additionally, "enable/disable-newlib-io-float" is supported in
this specific implementation, one can use "disable-newlib-io-float"
to further reduce code size. In this case, the floating-point
specifiers will not be recognized or handled, and the -u option
will not work either.

5) As a rule, no features from outside of C89 standard will be
considered in this implementation.

Disabled by default.

Running the Testsuite

To run newlib's testsuite, you'll need a site.exp in your home
directory which points dejagnu to the proper baseboards directory and
the proper exp file for your target.

Before running make check-target-newlib, set the DEJAGNU environment
variable to point to ~/site.exp.

Here is a sample site.exp:

# Make sure we look in the right place for the board description files.
if ![info exists boards_dir] {
set boards_dir {}
lappend boards_dir "your dejagnu/baseboards here"

verbose "Global Config File: target_triplet is $target_triplet" 2

global target_list
case "$target_triplet" in {

{ "mips-*elf*" } {
set target_list "mips-sim"

default {
set target_list { "unix" }

mips-sim refers to an exp file in the baseboards directory. You'll
need to add the other targets you're testing to the case statement.

Now type make check-target-newlib in the top-level build directory to
run the testsuite.

Shared newlib

newlib uses libtool when it is being compiled natively (with
--target=i[34567]86-pc-linux-gnu) on an i[34567]86-pc-linux-gnu
host. This allows newlib to be compiled as a shared library.

To configure newlib, do the following from your build directory:

$(source_dir)/src/configure --with-newlib --prefix=$(install_dir)

configure will recognize that host == target ==
i[34567]86-pc-linux-gnu, so it will tell newlib to compile itself using
libtool. By default, libtool will build shared and static versions of

To compile a program against shared newlib, do the following (where
target_install_dir = $(install_dir)/i[34567]86-pc-linux-gnu):

gcc -nostdlib $(target_install_dir)/lib/crt0.o progname.c -I $(target_install_dir)/include -L $(target_install_dir)/lib -lc -lm -lgcc

To run the program, make sure that $(target_install_dir)/lib is listed
in the LD_LIBRARY_PATH environment variable.

To create a static binary linked against newlib, do the following:

gcc -nostdlib -static $(target_install_dir)/lib/crt0.o progname.c -I $(target_install_dir)/include -L $(target_install_dir)/lib -lc -lm

libtool can be instructed to produce only static libraries. To build
newlib as a static library only, do the following from your build

$(source_dir)/src/configure --with-newlib --prefix=$(install_dir) --disable-shared

Regenerating Configuration Files

At times you will need to make changes to configure.in and Makefile.am files.
This will mean that configure and Makefile.in files will need to be

At the top level of newlib is the file: acinclude.m4. This file contains
the definition of the NEWLIB_CONFIGURE macro which is used by all configure.in
files in newlib. You will notice that each directory in newlib containing
a configure.in file also contains an aclocal.m4 file. This file is
generated by issuing: aclocal -I${relative_path_to_toplevel_newlib_dir}
The first relative directory is to access acinclude.m4. The second relative
directory is to access libtool information in the top-level src directory.

For example, to regenerate aclocal.m4 in newlib/libc/machine/arm:

aclocal -I ../../.. -I ../../../..

Note that if the top level acinclude.m4 is altered, every aclocal.m4 file
in newlib should be regenerated.

If the aclocal.m4 file is regenerated due to a change in acinclude.m4 or
if a configure.in file is modified, the corresponding configure file in the
directory must be regenerated using autoconf. No parameters are necessary.
In the previous example, we would issue:


from the newlib/libc/machine/arm directory.

If you have regenerated a configure file or if you have modified a Makefile.am
file, you will need to regenerate the appropriate Makefile.in file(s).
For newlib, automake is a bit trickier. First of all, all Makefile.in
files in newlib (and libgloss) are generated using the --cygnus option
of automake.

Makefile.in files are generated from the nearest directory up the chain
which contains a configure.in file. In most cases, this is the same
directory containing configure.in, but there are exceptions.
For example, the newlib/libc directory has a number of
subdirectories that do not contain their own configure.in files (e.g. stdio).
For these directories, you must issue the automake command from newlib/libc
which is the nearest parent directory that contains a configure.in.
When you issue the automake command, you specify the subdirectory for
the Makefile.in you are regenerating. For example:

automake --cygnus stdio/Makefile stdlib/Makefile

Note how multiple Makefile.in files can be created in the same step. You
would not specify machine/Makefile or sys/Makefile in the previous example
because both of these subdirectories contain their own configure.in files.
One would change to each of these subdirectories and in turn issue:

automake --cygnus Makefile

Let's say you create a new machine directory XXXX off of newlib/libc/machine.
After creating a new configure.in and Makefile.am file, you would issue:

aclocal -I ../../..
automake --cygnus Makefile

from newlib/libc/machine/XXXX

It is strongly advised that you use an adequate version of autotools.
For this latest release, the following were used: autoconf 2.69, aclocal 1.13.4, and
automake 1.13.4.

Reporting Bugs

The correct address for reporting bugs found in NEWLIB is
"newlib@sourceware.org". Please email all bug reports to that
address. Please include the NEWLIB version number (e.g., newlib-3.0.0),
and how you configured it (e.g., "sun4 host and m68k-aout target").
Since NEWLIB supports many different configurations, it is important
that you be precise about this.

Archives of the newlib mailing list are on-line, see