summaryrefslogtreecommitdiffstats
path: root/libc/CAVEATS
diff options
context:
space:
mode:
Diffstat (limited to 'libc/CAVEATS')
-rw-r--r--libc/CAVEATS26
1 files changed, 26 insertions, 0 deletions
diff --git a/libc/CAVEATS b/libc/CAVEATS
new file mode 100644
index 0000000..72281a0
--- /dev/null
+++ b/libc/CAVEATS
@@ -0,0 +1,26 @@
+Bionic is a very small C library because we have decided to *not* implement various features
+of the POSIX standard. we only add functions on a as-needed basis, and there are a few things
+we wish we'll never put in there.
+
+this file is here to document explicitely what we don't want to support in Bionic:
+
+- C++ exceptions are not supported. on embedded systems, they lead to extremely larger and
+ slower code for no good reason (even when so-called zero-cost exception schemes are
+ implemented, they enforce very large numbers of registers spills to the stack, even
+ in functions that do not throw an exception themselves).
+
+- pthread cancellation is *not* supported. this seemingly simple "feature" is the source
+ of much bloat and complexity in a C library. Besides, you'd better write correct
+ multi-threaded code instead of relying on this stuff.
+
+- pthread_once() doesn't support C++ exceptions thrown from the init function, or the init
+ function doing a fork().
+
+- locales and wide characters are not supported. we use ICU for all this i18n stuff, which
+ is much better than the ill-designed related C libraries functions.
+
+- at the moment, several user-account-related functions like getpwd are stubbed and return
+ the values corresponding to root. this will be fixed when we'll be able to have distinct
+ users on the Android filesystem. :-(
+
+ see bionic/stubs.c for the details