Android NDK ChangeLog:

----------------------------------------------------------------------------
android-ndk-r9d
===

IMPORTANT CHANGES:
---

- Added Clang 3.4; NDK_TOOLCHAIN_VERSION=clang now picks Clang 3.4.
  GCC 4.6 remains the default.

- For ARM: Added APP_ABI=armeabi-v7a-hard.  All ARM toolchain are rebuilt with
  additional multilib option -mfloat-abi=hard.  With "APP_ABI=armeabi-v7a-hard",
>  1. ndk-build add "TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1" and
      "TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard" on top of the existing
      flags for armeabi-v7a.  The final library is installed at libs/armeabi-v7a,
      (ie. can't coexist with armeabi-v7a in the same APP_ABI). Also note that APP_ABI=all
      expands to "armeabi armeabi-v7a x86 mips" as before.
>  2. make-standalone-toolchain.sh copies additional libaries under /hard directories.
      Add the above CFLAGS and LFLAGS in your makefile for GCC/clang to link with
      libraries in /hard

- For X86: Added yasm and LOCAL_ASMFLAGS/EXPORT_ASMFLAGS.
  ndk-build use prebuilts/*/bin/yasm* to compile source specified in LOCAL_SRC_FILES
  with .asm extension

- Updated mclinker to 2.6.0 with -gc-sections support

- Added experimental libc++ support (upstream r201101).  To use it:
>  1. Add "APP_STL := c++_static" or "APP_STL := c++_shared" in Application.mk.
      You may rebuild from source via "LIBCXX_FORCE_REBUILD := true"
>  2. "make-standalone-toolchain.sh --stl=libc++" to create standalone
      toolchain with libc++ headers/lib
  See b.android.com/36496 and CPLUSPLUS-SUPPORT.html


IMPORTANT BUG FIXES:
---

- Fixed GCC 4.6/4.8 ARM EABI uncaught throw from unexpected exception
  handler.
  See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59392

- Fixed GCC 4.8 not correctly resolve partial specialization of template with
  dependent non-type template argument.
  See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59052

- Added more modules to prebuilt python
>  1. linux: zlib, nis, crypt, _curses and _curses_panel
>  2. darwin: zlib, bz2, _curses, _curses_panel, _hashlib, _ssl
> See b.android.com/59902

- Fixed X86/MIPS' gdbserver event_getmsg_helper

- Fixed numerous issues in the RenderScript NDK toolchain, including issues with
  compatibility across older devices and C++ reflection.


OTHER BUG FIXES:
---

- Fixed headers
> 1. Fixed typo in sources/android/support/include/iconv.h.
     See http://b.android.com/63806
> 2. Fixed missing #include <sys/types.h> in android/asset_manager.h for API >= 13
     See http://b.android.com/64988
> 3. Fixed missing #include <stdint.h> in android/rect_manager.h for API >= 14
> 4. Added JNICALL to JNI_OnLoad and JNI_OnUnload in jni.h.  Note that JNICALL
     is defined to __NDK_FPABI__ (see sys/cdefs.h)
> 5. Fixed the following headers to be inclued alone: android/tts.h, EGL/eglext.h,
     fts.h GLES/glext.h, GLES2/gl2ext.h, OMXAL/OpenMAXSL_Android.h, SLES/OpenSLES_Android.h,
     sys/prctl.h, sys/utime.h.  See http://b.android.com/64679
> 6. Added sys/cachectl.h for all archs.  Only has effect to mips, but
     developers no longer need to put #ifdef __mips__ around it
> 7. Fixed platforms/android-18/include/android/input.h by adding
     __NDK_FPABI__ to functions taking/returning float/double.
> 8. Fixed MIPS' "struct stat" which was incorrectly set to its 64-bit
     counterpart for API>=12 (regression in the last r9c release)
> 9. Define __PTHREAD_MUTEX_INIT_VALUE, __PTHREAD_RECURSIVE_MUTEX_INIT_VALUE,
     and __PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE for API < 9
> 10. Added scalbln, scalblnf, and scalblnl to x86's libm.so for API >= 18

- Fixed gabi++ std::unexpected() to call std::terminate() so that
  user-defined std::terminate() handler have chance to run

- Fixed gabi++ to catch std::nullptr

- Fixed samples Teapot and MoreTeapots to
>  1. Rendering issue in Tegra2/3.  Now having medium precision for specular
      variable, so that specular power can be <1.0
>  2. Workaround an issue where SYSTEM_UI_FLAG_IMMERSIVE_STICKY is invalidated
      when a volume button is pressed.  Issue remains: Immersive mode still does
      not recover when the screen has been rotated, due to onSystemUiVisibilityChange
      is not triggered when screen is rotated.

- Fixed ndk-build to add -rpath-link=$SYSROOT/usr/lib and -rpath-link=$TARGET_OUT
  for linking executable with ld.bfd.  See b.android.com/64266

- Removed -Bsymbolic from all STL build

- Fixed ndk-gdb-py.cmd by setting SHELL as env. var. instead of passing it to
  python.exe which can't understand it.
  See b.android.com/63054

- Fixed "make-standalone-toolchain.sh --stl=stlport" to copy instead of symlink
  gabi++ headers, otherwise the one created in cygwin wont' be understood by
  cmd.exe and MinGW shell


OTHER CHANGES:
---

- "chmod a+x" all *cmd scripts previously intended for use in CMD.exe only,
  in case developers prefer to use ndk-build.cmd in cygwin instead of the
  recommended ndk-build

- Speed up make-standalone-toolchain.sh by moving instead of copying if
  destination directory (eg. --install-dir=<dir>) doesn't exist.


----------------------------------------------------------------------------
android-ndk-r9c
===

IMPORTANT CHANGES:
---

- This is a bug-fix-only release.


IMPORTANT BUG FIXES:
---

- Fixed GCC 4.8 ARM where stack pointer is restored too early than access
  to varaible in stack frame via frame pointer.
  See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854

- Fixed GCC 4.8 libstdc++ where the generated code random segfault on std::nth_element
  See http://b.android.com/62910

- Fixed GCC 4.8 ICE in cc1/cc1plus with -fuse-ld=mcld.  Message reads:
>  cc1: internal compiler error: in common_handle_option, at opts.c:1774

- Fixed -mhard-float support for __builtin math functions.
  See http://b.android.com/62496.  Please track comment of http://b.android.com/61784
  for on-going fixes for -mhard-float with STL


OTHER BUG FIXES:
---

- Fixed headers
> 1. Fixed prototype of poll to poll(struct pollfd *, nfds_t, int); in poll.h
> 2. Added utimensat and futimens to libc.so to API level >=12 and >=19, respectively.
> 3. Added missing clock_settime() and clock_nanosleep() in time.h for API>=8.
> 4. Added CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE,
     CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM, and CLOCK_BOOTTIME_ALARM in time.h.
     Removed obsolete CLOCK_REALTIME_HR and CLOCK_MONOTONIC_HR.

- Refactored samples Teapot, MoreTeapots and source/android/ndk_helper.
  Use hard float-abi for armeabi-v7a, added immersive mode in android-19, etc.
  Also fix crash on X86 device in  /system/lib/libdvm.so Check_ReleaseStringUTFChars

- Fixed ndk-build fails in cygwin if NDK package is referenced via symlink

- Fixed ndk-build.cmd fails in windows cmd.exe if LOCAL_SRC_FILES
  contain absolute path.
  See https://android-review.googlesource.com/#/c/69992

- Fixed ndk-stack to proceed even when it can't parse a frame due to
  unable to locate routine, filename, or line number, in which case "??"
  is printed.

- Fixed ndk-stack windows-x64_64 erroneously matches frame line with in "stack:"
  section even when the line has no word "pc", "eip", or "ip" in it, eg.
>     I/DEBUG   ( 1151):     #00  5f09db68  401f01c4  /system/lib/libc.so

- Fixed gabi++ to not use malloc() to allocate C++ thread-local
  objects, and avoid dead-lock in gabi++ when libc.debug.malloc is non-zero in
  userdebug/eng Android platform builds


OTHER CHANGES:
---

- Added LOCAL_EXPORT_LDFLAGS

- Introducing NDK_PROJECT_PATH=null for use in an integrated build system
  where options are explicitly passed to ndk-build.  With it ndk-build
  make no attempt to look for NDK_PROJECT_PATH, and as a result the following
  variables depending on NDK_PROJECT_PATH to be explicitly specified
  (since they can on longer derive default value from NDK_PROJECT_PATH when it's null):
  NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG (optional, default to 0),
  and other APP_* used to be in Application.mk

- Allow APP_ABI to be comma-delimited list, eg. APP_ABI := "armeabi,armeabi-v7a"

- Rebuild all STL with debugging info (ie. "-g") in separate optional package
  android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip.
  This helps ndk-stack to provide better stack dump across STL.
  The code/size of the final stripped shouldn't be affected.

- Enhanced hello-jni samples to report APP_ABI at compilation

- Static libraries are built with Deterministic (option D) mode of ar
  tool.  See http://b.android.com/60705


----------------------------------------------------------------------------
android-ndk-r9b
===

IMPORTANT CHANGES:
---

- Updated include/android/*h and math.h for all API up to 18, add API level 13,
  15, 16 and 17 in the process.
  See commit message in https://android-review.googlesource.com/#/c/68012
  and https://android-review.googlesource.com/#/c/68014 for added APIs.
  Issues http://b.android.com/47150, http://b.android.com/58528, and
  http://b.android.com/38423

- Added API19 for Renderscript binding support

- Supported -mhard-float in the existing "armeabi-v7a" ABI.  See
  tests/device/hard-float/jni/Android.mk for details and current
  restriction on Clang.

- Rebased GCC 4.8 to 4.8.2, and add diagnostic color support.  To enable
  it, set -fdiagnostics-color=auto or -fdiagnostics-color=always, or
  simply export GCC_COLORS, eg.
>    export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

>  See http://gcc.gnu.org/onlinedocs/gcc/Language-Independent-Options.html

- Added two new samples to demostrate OpenGL ES3 features: Teapot and MoreTeapots.
  Run on devices with API>=16 (Don't run on emulator)

- Both GCC 4.7 and Clang 3.2 are deprecated, and will be removed from the next release.


IMPORTANT BUG FIXES:
---

- Fixed ARM GCC 4.6 thumb2 fails to generate 16bit relative jump table.
  See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48328

- Fixed GCC 4.8 ICE on g++.dg/cpp0x/lambda/lambda-defarg3.C
  See https://android-review.googlesource.com/#/c/62770 and http://gcc.gnu.org/ml/gcc/2013-07/msg00424.html

- Fixed Windows 32-bit *-gdb.exe fail to launch.
  See http://b.android.com/58975

- Fixed GCC 4.8 ICE when building bullet library with error message reads:
>  internal compiler error: verify_flow_info failed

>  See http://b.android.com/58916 and http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58165

- Fixed GDB/ARM to skip ARM.exidx data for unwinding in prologue code.
  Add a command "set arm exidx-unwinding" to control exidx-based stack
  unwinding.
  See http://b.android.com/55826

- Fixed Clang 3.3 MIPS where HI and LO registers are incorrectly reused.

- Fixed MIPS 4.7 ICE with erro reads:
>  external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185

>  See http://gcc.gnu.org/ml/gcc-patches/2012-12/msg00830.html


OTHER BUG FIXES:
---

- Fixed headers
> 1. Fixed ARM's WCHAR_MIN / WCHAR_MAX to be unsigned according to spec.  (X86/MIPS'
     are signed).  Define _WCHAR_IS_ALWAYS_SIGNED to restore old behavior.
     See http://b.android.com/57749
> 2. Fixed include/netinet/tcp.h to contain TCP_INFO state enum.
     See http://b.android.com/38881
> 3. Fixed cdefs_elh.h _C_LABEL_STRING macro which causes warnings with gcc 4.8 toolchain in c++11 mode.
     See http://b.android.com/58135, http://b.android.com/58652
> 4. Removed non-existence functions imaxabs and imaxdiv from header inttypes.h
> 5. Marked pthread_exit() as __noreturn, and pthread_self() as __pure2.
     See http://b.android.com/60686
> 6. Added missing mkdtemp() already exists in bionic in stdlib.h

- Fixed samples/gles3jni build with Clang at android-11

- Fixed mclinker to allow mulitple occurrences of the following options: -gc-sections and --eh-frame-hdr.

- Fixed mclinker to accept --no-warn-mismatch

- Fixed cpu-features not to assume all VFPv4 devices support IDIV.
  Now it only adds IDIV to white-listed devices (Nexus 4 at this moment)
  http://b.android.com/57637

- Fixed android_native_app_glue.c to stop errors being logged erroneously on event predispatch

- Fixed all operations on gabi++ terminate and unexpected_handler to be thread-safe

- More fixes on Clang -integrated-as to pass tests ssax-instructions and fenv

- Fixed GCC 4.6/4.7/4.8 to pass linker option --eh-frame-hdr even for
  static executable.  See http://gcc.gnu.org/ml/gcc-patches/2012-09/msg00969.html

- Fixed extra apostrophe in docs/CPU-ARCH-ABIS.html
  See docs/NDK-DEPENDS.html, http://b.android.com/60142

- Fixed extra quotes in ndk-build output on Windows
  See http://b.android.com/60649

- Fixed Clang 3.3 to compile ARM atomic builtin __atomic_fetch_add/sub/or/...

- Fixed Clang 3.3 ICE on customized vfprintf. See
  http://llvm.org/bugs/show_bug.cgi?id=16344


OTHER CHANGES:
---

- Enabled OpenMP for all GCC:  Add the following flags: "LOCAL_CFLAGS += -fopenmp"
  and "LOCAL_LDFLAGS += -fopenmp".
  Please find examples in tests/device/test-openmp

- Significantly reduced the size of ld.mcld (1.5MB vs. ld.bfd 3.5MB and ld.gold 7.5MB)
  and result in ~20% speed up too.

- Added LOCAL_CONLYFLAGS and APP_CONLYFLAGS to specify options applicable to C only
  but not C++.  The reason being that the existing LOCAL_CFLAGS and APP_CFLAGS are
  also used for C++ compilation (to save trouble of specifying most options twice),
  option like -std=gnu99 may fail g++ (warning) and clang++ (error).

- Added gabi++ array helper functions

- All libgcc.a in gcc are built with -funwind-tables to allow stack to unwind past __aeabi_idiv0
  for example

- Added Ingenic MXU support in MIPS GCC 4.6/4.7/4.8 with new option -mmxu

- Extended MIPS GCC 4.6/4.7/4.8 -mldc1-sdc1 to control ldxc1/sdxc1 too

- Added crazy linker. See sources/android/crazy_linker/README.TXT

- Fixed bitmap-plasma to draw on full screen rather than 200x200

- Reduced linux and darwin toolchain size by 25% (by symlink to
  identical files)


----------------------------------------------------------------------------
android-ndk-r9
===

IMPORTANT CHANGES:
---

- Added GLES3 headers/libraries and new API level 18.
  See docs/STABLE-APIS.html and the new samples/gles3jni/README

- Added GCC 4.8 compiler.  Since GCC 4.6 is still the default,
  you need to explicitly enable it:
>  1. For ndk-build: Either export NDK_TOOLCHAIN_VERSION=4.8 or add it
     in Application.mk.
>  2. For standalone: Use "--toolchain=" option in make-standalone-toolchain.sh.
     eg. "--toolchain=arm-linux-androideabi-4.8"

>  Note that:

>  1. -Wunused-local-typedefs is enabled by -Wall. Be sure to add "\__attribute__((unused))"
     if you use compile-time assert like sources/cxx-stl/stlport/stlport/stl/config/features.h
     line #311.
     See https://android-review.googlesource.com/#/c/55460
>  2. Since 4.7 -munaligned-access is default for ARMv6+.  You may
     compile with -mno-unaligned-access for kernel not supporting it.

- Added Clang 3.3; NDK_TOOLCHAIN_VERSION=clang now picks Clang 3.3.

- Both GCC 4.4.3 and Clang 3.1 are deprecated, and will be removed
  from the next release.

- Gdb is now built with python 2.7.5 support.

- Added mclinker for Windows host.  Since ld.gold is the default
  where available, you need to add -fuse-ld=mcld in LOCAL_LDFLAGS or
  APP_LDFLAGS to explicitly enable it.

- New tool ndk-depends to print ELF library dependencies.
  See docs/NDK-DEPENDS.html, http://b.android.com/53486


IMPORTANT BUG FIXES:
---

- Fixed potential event handling issue in android_native_app_glue.
  See http://b.android.com/41755

- Fixed ARM/GCC-4.7 to generates sufficient alignment for NEON
  instruction vst/vld.
  See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57271

- Fixed GCC 4.4.3/4.6/4.7 ICE at const negative index to string literal
  See http://b.android.com/54623

- Fixed GCC 4.7 segfault on const init to object address.
  See http://b.android.com/56508

- Fixed GCC 4.6 ARM broken -Os on boost 1.52.0.
  See http://b.android.com/42891

- Fixed libc.so and libc.a to contain wait4 already exist in header.
  See http://b.android.com/19854

- Fixed x86's libc.so and libc.a to contain clone()

- Fixed LOCAL_SHORT_COMMANDS bug where linker.list file is empty and not
  used.
  See http://b.android.com/57105

- Fixed GCC MIPS on darwin to use CFI directives.  Without this,
  "ld.mcld --eh-frame-hdr" fail very often.

- Fixed Clang 3.2 X86/MIPS ICE in llvm/lib/VMCore/Value.cpp.
  See https://android-review.googlesource.com/#/c/59021

- Fixed GCC 4.7 64-bit Windows assembler crash with error message reads:
  "out of memory allocating 4294967280 bytes"

- ndk-gdb "--start" or "--launch" now has application waits for gdbserver to
  attach, which allows breakpoints set in early execution path (eg. JNI) to
  be hit more reliably.  It does needs jdb and produces warning about pending
  breakpoints.  You may specify "--nowait" to restore previous behavior.
  See http://b.android.com/41278

- Fixed GDB crashes when library list is empty

- Fixed GDB crashes when "stepi" past a "bx pc" or "blx pc" Thumb instruction
  See http://b.android.com/56962 and http://b.android.com/36149

- Fixed MIPS gdbserver to look for DT_MIPS_RLD_MAP instead of DT_DEBUG.
  See http://b.android.com/56586

- Fixed ndk-build circular dependency, eg. A->B, B->B, then B was dropped from build.
  See http://b.android.com/56690


OTHER BUG FIXES:
---

- Fixed ndk-build to be able to replace NDK_TOOLCHAIN_VERSION=clang specified at
  commandline to clang3.2. (Fine if it's specified in environment variable).
  Error message reads

    ... ndk/toolchains/arm-linux-androideabi-clang/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc
    Command not found

- Fixed gabi++ sizeof(_Unwind_Exception) to be 24 for MIPS in Clang.
  See https://android-review.googlesource.com/#/c/54141

- Fixed ndk-build to ensure that built libraries actually are removed on
  ndk-build clean, from projects that include prebuilt static libraries.
  See See http://b.android.com/53527,
  https://android-review.googlesource.com/#/c/54461/ and
  https://android-review.googlesource.com/#/c/54480

- Fixed NDK_ANALYZE=1 to be less verbose

- Fixed gnu-libstdc++/Android.mk to include /backward path.
  Error message reads:

    sources/cxx-stl/gnu-libstdc++/4.6/include/ext/hash_map:61:30: fatal
    error: backward_warning.h: No such file or directory

>  See http://b.android.com/53404

- Fixed stlport new somtimes return randon values

- Fixed ndk-gdb to match in the order of CPU_ABIS, not APP_ABIS.
  See http://b.android.com/54033

- Fixed NDK 64-bit on MacOSX choses wrong path for compiler.
  See http://b.android.com/53769

- Fixed to detect 64-bit Windows Vista.
  See http://b.android.com/54485

- Fixed X86 ntonl/swap32.  Error message reads:
    error: invalid 'asm': operand number out of range"

>  See http://b.android.com/54465 and
  https://android-review.googlesource.com/#/c/57242

- Fixed ld.gold to merge string literals

- Fixed ld.gold to handle large symbol alignemnt

- Fixed ld.gold to enable "--sort-section=name" option

- Fixed GCC 4.4.3/4.6/4.7 to supress -export-dynamic for statically linked
  programs.  GCC no longer adds .interp section for statically linked programs.

- Fixed GCC 4.4.3 stlport compilation error about inconsistent typedef of
  _Unwind_Control_Block.
  See https://android-review.googlesource.com/#/c/54426

- Fixed awk scripts to handle AndroidManifest.xml created on Windows
  which may contain trailing \r, and cause error message reads.
  See http://b.android.com/42548

>  __gmsl:512: *** non-numeric second argument to wordlist' function: ''. Stop.

>  Invalid attribute name:
>      package

- Fixed make-standalone-toolchain.sh to probe the prebuilts/ dir to detect the
  appropriate default host bitness.

- Fixed clang3.2 -integrated-as

- Fixed clang3.2 ARM EHABI compact model pr1/pr2 handlerdata

- Fixed clang error with option "-mllvm -arm-enable-ehabi" which reads

>    clang: for the -arm-enable-ehabi option: may only occur zero or one times!

- Fixed NDK fails to build if there's no uses-sdk element in AndroidManifest.xml.
  See http://b.android.com/57015


OTHER CHANGES:
---

- Fixed headers
>  1. \__set_errno in errno.h is deprecated, and libc.so no longer exports it.
     To be compatible in the meantime, __set_errno becomes an inlined function in header
>  2. \#include "stdint.h" in elf.h.
    See http://b.android.com/55443
>  3. Fixed sys/un.h to be included on its own.
    See http://b.android.com/53646
>  4. Fixed MotionEvent_getHistorical family of APIs in usr/include/android/input.h to
    all take const AInputEvent* motion_event.
    See http://b.android.com/55873
>  5. Fixed malloc_usable_size to take "const void*".
    See http://b.android.com/55725
>  6. Fixed stdint.h to be more compatible with C99.
    See https://android-review.googlesource.com/#/c/46821
>  7. Fixed wchar.h not to redefine WCHAR_MAX/WCHAR_MIN
>  8. Fixed <inttypes.h> declaration for pointer-related PRI/SCN macros.
      See http://b.android.com/57218
>  9. Changed sys/cdefs.h so __WCHAR_TYPE__ is 32-bit even for API < 9,
      ie. wchat_t is 32-bit for all API level.
      Define _WCHAR_IS_8BIT to restore old behavior.
      See http://b.android.com/57267

- Added more fomatting in NDK docs/, and misc docs/ fixes including callbacks/threads and others.

- Support "thin-archive" for building static libraries.
  See http://b.android.com/40303 and ANDROID-MK.html

- Script make-standalone-toolchain.sh now supports stlport
  in addition to gnustl, with --stl=stlport.
  See http://b.android.com/53472 and STANDALONE-TOOLCHAIN.html

- Script make-standalone-toolchain.sh --llvm-version= now also
  creates scripts $TOOLCHAIN_PREFIX-clang and $TOOLCHAIN_PREFIX-clang++
  in addition to clang and clang++, to avoid using host's clang/clang++
  by accident.

- Added two flags to re-enable two optimizations in upstream Clang
  but disabled in NDK for better compatibility with code used to be
  compiled by GCC:
>  1. Added a flags -fcxx-missing-return-semantics to re-enable "missing
     return semantics" in clang 3.2+.  Normally for a value-returning
     function all paths should terminate with a return statment.  If not,
     clang inserts undefined instruction (or trap in debug mode) at path
     w/o return statement.  If you are sure your code is correct, use
     this flag for optimizer to take advantage of the undefined behavior.
     If you are not sure, don't use this flag.  The caller may still receiver
     random incorrect value, but optimizer won't exploit it and make thing
     even worse to debug.
>  2. Added a flag -fglobal-ctor-const-promotion to re-enable promoting
     global variables with static constructor to constant.   With this
     flag, the global variable optimization pass of LLVM will try to
     evalutate the global variables with static constructors, and promote
     the global constants.  Although this optimization is correct, it may
     cause some incompatability with code compiled by gcc.  For example,
     code may do const_cast to cast the constant to mutable and modify it.
     In GCC the variable is in read-write and the code run by accident.  But
     in Clang the const variable will be in read-only memory and crash

- Added -mldc1-sdc1 to MIPS GCC and Clang compilers.  By default
  compilers align 8-byte objects properly and emit instructions
  ldc1/sdc1 to move them around.  If your app use custom allocator
  which doesn't always align new object 8-byte boundary like the default
  one does, your app may crashes due to ldc1/sdc1 on unaligned memory.
  In this case you may use -mno-ldc1-sdc1 to workaround.

- Downgrade warning to "info" if APP_PLATFORM_LEVEL is larger than APP_MIN_PLATFORM_LEVEL.
  APP_PLATFORM_LEVEL may be lower than APP_PLATFORM in jni/Application.mk
  because NDK doesn't have headers for all level, and the actual level is
  shifted downward.  APP_MIN_PLATFORM_LEVEL is retrieved from android:minSdkVersion
  in AndroidManifest.xml.
  See http://b.android.com/39752

- cpu-features.c: add android_getCpuIdArm() and android_setCpuArm()
  This allows retrieving the ARM CPUID information easily.
  See http://b.android.com/53689

- Clang now compiles with GCC 4.8's as/ld in ndk-build.
  Note that from GCC 4.7, "monotonic_clock" and "is_monotonic" are
  renamed to "steady_clock" and "is_steady", respectively

- Added new warnings in ndk-build:
>  1. if LOCAL_LDLIBS/LDFLAGS are used in static library modules
>  2. if there is no module to build
>  3. non-system libraries used in LOCAL_LDLIBS/LDFLAGS of shared library
     or executable modules

- Updated ndk-build so that if APP_MODULES is not defined and only static libraries
  are listed in Android.mk, force-build all of them.
  See http://b.android.com/53502

- ndk-build now supports absolute paths in LOCAL_SRC_FILES

- Executable "`*-gdbtui", which is equivalent to "`*-gdb -tui", is removed for the sake of space.

- Issue warning when EDG front-end turns _STLP_HAS_INCLUDE_NEXT
  back on.
  See http://b.android.com/53646

- Added NDK_LIBS_OUT to override path for libraries/gdbserver from the default
  $PROJECT/libs.  See OVERVIEW.html

- Changed ndk-build defaults to compile code with format string protection
  "-Wformat -Werror=format-security".  You may set
  LOCAL_DISABLE_FORMAT_STRING_CHECKS=true to disable it.
  See ANDROID-MK.html

- Added STL pretty-print support in ndk-gdb-py.
  See NDK-GDB.html

- Misc build/test
>  - Added tests based on googletest frameworks
>  - toolchain build script warns if shell isn't bash


-------------------------------------------------------------------------------
android-ndk-r8e
===

IMPORTANT CHANGES:
---

- NDK now delivers additional 64-bit host toolchain set (package name suffix
  `*-x86_64.*`)

>  1. The ndk-build script uses 64-bit toolchain if it's present and your OS
     supports it.  If you install both 32-bit and 64-bit toolchain on 64-bit
     OS, you may export NDK_HOST_32BIT=1 or add it to the command-line to
     always use the 32-bit host toolchain.

>  2. For standalone: add to make-standalone-toolchain.sh "--system=linux-x86_64"
     on Linux or "--system=darwin-x86_64" on MacOSX to generate 64-bit host
     toolchain instead of the default 32-bit

>  See NDK-BUILD.html

- Added Clang 3.2 compiler.  Since GCC 4.6 is still the default, you need to
  explicitly enable it:

> 1. For ndk-build: Either export NDK_TOOLCHAIN_VERSION=clang3.2 (or
     NDK_TOOLCHAIN_VERSION=clang which picks the most recent among the
     clang compilers in the package) or add it in Application.mk.

> 2. For standalone: Add "--llvm-version=3.2" to make-standalone-toolchain.sh
     and replace CC and CXX in your makefile with <tool-path>/bin/clang
     and <tool-path>/bin/clang++.

- Added static code analyzer for Linux/MacOSX hosts

>  1. For ndk-build, either export NDK_ANALYZE=1 or add it to the command-line.

>  2. For standalone, please refer to ndk-build for example to run scan-build
     using /path/to/standalone/bin/<arch>/analyzer.

>  This feature is experimental now but welcome to try and report issues.

- Added MCLinker for Linux/MacOSX hosts.  Since ld.gold is the default
  where available, you need to add -fuse-ld=mcld in LOCAL_LDFLAGS or
  APP_LDFLAGS to explicitly enable it.

>  This feature is experimental now but welcome to try and report issues.
  Please find project page: https://code.google.com/p/mclinker/

- ndk-build now uses topological sort for module dependencies, ie.
  it automatically sorts out the order of libraries specified in
  LOCAL_STATIC_LIBRARIES, LOCAL_WHOLE_STATIC_LIBRARIES and
  LOCAL_SHARED_LIBRARIES.

>  See http://b.android.com/39378 and an example in tests/build/topological-sort.


IMPORTANT BUG FIXES:
---

- Fixed build script to build all toolchains in -O2.  Toolchains
  in previous releases were incorrectly built without optimization.

- Fixed build script which unconditionally builds Clang/llvm for MacOSX
  in 64-bit

- Fixed GCC 4.6/4.7 ICE gen_thumb_movhi_clobber at config/arm/arm.md:5832.
  See http://b.android.com/52732

- Fixed GCC/ARM 4.6/4.7 fails to link code using 64-bit atomic built-in
  functions.
  See http://b.android.com/41297

- Fixed GCC 4.7 linker error reads like
  .../arm-linux-androideabi/bin/ld: error: DIV usage mismatch between
  out/target/product/generic/obj/STATIC_LIBRARIES/ds_intermediates/ds.a(ak.o)
  and output.

>  See http://sourceware.org/ml/binutils/2012-12/msg00202.html

- Fixed GCC 4.7 ICE in build_data_member_initialization, at
  cp/semantics.c:5790

- Fixed GCC 4.7 ICE in redirect_eh_edge_1, at tree-eh.c:2214.
  See http://b.android.com/52909

- Fixed a GCC 4.7 segfault.
  See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55245

- Fixed to <chrono> clock resolution and enable steady_clock.
  See http://b.android.com/39680

- Fixed to enable _GLIBCXX_HAS_GTHREADS for GCC 4.7 libstdc++.
  See http://b.android.com/41770 and http://b.android.com/41859

- Fixed X86 MXX/SSE code fails to link due to missing posix_memalign.
  See https://android-review.googlesource.com/#/c/51872

- Fixed GCC4.7/X86 segfault in i386.c distance_non_agu_define_in_bb().
  See https://android-review.googlesource.com/#/c/50383

- Fixed GCC4.7/X86 to resotre earlier cmov behavior.
  See http://gcc.gnu.org/viewcvs?view=revision&revision=193554

- More fixes to handle NULL return value of setlocale() in
  libstdc++/GCC4.7.
  See http://b.android.com/46718

- Fixed ld.gold runtime undefined reference to __exidx_start/_end.
  See https://android-review.googlesource.com/#/c/52134

- Fixed Clang3.1 ICE using Eigen library.
  See http://b.android.com/41246

- Fixed Clang3.1 ICE including <chrono> in C++11 mode.
  See http://b.android.com/39600

- Fixed Clang3.1 ICE when generating object code for a method
  call to a uniform initialized rvalue.
  See http://b.android.com/41387

- Fixed Clang3.1/X86 stack realignment.
  See https://android-review.googlesource.com/#/c/52154

- Fixed GDB SIGILL when debugging on platform 4.1.2.
  See http://b.android.com/40941

- Fixed GDB cannot set "source:line" breakpoints when symbols contain
  frankenpaths.
  See http://b.android.com/42448

- Fixed GDB read_program_header for MIPS PIE executables.
  See https://android-review.googlesource.com/#/c/49592

- Fixed STLport segfault in uncaught_exception().
  See https://android-review.googlesource.com/#/c/50236

- Fixed STLport Bus error in exception handling due
  to unaligned access of DW_EH_PE_udata2, 4 and 8.

- Fixed Gabi++ nothrow new[] infinite recursion.
  See http://b.android.com/52833

- Fixed Gabi++ wrong offset to EH pointer.
  See https://android-review.googlesource.com/#/c/53446

- Removed Gabi++ redundant free on exception object.
  See https://android-review.googlesource.com/#/c/53447


OTHER BUG FIXES:
---

- Fix NDK headers

>  1. Remove redundant definitions of size_t, ssize_t, and ptrdiff_t
>  2. Fixed MIPS and ARM fenv.h
>  3. Fixed stddef.h to not re-define offsetof already exists
     in toolchain
>  4. Fixed elf.h to contain Elf32_auxv_t and Elf64_auxv_t.
     See http://b.android.com/38441
>  5. Fixed the #ifdef C++ in OpenSLES_AndroidConfiguration.h.
     See http://b.android.com/53163

- Fixed STLport to abort after OOM instead of (silent) exit

- Fixed 'system' and 'Gabi++' headers to be able to compile
  with API level < 9

- Fixed cpufeatures to not parse /proc/self/auxv.
  See http://b.android.com/43055

- Fixed ld.gold to not depending on host libstdc++, and in case
  of windows, library libgcc_sjlj_1.dll

- Fixed Clang3.1 which emits inconsistent register list in .vsave
  and fails assembler. eg.
   .vsave  {d8, d9, d10, d11, d12, d13, d14, s20, s21, s22}
  See https://android-review.googlesource.com/#/c/49930

- Fixed Clang3.1 to be able to compile libgabi++ and pass test-stlport
  on MIPS.
  See https://android-review.googlesource.com/#/c/51961

- Fixed Clang3.1 to only enable exception by default for C++,
  not for C

- Misc fixes in Clang3.1 to pass most GNU exception tests

- Fixed script clang/clang++ in standalone NDK compiler to
  detect -cc1 and don't specify "-target" when found

- Fixed ndk-build to observe NDK_APP_OUT set in Application.mk
  See http://b.android.com/42477

- Fixed X86 libc.so/lib.a missing sigsetjmp/siglongjmp already
  declared in setjmp.h.
  See http://b.android.com/19851

- Patched GCC 4.4.3/4.6/4.7 libstdc++ to work with Clang in C++11.
  See http://clang.llvm.org/cxx_status.html

- Fixed cygwin path in argument passed to HOST_AWK

- Fixed ndk-build warning in windows when running from project's jni/
  directory.
  See http://b.android.com/40192

- Fixed ndk-build won't build if makefile has tailing whitespace in
  LOCAL_PATH definition.
  See http://b.android.com/42841


OTHER CHANGES:
---

- Enabled threading support in GCC/MIPS toolchain

- Unhided GCC EH helpers __cxa_begin_cleanup and __cxa_type_match
  in GNU libstdc++.

>  See tests/build/b8247455-hidden-cxa/jni/Android.mk

- Gabi++ and STLport static libraries are now built with hidden
  visibility except for EH helpers

- STLport in ARM is now built in thumb mode

- Added support for std::set_new_handler in Gabi++.
  See http://b.android.com/52805

- Enabled FUTEX in GNU libstdc++

- ndk-build no longer copies prebuilt static library to project's
  obj/local/<abi>/directory.
  See http://b.android.com/40302

- Removed __ARM_ARCH_5*__ from ARM toolchains/*/setup.mk.
  See http://b.android.com/21132

- Built additional GNU libstdc++ libaries in thumb mode for ARM

- Enabled MIPS floating-point madd/msub/nmadd/nmsub/recip/rsqrt
  instructions with 32-bit FPU

- Enabled graphite in GCC 4.6 and 4.7.  Allow more loop optimizations:
  -fgraphite, -fgraphite-identity, -floop-block, -floop-flatten,
  -floop-interchange, -floop-strip-mine, -floop-parallelize-all,
  and -ftree-loop-linear.

>  See http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

- Enabled polly for clang3.1/3.2 on Linux/MacOSX 32-bit hosts which analyzes
  and optimizes memory access pattern.

>  See http://polly.llvm.org

- Enabled -flto in GCC 4.7, 4.6, clang3.2 and Clang3.1 on linux (Clang LTO
  via LLVMgold.so, ie. no MIPS because it doesn't have ld.gold)

- Enabled --plugin and --plugin-opt for ld.gold in GCC 4.6/4.7

- Enabled --text-reorder for ld.gold in GCC 4.7

- GNU libstdc++ is now configured with _GLIBCXX_USE_C99_MATH which will undef
  isinf, etc (*1), in bionic header.  If you have code which does the following

        #include <math.h>
          ... use isinf
        #include <cmath>
        #include <math.h>
          ... use isinf // fails

>  The 2nd use of isinf may fail because cmath undefined isinf

  (*1) Math macro in bionic undefined by cmath: fpclassify, isfinite, isinf,
       isnan, isnormal, isgreater, isgreaterequal, isless, islessequal,
       islessgreater, isunordered, signbit

- Added APP_LDFLAGS.  See ANDROID-MK.html.

- Allow NDK_LOG=0, NDK_HOST_32BIT=0 to disable NDK_LOG and host 32-bit toolchain,
  respectively.

- Changed the default GCC/X86 -march=/-mtune= from pentiumpro/generic to i686/atom

- Misc toolchain build script enhancements:

>  1. Fixed a race condition in build-gcc.sh mingw build which used to prevent
     high degree of parallel build
>  2. build-gabi++.sh and build-stlport.sh can now run from NDK package.
     See http://b.android.com/52835
>  3. Fixed run-tests.sh in MSys
>  4. Better 64-bit host toolchain and canadian build supports
>  5. Updated build-mingw64-toolchain.sh for modern versions
>  6. Option to build libgnustl_static.a and stlport_static.a without hidden
     visibility


-------------------------------------------------------------------------------
android-ndk-r8d
===

IMPORTANT CHANGES:
---

- Added GCC 4.7 compiler.  Since GCC 4.6 is still the default,
  you need to explicitly enable it:

>  1. For ndk-build: Either export NDK_TOOLCHAIN_VERSION=4.7 or add it
     in Application.mk.
>  2. For standalone: Use "--toolchain=" option in make-standalone-toolchain.sh.
     eg. "--toolchain=arm-linux-androideabi-4.7"

>  This feature is experimental now but welcome to try and report issues.

- Added stlport exception support via gabi++.  Note that the new gabi++
  depends on dlopen, etc, meaning that:

>  1. libstlport_static.a can no longer be used in "static" executable (-static,
     only possible with standalone toolchain).  "dynamic" executable (eg.
     include $(BUILD_EXECUTABLE)) can link fine because compiler impliciently adds -ldl
>  2. If your project links with "-nostdlib -Wl,--no-undefined", you need to provide
     your own -ldl

>  See CPLUSPLUS-SUPPORT.html.

>  This feature is experimental now and works better with GCC 4.6/4.7
  than with GCC 4.4.3 and clang3.1.  Welcome to try and report issues.

- Add -mstack-protector-guard= option for x86 to choose between "global"
  (default, compatible with older bionic) and "tls" (new %gs:20) for
  -fstack-protector, -fstack-protector-all, and -fstack-protector-strong
  (GCC 4.6+).  Note that this alone doesn't enable any -fstack-protector*

- Add android_setCpu() to sources/android/cpufeatures/cpu-features.c
  when auto-detection via /proc isn't possible in and after JB.
  See http://code.google.com/p/chromium/issues/detail?id=164154


IMPORTANT BUG FIXES:
---

- Fixed un-needed rebuild of object files via ndk-build.
  See http://code.google.com/p/android/issues/detail?id=39810

- Fixed r8c linker fail in MacOSX 10.6.x with error reads:

        dyld: lazy symbol binding failed: Symbol not found: _memmem
        Referenced from: ...../arm-linux-androideabi/bin/ld
        Expected in: /usr/lib/libSystem.B.dylib

>  r8c was packaged on 10.7 machine which produced binaries not
  compatible with 10.6 SDK/NDK still supports.  Will build it
  on 10.6 from now on.

- Removed '-x c++' from clang++ in standalone.
  See http://code.google.com/p/android/issues/detail?id=39089

- Fixed issues using NDK_TOOLCHAIN_VERSION=clang3.1 in cygwin.
  See http://code.google.com/p/android/issues/detail?id=39585

- Fixed make-standalone-toolchain.sh to create standalone toolchain
  on cygwin and MinGW, which works for all cygwin, MingGW, and CMD.exe.
  See http://code.google.com/p/android/issues/detail?id=39915 and
  http://code.google.com/p/android/issues/detail?id=39585 (again)

- Added missing SL_IID_ANDROIDBUFFERQUEUESOURCE in android-14 for
  ARM/X86.
  See http://code.google.com/p/android/issues/detail?id=40625

- Fixed x86 cpu detection for MOVBE.
  See http://code.google.com/p/android/issues/detail?id=39317

- Fixed an issue preventing STL dependencies to C++ sources not
  in .cpp extension.

- Fixed GCC 4.6 ARM ICE at reload1.c:1061.
  See http://code.google.com/p/android/issues/detail?id=20862

- Fixed GCC 4.4.3 ARM ICE at emit-rtl.c:1954.
  See http://code.google.com/p/android/issues/detail?id=22336

- Fixed GCC 4.4.3 ARM ICE at postreload.c:396.
  See http://code.google.com/p/android/issues/detail?id=22345

- Fixed GCC 4.6/4.7 elides lambdas.
  See http://code.google.com/p/android/issues/detail?id=35933


OTHER BUG FIXES:
---

- Fixed NDK headers

>  1. Fixed __WINT_TYPE__ and wint_t to be the same type
>  2. Corrected typo in <android/bitmap.h>.
     See http://code.google.com/p/android/issues/detail?id=15134
>  3. Corrected typo in <errno.h>.
     See http://code.google.com/p/android/issues/detail?id=15134
>  4. Check the presence of __STDC_VERSION__ in <sys/cdefs.h>.
     See http://code.google.com/p/android/issues/detail?id=14627
>  5. Re-org headers byteswap.h and dirent.h
>  6. Fixed limits.h to include page.h which provides PAGE_SIZE.
     See http://code.google.com/p/android/issues/detail?id=39983
>  7. Fixed return type of glGetAttribLocation and glGetUniformLocation
     from int to GLint.
>  8. Fixed __BYTE_ORDER for x86.
     See http://code.google.com/p/android/issues/detail?id=39824

- Fixed ndk-build to not overwrite -Os with -O2 in ARM

- Fixed to allow overwriting HOST_AWK, HOST_SED, and HOST_MAKE.

- Fixed ld.gold issue on fsck_msdos build linking objects built by ICC

- Fixed ARM EHABI support in clang conforming to spec.

- Fixed GDB to shorten the time spending on walking target's link map upon
  solib events.
  See http://code.google.com/p/android/issues/detail?id=38402

- Fixed missing libgcc.a when linking shared libraries


OTHER CHANGES:

- Backported 64-bit built-in atomic functions for ARM to GCC 4.6

- Documentation for audio output latency, other misc docs/ fixes

- Non-void functions in debug build by Clang now raise SIGILL on path w/o
  return statement

- make-standalone-toolchain.sh now accepts surffix "-clang3.1" which is
  equivalent to adding "--llvm-version=3.1" on GCC 4.6 toolchain.

- Changed GCC and Clang bug report URL to http://source.android.com/source/report-bugs.html

- Added ARM ELF support to llvm-objdump.

- Suppressed warning "treating c input as c++" in clang.

- Only 32-bit of libiberty.a is built (placed at lib32/)


-------------------------------------------------------------------------------
android-ndk-r8c
===

IMPORTANT CHANGES:
---

- Added Clang 3.1 compiler.  Since GCC 4.6 is still the default,
  you need to explicitly enable it:
  1. For ndk-build: Either export NDK_TOOLCHAIN_VERSION=clang3.1 or add it
     in Application.mk.
  2. For standalone: Add "--llvm-version=3.1" to make-standalone-toolchain.sh
     and replace CC and CXX in your makefile with <tool-path>/bin/clang
     and <tool-path>/bin/clang++.

>  See STANDALONE-TOOLCHAIN.html for details.
  This feature is experimental now but welcome to try and report issues.

- Gold linker ld.gold is now available in Windows toolchain.  Gold is also the
  default linker for ARM/X86 on all hosts.  You may override it to use ld.bfd
  linker by adding LOCAL_LDFLAGS += -fuse-ld=bfd in Android.mk, or pass
  -fuse-ld=bfd to g++/clang++ commandline which does the linking.

- ndk-build[.cmd] and ndk-gdb now check and bail out if NDK path contains space.

- Changes in API level
  1. Projects with android-10 .. 13 specified in APP_PLATFORM, project.properties or
     default.properties will link against android-9 instead of android-14.
  2. Executable in project with android-16 (Jelly Bean) or higher is compiled
     with -fPIE (position-independent executables).  A new APP_PIE allow manual control
     of this behavior.  See APPLICATION-MK.html for details.  Note that all API level
     above 14 still link against platforms/android-14. ie. no new platforms/android-N
     is added.
  3. ndk-build now warns about the adjusted API level is larger than android:minSdkVersion
     in project's AndroidManifest.xml.

- ARM: Updated 'cpu-features' helper library to include 9 more ARM-specific features.

>  See sources/android/cpufeatures/cpu-features.h for details.

- X86: long double is still a distinct type but it's 8-byte in size now (same as double)

- APP_ABI=armeabi-v7a: 
  1. -march=armv7-a is also passed to linker to link v7-specific libraries and crt*.o
  2. -mfpu=vfpv3-d16 is added by ndk-build instead of -mfpu=vfp in the previous releases.


IMPORTANT BUG FIXES:
---

- Fixed an issue when make-standalone-toolchain.sh is run under root privilege resulting
  in standalone toolchain inaccessible to some.
  1. All files/executables attributes in NDK release package are set to readable/executable to all
  2. The ownership/group of file libstdc++.a is now preserved when copied

>  See http://code.google.com/p/android/issues/detail?id=35279

- Removed redundant \r from Windows prebuilt echo.exe. The redundant \r in gdb.setup fails
  GDB because it incorrectly becomes part of the path.

>  See http://code.google.com/p/android/issues/detail?id=36054

- Fixed windows parallel builds that sometimes failed due to timing issues in the host-mkdir
  implementation.

>  See http://code.google.com/p/android/issues/detail?id=25875

- Fixed GCC 4.4.3 GNU libstdc++ to NOT merge typeinfo names by default.

>  See toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo,
   http://code.google.com/p/android/issues/detail?id=22165, and
   https://groups.google.com/forum/#!msg/android-ndk/FlnuAOIKHOo/kLEwaBso7KYJ%5B1-25%5D

- Fixed crash on null context in GCC 4.6 cp/mangle.c::write_unscoped_name, where gcc
  may crash when context == NULL and dereferenced in TREE_CODE

- Fixed GCC 4.4.3 crashes on NEON specific typedef for float

>  See http://code.google.com/p/android/issues/detail?id=34613

- Fixed the STLport internal _IteWrapper::operator*() implementation where stale
  stack location holding the dereferenced value is returned and leads to runtime crashes

>  See http://code.google.com/p/android/issues/detail?id=38630

- ARM: Fixed ARM GCC 4.4.3/4.6 g++ to not warn about "the mangling of <va_list> has
  changed in GCC 4.4".  Switch -Wno-psabi is no longer needed to workaround.

- ARM: Fix an issue when project with .arm/.neon suffixes in LOCAL_SRC_FILES also
  uses APP_STL.  With APP_STL, ndk-build searches for C++ file in LOCAL_SRC_FILES before
  adding STL header/lib paths to compilation.  Fix ndk-build to filter out .arm and .neon
  suffixes before the search, otherwise item in LOCAL_SRC_FILESfile like myfile.cpp.arm.neon
  won't be considered C++.

- ARM: Fixed binutils-2.21/ld.bfd to be capable of linking object from older binutils w/o
  tag_FP_arch, which used to produce error message reads

    BFD (GNU Binutils) 2.21 assertion fail
         ...../binutils/binutils-2.21/bfd/elf32-arm.c:10190

>  The root cause is that ARM's binutils-2.21/ld.bfd performs sanity check and asserts
  when "tag_FP_arch==0 && tag_ABI_HardFP_use !=0".  This can happen in object using FP
  linked by older binutils when tag_FP_arch isn't produced at all (thus gets the default
  "zero" in new linker).

>  See http://code.google.com/p/android/issues/detail?id=35209

- ARM: Removed warning when binutils-2.19/ld links prebuilt object by newer binutils-2.21
  which reads

    Unknown EABI object attribute 44

>  The reason is that all prebuilt crt*.o and C++ STL are built with later GCC 4.6/binutils-2.21
  and contain new tag "DIV_use" with value set to "Not allowed".  This tag can be safely ignored
  by the original GCC4.4.3/binutils-2.19 toolchain since it is only for sanity check.

- ARM: Fixed an issue in GNU stdc++ compilation with both -mthumb and -march=armv7-a, by
  making make-standalone-toolchain.sh to also populate headers/libs in sub-directory
  "armv7-a/thumb".

>  See http://code.google.com/p/android/issues/detail?id=35616

- ARM: Fix error: unresolvable R_ARM_THM_CALL relocation

>  See http://code.google.com/p/android/issues/detail?id=35342 and
    https://groups.google.com/forum/?fromgroups#!topic/android-ndk/HaLycHImqL8

- ARM: Fixed internal compiler error at "reload1.c:3633".  The reason is that ARM back-end
  expects wrong operand type when sign-extend from char.

>  Back port fix from http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50099

- ARM: Fixed internal compiler error with negative shift amount.
    int foo(int a, int b)
    {
        return a | (b << -3);
    }

>  See http://gcc.gnu.org/ml/gcc-patches/2011-10/msg00594.html

- X86: Fixed -fstack-protector, which is also the default for ndk-build x86 ABI

- MIPS: Fixed stlport endianess by setting _STLP_LITTLE_ENDIAN to 1 when compiling
  MIPS' libstlport_*

- MIPS: Fixed GCC __builtin_unreachable issue compiling LLVM

>  See Bug 54369: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54369

- MIPS: Backport fix to bug 50380: cc1 hangs eating 100% CPU

>  See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50380 and
    http://gcc.gnu.org/viewcvs/trunk/gcc/cse.c?r1=177852&r2=182498&pathrev=182498

- GDB: Disable python support in gdb-7.x at build, otherwise gdb-7.x/configure may
  pick up whatever python in host and build gdb with hard-wired dependency to specific
  version of python.

>  See http://code.google.com/p/android/issues/detail?id=36120

- GDB: Fixed ndk-gdb when APP_ABI contains "all" and matches none of known architecture

>  See http://code.google.com/p/android/issues/detail?id=35392

- GDB: Fixed Windows pathname support.  Keep ':' if it looks like it could be part of
  a Windows path starting with a drive letter.

>  See http://sourceware.org/ml/gdb/2011-06/msg00030.html and
    http://sourceware.org/bugzilla/show_bug.cgi?id=12843

- GDB: Fixed add HW breakpoint support for ARM in gdbserver

>  See http://sourceware.org/ml/gdb-patches/2011-09/msg00200.html

- GDB: Fixed to only read current solibs when linker is consistent.  Speeds up solib
  event handling.

>  See http://code.google.com/p/android/issues/detail?id=37677

- GDB: Fixed to make repeated attempts to find solib breakpoint.  GDB will retry enable_break()
  during every call to svr4_current_sos() until it succeeds.

>  See https://android-review.googlesource.com/#/c/43563

- GDB: Fixed an issue where gdb cannot stop on breakpoints placed on dlopen-ed
  libraries.

>  See http://code.google.com/p/android/issues/detail?id=34856

- GDB: Fixed SIGILL in dynamic linker when calling dlopen(), on system
  where /system/bin/linker is stripped of symbols and rtld_db_dlactivity()
  is implemented as Thumb, due to not preserving LSB of sym_addr

>  See http://code.google.com/p/android/issues/detail?id=37147


OTHER BUG FIXES:
---

- Fixed NDK headers
  1. Fixed arch-mips/include/asm/* previously incorrectly cleaned from original kernel
     See https://android-review.googlesource.com/#/c/43335
  2. Replace struct member data "`__unused`" with "`__linux_unused`" in linux/sysctl.h
     and linux/icmp.h to avoid conflict with "#define __unused" in sys/cdefs.h
  3. Fixed fenv.h to enclosed C functions with __BEGIN_DECLS/__END_DECLS
  4. Removed unimplemented functions in malloc.h
  5. Fixed stdint.h.  See http://code.google.com/p/android/issues/detail?id=1952
  6. Fixed preprocessor macros in <arch>/include/machine/*
  7. Replaced link.h for mips with new version for all platforms
  8. Remove linux-unistd.h
  9. Move GLibc-specific macros LONG_LONG_MIN, LONG_LONG_MAX and ULONG_LONG_MAX from
     <pthread.h> to <limits.h>.

- Fixed a buffer overflow in ndk-stack-parser.

- Fixed _STLP_USE_EXCEPTIONS, when not defined, to omit all declarations
  and uses of __Named_exception.  Compile and use __Named_exception only
  when STLport is being allowed to use exceptions.

- Fixed to build Linux-only NDK packages (invoked as follow) w/o also building windows

    ./build/tools/make-release.sh --force --systems=linux-x86

- Fixed libc.so to not export atexit() and __do_handler.  These symbols are exported
  on ARM by the system version of the C library to support legacy native libraries.
  NDK-generated should never reference them directly. Instead, each shared library or
  executable should embed its own version of these symbols, provided by crtbegin_*.o

>  If your project is linked with "-nostdlib -Wl,--no-undefined", you need to provide
  your own __dso_handle because crtbegin_so.o isn't linked.  The content of __dso_handle
  doesn't matter.  eg.

    extern "C" {
      extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
      void *__dso_handle;
    }

- ARM: Fixed symbol decoder (used in objdump) for plt entries to generate more
  readable form function@plt

- X86: Removed the following symbols introduced in GCC 4.6/libgcc.a from X86's libc.so:
  __aeabi_idiv0, __aeabi_ldiv0, __aeabi_unwind_cpp_pr1, and __aeabi_unwind_cpp_pr2

- MIPS: Removed unused .ctors, .dtors, and .eh_frame in MIPS crt*_so.S.

- GDB: ndk-gdb now only takes the last line of output for ndk-build DUMP_XXXX.  This
  ensures that if Application.mk or Android.mk do print something with $(info ...),
  it doesn't get injected into the result of DUMP_XXX.

> See https://groups.google.com/d/msg/android-ndk/-/ew0lTWGr1UEJ


OTHER CHANGES:
---

- Removed arch-x86 and arch-mips headers from platforms/android-{3,4,5,8}.
  Those headers are incomplete to begin with, since both X86 and MIPS ABIs are only
  supported at API &ge; 9

- Simplified c++ include path in standalone package, eg. change

    <path>/arm-linux-androideabi/include/c++/4.6.x-google
  to
    <path>/include/c++/4.6/

>  See http://code.google.com/p/android/issues/detail?id=35279

- Enhanced ndk-build to recognize more C++ file extensions by default:

    .cc .cp .cxx .cpp .CPP .c++ .C

>  You may still use LOCAL_CPP_EXTENSION to override it

- Fixed an issue in samples/san-angeles about black/freeze frame
  at re-launch.

- Replaced deprecated APIs in NDK samples
  1. hello-gl2 from android-5 to android-7
  2. native-activity from android-9 to android-10
  3. native-audio from android-9 to android-10
  4. native-plasma from android-9 to android-10

>  See http://code.google.com/p/android/issues/detail?id=20017

- Added new branding for Android executables with a simpler scheme in section
  .note.android.ident (defined in crtbegin_static/dynamic.o) so that debugging
  tools can act accordingly.

>  The structure member and values are defined as follows:

    static const struct {
      int32_t namesz;  /* = 8,  sizeof ("Android") */
      int32_t descsz;  /* = 1 * sizeof(int32_t) */
      int32_t type;    /* = 1, ABI_NOTETYPE */
      char name[sizeof "Android"];  /* = "Android" */
      int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */
    }

