Add docs/SYSTEM-ISSUES.TXT to list important system issues that NDK developers should be aware of
diff --git a/ndk/README.TXT b/ndk/README.TXT
index 43ea633..4c5ff7f 100644
--- a/ndk/README.TXT
+++ b/ndk/README.TXT
@@ -23,6 +23,9 @@
 
 See docs/HOWTO.TXT for a few useful tips and tricks when using the NDK.
 
+See docs/SYSTEM-ISSUES.TXT for a list of important issues related to
+the Android system images that all NDK developers should be aware of.
+
 Finally, discussions related to the Android NDK happen on the public
 "android-ndk" forum located at the following address:
 
diff --git a/ndk/docs/SYSTEM-ISSUES.TXT b/ndk/docs/SYSTEM-ISSUES.TXT
new file mode 100644
index 0000000..17ee4e8
--- /dev/null
+++ b/ndk/docs/SYSTEM-ISSUES.TXT
@@ -0,0 +1,113 @@
+Android System Image Issues
+===========================
+
+This document contains a list of known issues in existing Android
+system images that NDK developers should be aware of.
+
+I. Android 1.5 System Issues:
+-----------------------------
+
+The following issues correspond to the official Android 1.5
+system images:
+
+
+No standard C++ library support:
+--------------------------------
+
+The Android 1.5 system does not use any C++ standard library, and does
+not provide one to applicative native code. Instead, a very limited set
+of headers are provided (see docs/STABLE-APIS.TXT) which correspond to
+the C++ support code used to build the Android platform.
+
+It is possible to hack existing C++ STL implementations to work on top
+of this, but this is not supported yet. We recommend trying with uSTL
+and STLport at this point if you really need this.
+
+
+No support for C++ exceptions and RTTI:
+---------------------------------------
+
+The Android 1.5 system image lacks several features necessary to reliably
+implement C++ exceptions and RTTI. C++ code that depends on these features
+will simply not link or run appropriately on Android 1.5
+
+
+C Library limitations:
+----------------------
+
+The C library doesn't try to implement every feature under the sun.
+Most notably, pthread cancellation is not supported. A detailed overview
+of the C library and its design is available in docs/system/libc/OVERVIEW.TXT
+
+
+No SysV IPCs in C library:
+--------------------------
+
+Unix System V Inter-Process Communication APIs (e.g. semget()) are
+intentionally not available from the C library, to avoid denial-of-service
+issues. See docs/system/libc/SYSV-IPC.TXT for details.
+
+
+C Library bug: getservbyname() returns port number in incorrect order:
+----------------------------------------------------------------------
+
+The Android 1.5 C library function getservbyname() returns the port number
+corresponding to a given network service in incorrect order. The function
+stores its result in a 'struct servent' structure, and the port number in
+its 's_port' field.
+
+The standard mandates that this value is stored in network order (and thus
+should be converted to host order through ntohs()). However, the 1.5
+implementation is buggy and returns the number.
+
+This bug will be fixed in future releases of the platform, and applications
+should not depend on the wrong behaviour in the future. Avoid using this
+function if possible; if this is not possible, try to use a small wrapper
+like the following one:
+
+static struct servent*
+my_getservbyname(const char*  name, const char*  proto)
+{
+    static int       has_bug = -1;
+    struct servent*  ret;
+
+    if (has_bug < 0) {
+        ret = getservbyname("http",NULL);
+        has_bug = (ret == NULL || ret->s_port == 80);
+    }
+
+    ret = getservbyname(name, proto);
+    if (has_bug)
+        ret->s_port = htons(ret->s_port);
+}
+
+(the returned struct servent is thread-local and can be modified by the
+ caller. It will be over-written on the next call to the function though).
+
+
+Dynamic Linker limitations:
+---------------------------
+
+The Android dynamic linker in 1.5 has many important limitations:
+
+- No support for LD_LIBRARY_PATH, LD_PRELOAD, RTLD_LOCAL and many
+  other options.
+
+- Static C++ constructors in executables are called twice due to a bug
+  in the C library initialization sequence. However, static C++
+  constructors in shared libraries are only called once.
+
+- Static destructors are never called at the moment, either at program
+  exit, or when dlclose() is called.
+
+- dlerror() reporting is very limited and only provides a few generic
+  error messages that make it difficult to know why a dynamic load/link
+  operation failed. Most of the time, the culprit is a missing symbol.
+
+- A bug prevents one application shared library from depending on another
+  one. For example, if you build both libfoo.so and libbar.so for your
+  application, and list libfoo.so as a dependency for libbar.so in
+  bar/Android.mk (with LOCAL_SHARED_LIBRARIES := foo), then loading
+  libbar.so will always fail, even if you have already loaded libfoo.so
+  in your process.
+