| ------------------------------------------------- |
| 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. |
| |