>  Previous branding in section .note.ABI-tag is deprecated.

- Added a new script run-tests-all.sh which calls run-tests.sh and standalone/run.sh
  with various conditions.  Script run-tests.sh w/o --abi is also enhanced to compile
  most of tests for all supported ABI and run on all attached devices


-------------------------------------------------------------------------------
android-ndk-r8b
===

IMPORTANT BUG FIXES:
---

- Fixed LOCAL_SHORT_COMMANDS issues on darwin-x86 and windows cygwin environment
  and for static libraries.  List file generation is sped up, and it is no longer
  regenerated and causes whole project to be rebuilt every time.

- Fixed several issues in ndk-gdb

    * to pass flags "-e", "-d", "-s" to adb more consistently

    * to accept device serial name containing space

    * to also pull /system/bin/link, so gdb on host can set a breakpoint in
      __dl_rtld_db_dlactivity and be aware of linker activity (eg. rescan solib symbols
      when dlopen() is called)

- Fixed "ndk-build clean" in windows which failed to remove ./libs/\*/lib\*.so

- Fixed ndk-build.cmd to return non-zero ERRORLEVEL when make fails

- Fixed libc.so to no longer incorrectly export __exidx_start and __exidx_end symbols

- Fixed SEGV when unwinding stack pasts __libc_init for ARM and MIPS.

