------------------------------------------------- Please note the following caveats to using klibc: ------------------------------------------------- optimization: ------------- Compiling with -O0 is not supported. It may or may not work; please use -O1 if you want to do maximize debuggability. Compiling with -O0 is more likely to work on gcc 3. setjmp()/longjmp(): ------------------- setjmp() and longjmp() *do not* save signal state. sigsetjmp() and siglongjmp() *do* save the signal mask -- regardless of the value of the extra argument. The standards actually state that if you pass longjmp() a final value of zero the library should change that to a 1! Presumably the reason is so people who write broken code can get away with writing longjmp(buf); or something equally bad. If you pass longjmp() a final value of 0 you get what you deserve -- setjmp() will happily return 0. stdio: ------ Only a small subset of the stdio functions are implemented. Those that are implemented do not buffer, although they *do* trap EINTR or short read/writes and iterate. _fread() and _fwrite(), which take only one size argument (like read/write), but do handle EINTR/short return are also available. namespaces: ----------- klibc frequently includes headers in other headers in a way that exposes more symbols than POSIX says they should. "Live with it." theading: --------- klibc is not thread-safe. Consequently, clone() or any of the pthreads functions are not included. bsd_signal vs sysv_signal: -------------------------- There is no signal() call, because you never know if you want Linux/SysV semantics (SA_RESETHAND) or GNU/BSD semantics (SA_RESTART). The best, in *any* circumstances, is to never use signal() and instead use sigaction(), but in order to simplify porting you can use either sysv_signal() or bsd_signal(), depending on what you actually want.