This is klibc, what is intended to be a minimalistic libc subset for
use with initramfs.  It is deliberately written for small size,
minimal entaglement, and portability, not speed.  It is definitely a
work in progress, and a lot of things are still missing.


The build procedure is not very polished yet, but it should work like
this:

a) In the source root directory (the directory above the one in which
   this file is found) create a symlink called "linux" pointing to a
   reasonably recent Linux kernel tree (2.4 or 2.6 should be OK.)
   This tree must have the include/asm symlink set up for the
   architecture you're compiling for, and include/linux/autoconf.h
   must exist.  The easiest way to make sure of all of these is to do
   a "make config" or any of its variants on the kernel tree is
   question, followed by a "make dep" (2.4) or "make prepare" (2.6).

b) If you're cross-compiling, change ARCH in the main MCONFIG file to
   the appropriate architecture, and set CROSS to your toolchain
   prefix.

   IMPORTANT: if you're on a 64-bit machine with a 32-bit userland
   (ia64, mips64, ppc64 sparc64, s390x or x86_64), and you want to
   build the 32-bit version: you need to set ARCH to the 32-bit
   architecture as well as set up the linux/include/asm symlink to
   point to the 32-bit architecture.  Building the 32-bit architecture
   usually (but not always) produces smaller binaries, and is likely
   to be better tested.

   If you are on ARM, and want to build a thumb version of the library
   (this is supported), change OPTFLAGS in arch/arm/MCONFIG to build
   thumb code.

   The following is the last known status of various architectures:

   alpha:	 Untested
   arm-thumb:	 Probably OK
   arm26:	 Not yet ported
   arm:		 Working
   cris:	 Not yet ported
   h8300:	 Not yet ported
   i386:	 Working
   ia64:	 Needs sysstub.ph
   m68k:	 Not yet ported
   mips64:	 Not yet ported
   mips:	 Needs sysstub.ph
   parisc:	 Needs sysstub.ph
   ppc64:	 Needs sysstub.ph
   ppc:		 Needs sysstub.ph
   s390:	 Needs sysstub.ph
   s390x:	 Needs sysstub.ph
   sh:		 Needs sysstub.ph
   sparc64:	 sigaction() fails in ash for unknown reason
   sparc:	 Working
   v850:	 Not yet ported
   x86-64:	 Working
   
   Shared library support requires recent binutils on many
   architectures.

   "Need sysstub.ph" means the architectural changes first implemented
   in klibc-0.117 has not yet been implemented; klibc-0.116 did,
   however, work.  "Not yet ported" means no porting work has been
   done on this architecture.

   Note that even the "working" ones likely have bugs.  Please report
   them if you run into them.

c) Type "make" and pray...

d) Try the test programs in the tests/ directory.  They should run...

Contact the klibc mailing list:

	http://www.zytor.com/mailman/listinfo/klibc

... for more info.

	-hpa