- Fixed \__start (in crtbegin_dynamic/static.o) to "call __libc_init" instead of
  "jump __libc_init", otherwise stack unwinding past __libc_init may get wrong return
  address and crash the program or do wield things.  With "call", return address is pushed
  on stack and unwinding stops correctly at _start.  Note that __libc_init never returns, so
  this fix wonʼt affect normal program execution.  But just in case it "does" return,
  jump to address 0 and halt.


IMPORTANT CHANGES:
---

- GCC 4.6 toolchain

  Add GCC 4.6 toolchain (binutils 2.21 with gold + GDB 7.3.x) to co-exists with
  the original GCC 4.4.3 toolchain (binutils 2.19 + GDB 6.6).  Note:

  * GCC 4.6 is the default.  You may set NDK_TOOLCHAIN_VERSION=4.4.3 in Application.mk
    to select the original one.

  * Gold linker support is only available for ARM and x86 architectures on linux-86
    and  darwin-x86 hosts.  It's not turned on by default.  Add
    "LOCAL_LDFLAGS += -fuse-ld=gold" in Android.mk to enable it.

  * You will need the new GDB to debug program compiled with -fPIE (including
    binaries in Jelly Bean image)

  * The binutils 2.21 ld also contain back-port of fixes from 2.22

   * Fixed "ld --gc-sections" which incorrectly retain zombie references to external
     libraries.  See http://sourceware.org/bugzilla/show_bug.cgi?id=13177 for detail.

   * Fixed ARM "strip" to preserve the original p_align and p_flags in GNU_RELRO section
     if they are valid.  Otherwise program built with -fPIE can't be debugged.
     http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/elf.c.diff?cvsroot=src&r1=1.552&r2=1.553

  * Sincos optimization is not enabled for compatibility with old platforms which don't have
    it.

- NX and relro/bind_now protections are enabled by default

  Add "--noexecstack" for assembler and "-z noexecstack" for linker to enable NX
  protection against buffer overflow attacks by enabling NX bit on stack and heap.

  Add "-z relro -z now" for linker to harden internal data sections after linking
  against security vulnerabilities due to memory corruption.  See

  http://www.akkadia.org/drepper/nonselsec.pdf (section 6)
  http://tk-blog.blogspot.com/2009/02/relro-not-so-well-known-memory.html

  For those who really needs it, these features can be disabled by
  1. Passing "--execstack" to assembler and "-z execstack" to linker to
     disable NX protection.
     Passing "-z norelro -z lazy" to linker to disable second protection.
  2. In NDK jni/Android.mk, set the following
     LOCAL_DISABLE_NO_EXECUTE=true: to disable "--noexecstack" and "-z noexecstack"
     LOCAL_DISABLE_RELRO=true: to disable "-z relro -z now"
  see $NDK/docs/ANDROID-MK.html for details

- Brand executables with .note.ABI-tag section

  Brand Android executable with .note.ABI-tag (in crtbegin_static/dynamic.o) for debugging
  tools to act accordingly.  The structure member and values are defined as follow.

    static const struct {
      int32_t	namesz;  /* = 4,  sizeof ("GNU") */
      int32_t	descsz;  /* = 6 * sizeof(int32_t) */
      int32_t	type;    /* = 1 */
      char	name[sizeof "GNU"];  /* = "GNU" */
      int32_t	os;      /* = 0 */
      int32_t	major;   /* = 2 */
      int32_t	minor;   /* = 6 */
      int32_t	teeny;   /* = 15 */
      int32_t	os_variant;  /* = 1 */
      int32_t	android_api; /* = 3, 4, 5, 8, 9, 14 */
    }


OTHER BUG FIXES:
---

- Backport several patches to fix MIPS issues.

  * http://sourceware.org/bugzilla/show_bug.cgi?id=12637
    mips-linux-gnu: relocation truncated to fit: R_MIPS_TLS_LDM

  * http://sourceware.org/bugzilla/show_bug.cgi?id=12845
    ld segfaults when using --gc-sections

  * http://sourceware.org/ml/binutils/2011-05/msg00198.html
    Refix MIPS GOT_PAGE counting

  * Follow warning symbol link in mips_elf_count_got_symbols.

  * Follow warning symbol link in mips_elf_allocate_lazy_stub.

  * Move MIPS .dynamic to the data segment, so that it is writable.
    Replace hard-coded 4096 with symbols for correct segment sizes for MIPS.

  * Remove -mno-shared as default in MIPS toolchain.  -fPIC (or -fpic if supported)
    is default for Android toolchain.  Without explicitly specifying one of
    -mshared, -fpic, -fPIC, -fpie, or -fPIE, MIPS compiler adds -mno-shared
    which turns off PIC.  Fixed it not to add -mno-shared as default.

- Fixed wrong package names in samples hello-jni and two-libs so tests project
  underneath can compile


OTHER CHANGES:
---

- New binaries locations

  * gdbserver is moved from toolchain/<arch-os-ver>/prebuilt/gdbserver to
    prebuilt/android-<arch>/gdbserver/gdbserver

  * x86 toolchain prefix is renamed from i686-android-linux- to i686-linux-android-

  * sources/cxx-stl/gnu-libstdc++/include and lib are moved to
    sources/cxx-stl/gnu-libstdc++/4.4.3 when compiled with 4.4.3 GCC, or
    sources/cxx-stl/gnu-libstdc++/4.6 when compiled with 4.6 GCC

  * libbfd.a and libintl.a are moved from lib/ to lib32/

- Header if_dl.h is removed from all platforms and architectures. AF_LINK and sockaddr_dl
    it describes are specpfic to BSD (ie. don't exist in Linux)

- Various scripts to rebuild/test NDK toolchain

  * Add build-mingw64-toolchain.sh to generate a new Linux-hosted toolchain that generates
    Win32 and Win64 executables.

  * Speed up download-toolchain-sources.sh by "clone" but only "checkout" the directories
    that we need to build the NDK toolchain binaries.

  * New build-host-gcc.sh and build-host-gdb.sh

  * Add tests/check-release.sh to check the content of a given NDK installation directory,
    or an existing NDK package.

  * Rewrite standalone tests: tests/standalone/run.sh


-------------------------------------------------------------------------------
android-ndk-r8
===

IMPORTANT BUG FIXES:
---

- Fixed a typo in GAbi++ implementation where result of dynamic_cast<D>(b)
  of base class object 'b' to derived class D is adjusted wrong
  (in the opposite direction from base class). See
  http://code.google.com/p/android/issues/detail?id=28721

- Fixed an issue in make-standalone-toolchain.sh which fails to copy
  libsupc++.*.


IMPORTANT CHANGES:
---

- Added support for the mips ABI.

>  This release of the Android NDK contains support for 'mips' ABI.
  To generate machine runs on MIPS-based Android devices, please add 'mips' to
  APP_ABI definition in your Application.mk, or 'all' to generate binaries for
  all currently supported ABI.  See docs/CPU-MIPS.html for details.

- You can build a standalone mips toolchain using the
  --toolchain=mipsel-linux-android-4.4.3 option when calling
  make-standalone-toolchain.sh. See docs/STANDALONE-TOOLCHAIN.html for more details.


OTHER BUG FIXES:
---

- Fixed ndk-build.cmd to ensure that ndk-build.cmd works correctly even if
  the user has redefined the SHELL environment variable (which can happen under
  the hood when installing a variety of development tools on Windows)


-------------------------------------------------------------------------------
android-ndk-r7c
===

This release of the NDK includes an important fix for Tegra2-based devices,
and a few additional fixes and improvements:

IMPORTANT BUG FIXES:
---

- Fixed GNU STL armeabi-v7a binaries to not crash on non-NEON devices.
  The files provided with NDK r7b where not configured properly, resulting
  in crashes on Tegra2-based devices and others when trying to use certain
  floating-point functions (e.g., cosf, sinf, expf).


IMPORTANT CHANGES:
---

- Added support for custom output directories through the NDK_OUT
  environment variable. When defined, this variable is used to store all
  intermediate generated files, instead of $PROJECT_PATH/obj.

  The variable is also recognized by ndk-gdb.

- Added support for building modules with hundreds or even thousand of source
  files by defining LOCAL_SHORT_COMMANDS to true in your Android.mk.

  This change forces the NDK build system to put most linker or archiver
  options into list files, to work-around command-line length limitations
  (particularly on Windows). See docs/ANDROID-MK.html for details.


OTHER BUG FIXES:
---

- Fixed android_getCpuCount() implementation in the cpufeatures helper
  library. The previous implementation only listed the cores that were
  active the first time the function was called. This behavior could
  provide results that were too low on devices that disable and enable
  cores dynamically.

-------------------------------------------------------------------------------
android-ndk-r7b
===

IMPORTANT BUG FIXES:
---

- Updated <sys/atomics.h> to avoid correctness issues on some multi-core
  ARM-based devices. Rebuild your unmodified sources with this version of the
  NDK and this problem should completely be eliminated. For more details, read
  docs/ANDROID-ATOMICS.html.

- Reverted to binutils 2.19 to try to fix debugging issues that
  appeared in NDK r7 (which switched to binutils 2.20.1).

- Fixed ndk-build on 32-bit Linux. A packaging error put a 64-bit version
  of the 'awk' executable under prebuilt/linux-x86/bin in NDK r7.

- Fixed native Windows build (ndk-build.cmd). Other build modes were not
  affected. The fixes include:

    * Removed an infinite loop / stack overflow bug that happened when trying
      to call ndk-build.cmd from a directory that was _not_ the top of your
      project path (e.g. any sub-directory of it).

    * Fixed a problem where the auto-generated dependency files were ignored.
      This meant that updating a header didn't trigger recompilation of sources
      that included it.

    * Fixed a problem where special characters in files or paths, other than
      spaces and quotes, were not correctly handled.

- Fixed the standalone toolchain to generate proper binaries when using
  -lstdc++ (i.e. linking against the GNU libstdc++ C++ runtime). You should
  use -lgnustl_shared if you want to link against the shared library
  version or -lstdc++ for the static version.

  See docs/STANDALONE-TOOLCHAIN.html for more details about this fix.

- Fixed gnustl_shared on Cygwin. The linker complained that it couldn't find
  libsupc++.a while the file was at the right location.

- Fixed cygwin C++ link when not using any specific C++ runtime through
  APP_STL.

OTHER CHANGES:
---

- When your application uses the GNU libstdc++ runtime, the compiler will
  no longer forcibly enable exceptions and RTTI. This change results in smaller
  code. If you need these features, you need to do either one of these:

     1/ Enable exceptions and/or RTTI explicitly in your modules or
        Application.mk. (recommended)

     2/ Define APP_GNUSTL_FORCE_CPP_FEATURES to 'exceptions', 'rtti' or both
        in your Application.mk. See docs/APPLICATION-MK.html for more details.

- ndk-gdb now works properly when your application has private services
  running in independent processes. It debugs the main application process,
  instead of the first process listed by 'ps', which is usually a service
  process.

- Fixed a rare bug where NDK r7 would fail to honor the LOCAL_ARM_MODE value
  and always compile certain source files (but not all) to 32-bit instructions.

- stlport: Refresh the sources to match the Android platform version. This
  update fixes a few minor bugs:

   - Fixed instantiation of an incomplete type.
   - Fixed minor == versus = typo
   - Use memmove instead of memcpy in string::assign
   - Added better handling of IsNANorINF, IsINF, IsNegNAN, etc..

  For complete details, see the commit log.

- stlport: Removed 5 un-necessary static initializers from the library.

- The GNU libstdc++ libraries for armeabi-v7a were mistakenly compiled for
  armeabi instead. This had no impact on correctness, but using the right
  ABI should provide for slightly better performance.

- the 'cpu-features' helper library was updated to report three optional
  x86 CPU features (SSSE3, MOVBE and POPCNT). See docs/CPU-FEATURES.html
  for more details.

- docs/NDK-BUILD.html was updated to mention NDK_APPLICATION_MK instead
  of NDK_APP_APPLICATION_MK to select a custom Application.mk file.

- cygwin: ndk-build no longer creates an empty "NUL" file in the current
  directory when invoked.

- cygwin: better automatic dependency detection. It previously didn't work
  properly in the following case:

    - When the cygwin drive prefix was not /cygdrive
    - When using drive-less mounts, e.g. when Cygwin would translate /home
      to \\server\subdir instead of C:\Some\Dir.

- cygwin: ndk-build does not try to use the native Windows tools under
  $NDK/prebuilt/windows/bin with certain versions of Cygwin and/or
  GNU Make.

-------------------------------------------------------------------------------
android-ndk-r7
===

IMPORTANT CHANGES:
---

- New official NDK APIs for Android 4.0 (a.k.a. API level 14),
  which adds the following native features to the platform:

     - Native multimedia API based on the Khronos Group OpenMAX AL&#0153;
       1.0.1 Standard.  New headers <OMXAL/OpenMAXAL.h> and
       <OMXAL/OpenMAXAL_Android.h> are provided to allow
       applications targeting this API level to perform multimedia output
       directly from native code using a new Android-specific buffer
       queue interface.  For more details, see docs/openmaxal/index.html
       and http://www.khronos.org/openmax/.

     - Updated the native audio API based on the Khronos Group OpenSL ES
       1.0.1&#0153; Standard.  API Level 14 can now decode compressed
       audio (e.g. MP3, AAC, Vorbis) to PCM.  For more details, see
       docs/opensles/index.html and http://www.khronos.org/opensles/.

- CCache support. To speed up large rebuilds, simply define the NDK_CCACHE
  environment variable to 'ccache' (or the path to your ccache binary), as in:

        export NDK_CCACHE=ccache

  The NDK build system will automatically use it when compiling any source
  file. For more information about CCache, see http://ccache.samba.org  

- You can now set your APP_ABI to 'all' to indicate that you want to build
  your NDK modules for all the ABIs supported by your given NDK release.

  This means that either one of these two lines in your Application.mk are
  equivalent with this release:

        APP_ABI := all
        APP_ABI := armeabi armeabi-v7a x86

  This also works if you define APP_ABI on the command-line, as in:

        ndk-build APP_ABI=all

  Which is a quick way to check that your project builds for all supported
  ABIs without changing its Application.mk file.

- Shorter paths to source and object files used in build commands.
  When invoking $NDK/ndk-build from your project path, the paths to the
  source, object and binary files passed to the build commands will be
  significantly shorter now because they are now passed relative to the
  current directory.

  This is useful when building projects with a lot of source files, to
  avoid limits on the maximum command line length supported by your host
  operating system.

  The behaviour is unchanged if you invoked ndk-build from a sub-directory
  of your project tree, or if you define NDK_PROJECT_PATH to point to a
  specific directory.

- New LOCAL_CPP_FEATURES variable in Android.mk, used to declare which C++
  features (RTTI or Exceptions) your module uses. This is especially handy
  if you have prebuilt modules that depend on them since this will ensure
  the final link will work correctly.

  See docs/ANDROID-MK.html and docs/CPLUSPLUS-SUPPORT.html for more details

- WARNING: VERY EXPERIMENTAL!!

     You can now build your NDK sources on Windows *without* Cygwin.
     Simply call the script 'ndk-build.cmd' from the Windows cmd.exe
     command-line, when in your project path.

     The script takes exactly the same arguments than the original
     ndk-build one.

     Note that the Windows NDK package comes with its own prebuilt
     binaries for GNU Make, Awk and other tools required by the build,
     i.e. you shouldn't need to install anything else to get a working
     build system.

     IMPORTANT: ndk-gdb doesn't work. You still need Cygwin to debug
                at the moment!

     This feature is still very experimental, but feel free to try it
     and report issues on the public forum (android-ndk@googlegroups.com)
     or the public bug database (http://b.android.com).

     Note that all samples and unit tests successfully compile with it.

IMPORTANT BUG FIXES:
---

- Imported shared libraries are now installed by default to the target
  installation location (i.e. libs/%lt;abi%gt;) if APP_MODULES is not
  defined in your Application.mk.

  This means that if a top-level module "foo" imports a module "bar", then
  both libfoo.so and libbar.so will be copied to the install location.

  Previously, only libfoo.so was, unless you listed 'bar' in your APP_MODULES
  too.

  If you define APP_MODULES explicitly, the behaviour is unchanged.

- Static library imports are now properly transitive. If top-level module
  'foo' imports static library 'bar' which imports static library 'zoo',
  the libfoo.so will now be linked against both libbar.a and libzoo.a.

- ndk-gdb now works correctly for activities with multiple categories
  in their MAIN intent filters.

OTHER CHANGES:
---

- docs/STABLE-APIS.html: Added missing documentation listing EGL
  as a supported stable API, starting from API level 9.

- Add a new C++ support runtime named "gabi++". More details about it
  are available in the updated docs/CPLUSPLUS-SUPPORT.html.

- The STLport C++ runtimes now support RTTI (no exceptions yet though).

- Add a new C++ support runtime named "gnustl_shared" corresponding to the
  shared library version of GNU libstdc++ v3 (GPLv3 license). See more
  info at docs/CPLUSPLUS-SUPPORT.html

- You can now list several file extensions in LOCAL_CPP_EXTENSION. As in:

        LOCAL_CPP_EXTENSION := .cpp .cxx

  To compile both foo.cpp and bar.cxx as C++ sources.

- Refreshed the EGL and OpenGLES Khronos headers to support more extensions.
  Note that this does *not* change the NDK ABIs for the corresponding
  libraries, since each extension must be probed at runtime by the client
  application.

  Which extensions are available depends on your actual device (and GPU
  drivers), not the version of the platform it provides.

  The header changes simply add new constants and types to make it easier
  to use the extensions why they have been probed with eglGetProcAddress() or
  glGetProcAddress(). Here is the list of newly supported extensions:

    GLES 1.x
    --------
    GL_OES_vertex_array_object
    GL_OES_EGL_image_external
    GL_APPLE_texture_2D_limited_npot
    GL_EXT_blend_minmax
    GL_EXT_discard_framebuffer
    GL_EXT_multi_draw_arrays
    GL_EXT_read_format_bgra
    GL_EXT_texture_filter_anisotropic
    GL_EXT_texture_format_BGRA8888
    GL_EXT_texture_lod_bias
    GL_IMG_read_format
    GL_IMG_texture_compression_pvrtc
    GL_IMG_texture_env_enhanced_fixed_function
    GL_IMG_user_clip_plane
    GL_IMG_multisampled_render_to_texture
    GL_NV_fence
    GL_QCOM_driver_control
    GL_QCOM_extended_get
    GL_QCOM_extended_get2
    GL_QCOM_perfmon_global_mode
    GL_QCOM_writeonly_rendering
    GL_QCOM_tiled_rendering

    GLES 2.0
    --------
    GL_OES_element_index_uint
    GL_OES_get_program_binary
    GL_OES_mapbuffer
    GL_OES_packed_depth_stencil
    GL_OES_texture_3D
    GL_OES_texture_float
    GL_OES_texture_float_linear
    GL_OES_texture_half_float_linear
    GL_OES_texture_npot
    GL_OES_vertex_array_object
    GL_OES_EGL_image_external
    GL_AMD_program_binary_Z400
    GL_EXT_blend_minmax
    GL_EXT_discard_framebuffer
    GL_EXT_multi_draw_arrays
    GL_EXT_read_format_bgra
    GL_EXT_texture_format_BGRA8888
    GL_EXT_texture_compression_dxt1
    GL_IMG_program_binary
    GL_IMG_read_format
    GL_IMG_shader_binary
    GL_IMG_texture_compression_pvrtc
    GL_IMG_multisampled_render_to_texture
    GL_NV_coverage_sample
    GL_NV_depth_nonlinear
    GL_QCOM_extended_get
    GL_QCOM_extended_get2
    GL_QCOM_writeonly_rendering
    GL_QCOM_tiled_rendering

    EGL:
    ----
    EGL_ANDROID_recordable
    EGL_NV_system_time

- docs/NATIVE-ACTIVITY.HTML: Fixed typo, the minimum API level
  should be 9, not 8 for native activities.

- removed many unwanted exported symbols from the link-time shared
  system libraries provided by the NDK. This ensures that code generated
  with the standalone toolchain doesn't risk to accidentally depend
  on a non-stable ABI symbol (e.g. any libgcc.a symbol that changes
  each time the toolchain used to build the platform is changed).

- download-toolchain-sources.sh: Script was updated to download the toolchain
  sources from android.googlesource.com, the new location for AOSP servers.

-------------------------------------------------------------------------------
android-ndk-r6b
===

This is a bug-fix release for NDK r6, no new features are provided.

IMPORTANT BUG FIXES:
---

- Fixed the multi-architecture build, i.e. when using APP_ABI="armeabi x86"

- Fixed location of prebuilt STLport binaries in the NDK release package.
  (A bug in the packaging script placed them in the wrong location).

- Fixed atexit() usage in shared libraries with the x86 standalone toolchain.

- Fixed make-standalone-toolchain.sh --arch=x86 (it failed to copy the
  proper GNU libstdc++ binaries to the right location).

- Fixed standalone toolchain linker warnings about missing definition and
  size for '__dso_handle' symbol (arm only).

- Fixed the inclusion order of $(SYSROOT)/usr/include for x86 builds,
  see http://code.google.com/p/android/issues/detail?id=18540

- Fixed the definitions of ptrdiff_t and size_t in x86-specific system
  when used with the x86 standalone toolchain.

-------------------------------------------------------------------------------
android-ndk-r6
===

IMPORTANT CHANGES:
---

- Official support for the x86 ABI.

  This release of the Android NDK now provides support for the 'x86' ABI.
  This allows you to generate machine code that runs on future x86-based
  Android devices.

  Note that by default, code is still generated for ARM-based devices.
  You can however add 'x86' to your APP_ABI definition in your
  Application.mk. For example, the following line instructs ndk-build
  to build your code for three distinct ABIs:

    APP_ABI := armeabi armeabi-v7a x86

  Unless you rely on ARM-based assembly sources, you shouldn't need to touch
  your Android.mk files to build x86 machine code.

  For all details regarding x86 support, please read the new documentation
  file named docs/CPU-X86.html.

  Don't hesitate to file NDK bugs related to x86 at http://b.android.com

- You can build a standalone x86 toolchain using the --toolchain=x86-4.4.3
  option when calling make-standalone-toolchain.sh. See
  docs/STANDALONE-TOOLCHAIN.html for more details.

- The new 'ndk-stack' tool can be used to translate stack traces
  (as reported by adb logcat in case of crash in native code) into
  something more readable, i.e. containing function / source file /
  line number information corresponding to each stack frame.

  For more information and usage example, see the new documentation
  file docs/NDK-STACK.html

OTHER FIXES &amp; CHANGES:
---

- The arm-eabi-4.4.0, which had been deprecated since NDK r5, has been
  finally removed from the NDK distribution.

- Support a project.properties file in the application's directory
  instead of default.properties. This is in preparation for future SDK Tools
  changes.

-------------------------------------------------------------------------------
android-ndk-r5c
===

This release fixes a few bugs in r5b. There are no new features.

IMPORTANT BUG FIXES:
---

- Fixed a typo that prevented LOCAL_WHOLE_STATIC_LIBRARIES to work correctly
  with the new toolchain. Also properly document this variable in
  docs/ANDROID-MK.html.

- Fixed a bug where code linked against gnustl_static would crash when run
  on Android platform releases older than 2.2.

- <android/input.h>: Two functions in this header file, introduced
  by API level 9 (a.k.a. 2.3) were incorrect and have been fixed. While
  this breaks the source API, the binary interface to the system is
  unchanged.

  The functions missing a third 'history_index' parameter. They correct
  definition is now:

      float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event,
                                           size_t pointer_index,
                                           size_t history_index);

      float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event,
                                           size_t pointer_index,
                                           size_t history_index);

- Updated the android-9 C library arm binary to correctly expose at link time
  new functions that were added to it in Gingerbread (e.g. pthread_rwlock_init).

- Fixed a bug that made gdbserver crash on misc. Honeycomb devices (e.g.
  the Motorola Xoom).

OTHER FIXES &amp; CHANGES:
---

- Object files are now always linked in the order they appear in
  LOCAL_SRC_FILES. This was not the case previously because the files
  were grouped by source extensions instead.

- download-toolchain-sources.sh: Fixed a silly bug that prevented the
  --git-date option to work properly when downloading the master branch.

- Fix an issue where a module could import itself, resulting in an infinite
  loop in GNU Make.

- When import-module fails, it now prints the list of directories
  that were searched. This is useful to check that the NDK_MODULE_PATH
  definition used by the build system is correct.

- When import-module succeeds, it now prints the directory where the module
  was found to the log (visible with NDK_LOG=1).

- <pthread.h>: Fixed the definition of PTHREAD_RWLOCK_INITIALIZER for
  android-9 API level and higher.

- Fixed a bug where LOCAL_ARM_NEON was defined to true would make the build
  fail (typo in build/core/build-binary.mk)

- Fixed a bug that prevented the compilation of .s assembly files
  (.S files were ok).

- Speed-up the build of debuggable applications when there is a very
  large number of include directories in a project.

- ndk-gdb: Better detection of 'adb shell' failures (improves error messages).

- ndk-build: Fix a rare bug that appeared when trying to perform parallel
  builds of debuggable projects.


-------------------------------------------------------------------------------
android-ndk-r5b
===

This release fixes a few bugs in r5. There are no new features.

IMPORTANT BUG FIXES:
---

- Fix a compiler bug in the arm-linux-androideabi-4.4.3 toolchain.
  The previous binary generated invalid thumb instruction sequences when
  dealing with signed chars. This problem was first reported on the
  android-ndk forum and fixed by the following change in the toolchain
  sources:

        https://review.source.android.com/#change,19474

- docs/CPLUSPLUS-SUPPORT.html: Add missing documentation for the
  "gnustl_static" value for APP_STL, that allows you to link against
  a static library version of GNU libstdc++.

- ndk-build: Fix a bug that created inconsistent dependency files when a
  compilation error occurred on Windows, preventing building properly after
  the error was fixed in the source code.

- ndk-build: Fix a Cygwin-specific bug where using very short paths for
  the Android NDK installation or the project path could lead to the
  generation of invalid dependency files, making incremental builds
  impossible.

- Fix a typo that prevented the cpufeatures library to work correctly
  with the new NDK toolchain.

- Linux toolchain binaries now run on Ubuntu 8.04 or higher.
  More specifically, the r5 binaries did require GLibc 2.11 on the host
  system, and refused to run with previous releases due to an ABI mismatch
  in the GNU C Library. The r5b binaries are generated with a special
  toolchain that instead targets GLibc 2.7 or higher.

- GNU libstdc++ will not crash anymore when printing floating-point values
  through i/o streams.

OTHER FIXES &amp; CHANGES:

- ndk-build: Speed-up the Cygwin build by avoiding calling "cygpath -m"
  from GNU Make for each and every source or object file. This was a problem
  for users with very large source trees.

  In case this doesn't work properly, define NDK_USE_CYGPATH=1 in your
  environment to use 'cygpath -m' as usual.

  Also, if 'cygpath' is not in your path, completely ignore it
  (seems to be enough to run the NDK under MSys).

- ndk-build: Handle installation paths containing spaces when checking
  cygwin installation. Before that, the script complained that the user
  was using an incorrect version of GNU Make (even if he had the right one).

- Fixed a typo that prevented several NDK_MODULE_PATH to work properly when
  it contained multiple directories separated with ":"

- prebuilt-common.sh: Make the script check the compiler directly for 64-bit
  generated machine code, instead of relying on the host tag. That should
  allow the 32-bit toolchain to rebuild properly on Snow Leopard.

- prebuilt-common.sh: Fix the toolchain rebuild scripts to work when
  using a 32-bit host toolchain.

- <netinet/in.h>: Add missing declaration for INET_ADDRSTRLEN
- <netinet/in6.h>: Add missing declaration for IN6_IS_ADDR_MC_NODELOCAL
  and IN6_IS_ADDR_MC_GLOBAL.

- <asm/byteorder.>: Replaced 'asm' with '__asm__' to allow compilation
  with -std=c99. See https://review.source.android.com/#change,20076

- standalone toolchain: The -fpic flag is now the default for the
  arm-linux-androideabi toolchain, instead of -fPIC. This avoids a performance
  degradation when compared to the old android-eabi configuration.

  This only affects users of the standalone toolchain. The NDK build script
  always enforced -fpic implicitly.

-------------------------------------------------------------------------------
android-ndk-r5
===

IMPORTANT BUG FIXES:
---

- Allow dlclose() to properly call static C++ destructors when unloading
  a shared library. This requires changes in both the C library and the
  build system. IMPORTANT: This feature is only available for API level 9.

- Fix packaging error for system libraries of level 5 and 8. The libraries
  bundled with the NDK and used at link time were not the correct version,
  and this prevented linking against certain symbols appropriately.

- ndk-gdb: do not start activity unless --start or --launch is used.
  (the documentation was correct, the implementation wrong)

- The system headers for all API levels have been cleaned up and will
  not provide the declarations of functions that are not available in
  the corresponding system libraries.

IMPORTANT CHANGES:
---

- Support for API level 9, (a.k.a. Android 2.3) which adds the following
  native features to the platform:

     - Native audio API based on the Khronos Group OpenSL ES&#0153; 1.0.1 Standard.
       New headers <SLES/OpenSLES.h> and <SLES/OpenSLES_Android.h>
       are provided to allow applications targeting this API level to perform
       audio input, output and processing directly from native code.

     - Native activity support, i.e. the ability to build applications that
       are coded entirely in C or C++. More precisely, such applications still
       run inside a VM, and will have to access most of the platform's features
       using JNI (i.e. native code calling VM methods). However, this also
       comes with a series of headers and libraries to implement the following
       directly from native code:

          - activity lifecycle management.
          - user input handling (touch, keyboard, trackball, ...).
          - window management (including accessing the pixel buffer).
          - sensor listeners (e.g. accelerometer, compass, ...).
          - hardware configuration management.
          - easily reading assets out of an APK from native code.
          - access to the storage manager, a new feature of Android X.X
            that allows one to provide Opaque Binary Objects containing
            large amounts of data outside of the APK.

       See the documentation in docs/STABLE-APIS.html for more details.

       Note that most of these new features are targeted at game developers.

- Improved gdbserver binary to allow debugging _threaded_ programs properly
  with ndk-gdb (the previous binary could only set breakpoints on the main
  thread).

  IMPORTANT: THIS ONLY WORKS IF YOU RUN ON ANDROID 2.3 OR HIGHER.

  The root cause of the problem is a platform bug that was only fixed in
  2.3. If you try to debug on a previous platform, the gdbserver binary
  will only be able to set breakpoints on the main thread.

  For more information, see the specific section in docs/NDK-GDB.html.

- Easier debuggable builds: just invoke ndk-build while defining the
  NDK_DEBUG variable to 1, as in:

      $NDK/ndk-build NDK_DEBUG=1

  This will have the same result that setting the android:debuggable="true"
  in the <application> element of your AndroidManifest.xml file. See the
  file docs/NDK-BUILD.html for more details.

  Note that you will need to use the SDKr8 build tools to use this feature
  properly!

- Refresh of system C++ headers:

     - Headers have been moved out of the platform directory hierarchy.
       This is to prevent conflicts with other STLs like STLport or the
       GNU libstdc++ which provide their own version of the headers, but
       does not affect your builds.

     - The list of headers has grown to include the following:

            cassert, cctype, cerrno, cfloat, climits, cmath,
            csetjmp, csignal, cstddef, cstdint, cstdio, cstdlib,
            cstring, ctime, cwchar, new, typeinfo, utility

    Note that they still correspond to our minimal C++ runtime, no new feature
    was introduced here.

- Support for C++ exceptions and RTTI. See docs/CPLUSPLUS-SUPPORT.html for
  all details (and limitations).

- STLport implementation: Add sources and prebuilt binaries for a port of
  the STLport C++ Standard Library (www.stlport.org), and an easy way to use
  it at build time by defining APP_STL in your Application.mk. See
  docs/APPLICATION-MK.html and docs/CPLUSPLUS-SUPPORT.html for all details.

- GNU libstdc++ implementation: Available as a static library that you can
  select for your application through APP_STL. See docs/CPLUSPLUS-SUPPORT.html
  for all details.

- Add support for prebuilt libraries with the PREBUILT_SHARED_LIBRARY and
  PREBUILT_STATIC_LIBRARIES build scripts. See the new documentation
  file named docs/PREBUILTS.html for explanations and usage examples.

- Support for module exports: A module can now define a set of compiler or
  linker flags that will be automatically 'imported' by any other module that
  depends on it, through LOCAL_STATIC_LIBRARIES or LOCAL_SHARED_LIBRARIES.

  This is achieved with the help of new Android.mk variables named
  LOCAL_EXPORT_CFLAGS, LOCAL_EXPORT_CPPFLAGS, LOCAL_EXPORT_C_INCLUDES and
  LOCAL_EXPORT_LDLIBS. See docs/ANDROID-MK.html for mode documentation, and
  a 'samples/module-exports' for a sample project that uses this.

- Add support to specify a different file name for generated files, through
  the new LOCAL_MODULE_FILENAME variable. See docs/ANDROID-MK.html for an
  example.

- Add support for module imports, through the NDK_MODULE_PATH environment
  variable and the new 'import-module' function. This allows you to avoid
  hard-coding the path of third-party modules into your project files.

  See docs/IMPORT-MODULE.html for details.

- Add the content of LOCAL_C_INCLUDES to gdb.setup to make native debugging
  easier. Also fixes an issue that prevented clean parallel builds of
  debuggable applications to work correctly. This fixes an error message that
  said:

      /bin/sh: <project>/libs/armeabi/gdb.setup: No such file or directory

  When doing a "ndk-build -j<number>", with <number> bigger than 1.

- Add support for assembly-level source filtering. See the description of
  LOCAL_FILTER_ASM in docs/ANDROID-MK.html for more details. This can be useful
  for certain kinds of obfuscation tasks.

- This NDK comes with a new toolchain (named arm-linux-androideabi-4.4.3)
  which provides many benefits, including:

     - Better code generation than the previous one (gcc-4.4.0)
     - On Windows, the binaries do not depend on Cygwin anymore.
     - The ability to use it as a stand-alone cross-compiler
       (see docs/STANDALONE-TOOLCHAIN.html for all details).

  The binaries for gcc-4.4.0 are still provided for backwards compatibility.
  Use NDK_TOOLCHAIN=arm-eabi-4.4.0 in your environment to force its usage.
  Note that it is now deprecated and will be removed in a future NDK release.

  IMPORTANT: The old toolchain doesn't properly support exceptions, RTTI,
             STLport and GNU libstdc++.

  The binaries for the already-deprecated gcc-4.2.1 have been removed.

- The 'cpufeatures' library has been updated to provide better architecture
  and features detection (including a work-around for buggy ARMv6 kernels
  which report an architecture version of 7).

  The library is now also available as an import module, to simplify its
  usage in your build scripts. See the updated docs/CPU-FEATURES.html file
  for details.

  NOTE: Please update your Android.mk to use module imports as soon as
        possible. The location $NDK/source/cpufeatures/ is deprecated
        and will be removed in a future NDK release. Avoid referencing
        it directly in your build scripts!

OTHER FIXES AND CHANGES:
---

- Reduced the size of generated binaries by using --strip-unneeded
  instead of --strip-debug. This gets rid of mor symbol table entries
  in release shared libraries and executables, without impacting
  runtime execution.

- Fix bad automatic dependency tracking when using multiple source
  sub-directories.

- The path to system headers is now included last in the compilation command
  line. This prevents conflicts with source code that define their own headers
  with similar names (e.g. a custom "err.h" was ignored, because the system
  <err.h> was used instead).

- Update documentation for 'my-dir' function to explain that, due to the
  way GNU Make works, it really returns the path of the last included
  Makefile (instead of the current one). Also provide examples on how
  to deal with it.

- make-release.sh: Now has an --out-dir=<path> option to specify the
  output directory where the packages are going to be copied. Also
  ensure that generated packages have go+r permissions.

- ndk-build will now properly escape arguments. This means that something
  like this:

     ndk-build  MY_CFLAGS="-DFOO -DBAR"

  will now work correctly.

- Add --git-http option to download-toolchain-sources.sh and
  rebuild-all-prebuilt.sh in order to download sources from
  android.git.kernel.org through HTTP.

- ndk-gdb: properly launch activities for which name does not contain any dot.

- ndk-gdb: add --delay=<timeout> option to specify a delay in seconds
  between activity launch and gdbserver attach. This is needed because certain
  activities can take a long time to properly launch. The default delay is
  also increased to 2 seconds (instead of 1).

- build/tools/build-gcc.sh: copy the sysroot to the build directory. This
  avoids the generated toolchain binaries from hard-coding host build paths.

- Platform files are now under $NDK/platforms instead of $NDK/build/platforms

- Toolchain files are now under $NDK/toolchains instead of
  $NDK/build/toolchains and $NDK/build/prebuilt.

- Release and debug objects are stored under two different directories now
  (i.e. obj/local/<abi>/objs and obj/local/<abi>/objs-debug). This
  prevents rebuilding *everything* when you switch between these two modes,
  which can be a real time-saver for complex projects.

- Fixed a bug that duplicated the LOCAL_LDFLAGS in the final link command
  when LOCAL_ALLOW_UNDEFINED_SYMBOLS was not set to 'true'

-------------------------------------------------------------------------------
android-ndk-r4b
===

This release fixes a few bugs in r4 scripts. There are no new features.

OTHER FIXES &amp; CHANGES:
---

- build/tools/rebuild-all-prebuilt.sh: mktemp expects 'XXXXXX' instead of 'XXX'.
  Fix the script (and others in the same directory) to do that properly.

- ndk-gdb: check the target device's API level, and dump an error message if
  it is not at least 8 (Android 2.2 a.k.a. Froyo). Fix script to properly
  remove control characters like '\r' from adb shell's output. Also fix
  script to work properly with OS X's BSD awk.

- ndk-build: Make AndroidManifest.xml optional. Now the build scripts will try
  to look for jni/Android.mk if no manifest is found. If you don't use this,
  you can also define NDK_PROJECT_PATH to point to your tree.

  Also, on Windows, check that a Cygwin-compatible make executable is being
  used, and dump a readable help message to solve the issue if this is not
  the case.

- Place generated binaries under $PROJECT_PATH/obj/ instead of
  $PROJECT_PATH/bin/ndk/. The 'bin' directory is sometimes cleaned
  by the JDT, resulting in the inability to properly load symbol versions
  of the shared libraries when running ndk-gdb.

- Warn when sources with unsupported extensions are used in LOCAL_SRC_FILES.
  Previous behaviour was to silently ignore them.

- Set the optimization mode to 'debug' automatically if the manifest sets
  android:debuggable to 'true'. You can override this by using
  'APP_OPTIM := release' in your Application.mk, or by adding '-O2' to
  your LOCAL_CFLAGS.

  Note that even in release mode, the NDK build scripts will produce
  binaries with symbols under obj/local/<abi>/ that will be used for
  debugging with gdb. However, the debugger will have a harder time to
  print proper local variable values that have been optimized out or
  even set breakpoints properly.

-------------------------------------------------------------------------------
android-ndk-r4
===

IMPORTANT BUG FIXES:
---

- The <fenv.h> header was not placed in the correct location and could not
  be found by normal builds.

IMPORTANT CHANGES:
---

- On Windows, Cygwin 1.7 or higher is now required. The NDK will not
  work properly with Cygwin 1.5 which is now officially obsolete
  anyway.

- Simplified build system: You no longer need to run build/host-setup.sh
  or modify anything under $NDK_ROOT/apps/. Instead, just invoke the
  new 'ndk-build' script from your application's project directory, or
  one of its sub-directories.

  See docs/OVERVIEW.html and docs/NDK-BUILD.html for more details.

  NOTE: For compatibility purpose, you can still define projects
        through $NDK_ROOT/apps/<name> though.

        However, not that sample applications have moved from
        'apps/<name>/project' to 'samples/<name>' and now must
        be built with 'ndk-build'. The source code of pre-existing
        samples didn't change though.

- Easy native debugging support when running debuggable applications
  on Android 2.2 or higher, through the new 'ndk-gdb' helper script.
  See docs/NDK-GDB.html for details.

- Support for hardware FPU. This is through the new 'armeabi-v7a' ABI
  corresponding to ARMv7-a class devices.

  Note that by default, the NDK will still generate machine code for the old
  'armeabi' ABI (ARMv5TE based) which is supported by all official Android
  system images to date.

  You will need to define APP_ABI in your Application.mk file to change this.
  See docs/APPLICATION-MK.html

  More details about ABIs is now available in docs/CPU-ARCH-ABIS.html

- A small static library named 'cpufeatures' is provided with source code
  and can be used at runtime to determine the CPU features supported by the
  target device. It should run on all Android platforms, starting from 1.5.

  For more information, see docs/CPU-FEATURES.html

- Support for the optional ARM Advanced SIMD (a.k.a. NEON) instruction set
  extension through the use the LOCAL_ARM_NEON variable in Android.mk, or
  the '.neon' suffix when listing source files.

  Neon is an *optional* instruction set extension, and not all Android ARMv7
  devices will support it. You will need to use the 'cpufeatures' library to
  determine if such code can be used at runtime, and provide alternate code
  paths if this is not the case. This is similar to MMX/SSE/3DNow on x86
  platforms.

  For more information, see docs/CPU-ARM-NEON.html

- Added a new sample (hello-neon) to demonstrate usage of 'cpufeatures'
  and NEON intrinsics and build support.

- Added <android/bitmap.h>, a new stable API available from android-8
  (a.k.a. Android 2.2) to reliably access the pixel buffer of an
  android.graphics.Bitmap object from native code. See docs/STABLE-API.html
  and the new sample program under 'samples/bitmap-plasma' for details
  and usage example.

- Support the NX (No Execute) security feature, where special sections
  are added to the generated shared libraries to instruct the kernel
  that code shall not be executed from the heap and stack by default.

  See docs/ANDROID-MK.html to see how to disable this, plus reference
  links for more information.

OTHER FIXES AND CHANGES:
---

- support the .s extension for raw assembly sources (.S is already supported
  but the input files are parsed by the C-preprocessor before being sent to
  the assembler).

- build/host-setup.sh has been removed. There is no need for a 'setup' step
  when using the NDK for the first time. All host-specific autodetection and
  basic tool sanity checking have been moved to the build scripts themselves.

- APP_MODULES in Application.mk is now optional. If not defined, the NDK
  will simply build _all_ the modules that are declared from your Android.mk.

  You can still use APP_MODULES to restrict the set of modules you want to
  build. Note that the NDK now computes the transitive dependencies of these
  modules for you now. See docs/APPLICATION-MK.html for details.

- docs/STABLE-APIS.html: Add missing section for Dynamic Linker Library
  (libdl.so). It is actually supported by all API levels.

- build/tools/download-toolchain-sources.sh: Use 'master' branch by default
  instead of the 'eclair' one.

- build-toolchain.sh: Allow ad-hoc patching of toolchain sources when rebuilding
  them. This is primarily to ease development. All you need to do is put a patch
  under build/tools/toolchain-patches/<foo>/<name>.patch, and it will be applied
  with 'patch -p1' into the <foo> directory of the unpacked toolchain sources
  before the configure step.

- docs/CPU-ARCH-ABIS.html: Mention the experimental 'x86' ABI.

- build/core/mkdeps.sh: Removed obsolete script.

- the NDK build script now only parses the Application.mk and Android.mk of
  the applications listed by APP. The error messages when APP is empty or
  malformed have also been improved.

- removed the annoying 'the mangling of 'va_list' has changed in GCC 4.4'
  warning when building with GCC 4.4.0 for ARM.

- C Library header fixes:

    For all platforms:

        - <arpa/inet.h>: no longer includes <netinet/in6.h>.
        - <ctype.h>: better inlining with -ansi option.
        - <mntent.h>: add missing include for <stdio.h>.
        - <netinet/in.h>: include <netinet/in6.h> and define in6addr_any +
          in6addr_loopback.
        - <netinet/in6.h>: add IPV6_JOIN_GROUP, IPV6_LEAVE_GROUP,
          IN6ADDR_ANY_INIT, ipv6mr_interface.
        - <sys/epoll.h>: add missing C++ inclusion guards.
        - <sys/resource.h>: add missing rlim_t declaration.
        - <sys/system_properties.h>: add missing C++ inclusion guards.
        - <time64.h>: add missing C++ inclusion guards.
        - <netdb.h>: move h_errno declaration inside C++ inclusion guards.

- C Library changes:

    For android-8 (a.k.a. Android 2.2):

        - <dlfcn.h>: add DL_info and dladdr().
        - <err.h>: add err(), warn() and other variants.
        - <regex.h>, <fts.h>, <sys/queue.h>: added
        - <pthread.h>: add pthread_condattr_t
        - <sched.h>: added proper clone() declaration (and implementation).
        - <signal.h>: added killpg().
        - <stdio.h>: add fdprintf() and vfdprintf().
        - <stdlib.h>: fix ptsname_r() signature in declaration. previous
          implementation was broken anyway.
        - <unistd.h>: add getusershell(), setusershell(), endusershell(),
          ttyname(), ttyname_r(), TEMP_FAILURE_RETRY. Fix usleep() signature
          (now returns int).
        - <wchar.h>: add fake mbstowcs() and wcstombs().

  More details available under docs/system/libc/CHANGES.html

-------------------------------------------------------------------------------
android-ndk-r3
===

IMPORTANT BUG FIXES:
---

- Fix build/host-setup.sh to execute as a Bourne shell script (again)

- Make target shared libraries portable to systems that don't use the exact
  same toolchain. This is needed due to differences in libgcc.a implementations
  between gcc 4.2.1 and 4.4.0. This change ensures that generated machine
  code doesn't depend on helper functions provided by the Android platform
  runtime.


IMPORTANT CHANGES:
---

- GCC 4.4.0 is now used by default by the NDK. It generates better code than
  GCC 4.2.1, which was used in previous releases. However, the compiler's C++
  frontend is also a lot more pedantic regarding certain template constructs
  and will even refuse to build some of them.

  For this reason, the NDK also comes with GCC 4.2.1 prebuilt binaries, and
  you can force its usage by defining NDK_TOOLCHAIN in your environment to
  the value 'arm-eabi-4.2.1'. For example:

        export NDK_TOOLCHAIN=arm-eabi-4.2.1
        make APP=hello-jni

  Note that only the 'armeabi' ABI is supported by the 4.2.1 toolchain. We
  recommend switching to 4.2.1 *only* if you encounter compilation problems
  with 4.4.0.

  The 4.2.1 prebuilt binaries will probably be removed from a future release
  of the Android NDK, we thus *strongly* invite you to fix your code if such
  problems happen.

- Support for OpenGL ES 2.0. This is through the new 'android-5' platform to
  reflect Android 2.0 (previously the Eclair branch). This is merely a copy
  of android-4 that also includes headers and libraries for OpenGL ES 2.0.

  See the sample named "hello-gl2" for a *very* basic demonstration. Note that
  OpenGL ES 2.0 is currently *not* available from Java, and must be used
  through native code exclusively.

  IMPORTANT: OpenGL ES 2.0 is not supported in the Android emulator at this
             time. Running/testing any native code that depends on it thus
             requires a real device.

- The NDK build script will now remove installed binaries from the application
  project's path before starting the build. This ensures that:

  - if the build fails for some reason, a stale/obsolete file is not left in
    your application project tree by mistake.

  - if you change the target ABI, a stale/obsolete file is not left into the
    folder corresponding to the old ABI.


- Updated the STABLE-APIS.html document to clarify the OpenGL ES 1.0/1.1/2.0
  issues regarding specific devices (i.e. 1.0 supported everywhere, 1.1 and
  2.0 on specific devices only, need for <uses-feature> tag in manifest).


OTHER FIXES AND CHANGES:
---

- Actually use the awk version detected by host-setup.sh during the build.

- Only allow undefined symbols when LOCAL_ALLOW_UNDEFINED_SYMBOLS is set
  to 'true', just like the documentation says it works. Also fix a typo
  in CLEAR_VARS that prevented this variable from being cleared properly.

- Simplified build/tools/make-release.sh, the --prebuilt-dir option is
  gone, and --help will dump a clearer description of expected options
  and input files.

- Added --prebuilt-ndk=FILE option to build/tools/make-release.sh script to
  package a new experimental NDK package archive from the current source tree
  plus the toolchain binaries of an existing NDK release package. E.g.:

    build/tools/make-release.sh \
       --prebuilt-ndk=/path/to/android-ndk-1.6_r1-linux-x86.zip

  will generate a new NDK package in /tmp/ndk-release that contains the most
  up-to-date build scripts, plus the toolchain binaries from 1.6_r1 (which
  are not in the git repository).

  Also added the --no-git option to collect all sources from the current
  NDK root directory, instead of the list given by 'git ls-files'. This can
  be useful if you don't want to checkout the whole 'platform/development'
  project from repo and still work on the NDK.

  This change is to help people easily package experimental NDK releases to
  test and distribute fixes and improvements.

- Remove bash-isms from build/tools/build-toolchain.sh. Now it's possible to
  build it with the 'dash' shell on Debian-based systems (tested on Ubuntu 8.04)

- Remove bash-ism from build/tools/build-ndk-sysroot.sh

- Refresh C library headers for all platforms:

    - make <endian.h> simply include <sys/endian.h>
    - make <stdint.h> properly declare 64-bit integer types with a C99 compiler
    - add missing <sys/types.h> to <strings.h>
    - add GLibc-compatible macro aliases (st_atimensec, st_mtimensec and
      st_ctimensec) to <stat.h>
    - add missing declaration for tzset() in <time.h>

- Added build/tools/download-toolchain-sources.sh, a script that allows you
  to download the toolchain sources from the official open-source repository
  at android.git.kernel.org and nicely package them into a tarball that can
  later be used by build/tools/build-toolchain.sh to rebuild the prebuilt
  binaries for your system.

- Updated build/tools/build-toolchain.sh to support the tarballs generated
  by download-toolchain-sources.sh with the --package=<file> option. This
  also builds both gcc 4.2.1 and 4.4.0, adding support for armeabi-v7a to
  gcc 4.4.0.

-------------------------------------------------------------------------------
android-ndk-1.6_r1
===

IMPORTANT BUG FIXES:
---

- Fix build/host-setup.sh to:
  * execute as a Bourne shell script
  * remove unused host gcc dependency
  * improve Windows host auto-detection
  * add GNU Make version check
  * add Nawk/Gawk check
  * ensure that the script is run from $NDKROOT as build/host-setup.sh
  * add --help, --verbose, --no-awk-check and --no-make-check options

- Properly add sysroot library search path at build time. This makes a line
  in Android.mk like:

     LOCAL_LDLIBS := -lz

  Actually work correctly, instead of having the linker complaining that it
  could not find the corresponding libz.so library. Also clear LOCAL_LDLIBS
  in $(CLEAR_VARS) script.


IMPORTANT CHANGES:
---

- The 'sources' directory is gone. The NDK build system now looks for
  $(APP_PROJECT_PATH)/jni/Android.mk by default. You can override this with
  the new APP_BUILD_SCRIPT variable in Application.mk

  For example, the 'hello-jni' sample uses the following files:

    apps/hello-jni/project/jni/Android.mk
    apps/hello-jni/project/jni/hello-jni.c

  The 'apps/<name>' directory is still needed in this release though.

- Change LOCAL_CFLAGS / LOCAL_CPPFLAGS to work as in the full Android build
  system. This means that:

    - LOCAL_CFLAGS   is now used for *both* C and C++ sources  (was only for C)
    - LOCAL_CPPFLAGS is now used for C++ sources only (was for both C and C++)
    - LOCAL_CXXFLAGS is used like LOCAL_CPPFLAGS but is considered obsolete.
      (will disappear in next release)

  Also fixed APP_CPPFLAGS / APP_CFLAGS / APP_CXXFLAGS correspondingly.

- Rename build/platforms/android-1.5 to build/platforms/android-3 to match
  the Android API level instead of the marketing speak.

  Also add a new build/platforms/android-4, and make the build system select
  which platform to use based on the content of the project file named
  $(APP_PROJECT_PATH)/default.properties.

- Add OpenGL ES 1.x headers and libraries to the android-4 stable APIs.
  (NOTE: they are *not* available for android-3)

  Also provide a small port of the "San Angeles Observation" demo to show
  how to make a simple Android application that uses them.


OTHER FIXES AND CHANGES
---

- Ensure that the __ANDROID__ macro is always defined when building code
  with the NDK. Normally, the macro must be defined by the toolchain
  automatically to indicate that you're targeting the Android runtime.

  This works for the new arm-linux-androideabi toolchain, but there is
  a bug in the way we built the arm-eabi one, so add the flag manually
  through the NDK build script for it.

  Note that the ANDROID macro, is now deprecated. While it is still defined
  by the NDK, you should modify your code to test against __ANDROID__ instead!

- Generate thumb binaries by default.

- Add support for LOCAL_ARM_MODE in Android.mk.

- Add support for the '.arm' suffix in source file names to force the
  compilation of a single source in ARM (32-bit) mode.

- Generate proper unoptimized versions of binaries when APP_OPTIM := debug

- Add support for LOCAL_C_INCLUDES in Android.mk

- Fix compilation of assembler files (e.g. foo.S)

-------------------------------------------------------------------------------
android-ndk-1.5_r1 released.
===