<html><body><pre>Android NDK ChangeLog:

-------------------------------------------------------------------------------
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 &lt;tool-path&gt;/bin/clang
     and &lt;tool-path&gt;/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/&lt;arch&gt;/analyzer.

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

- Added MCLinker for 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/

- Enabled OpenMP for GCC 4.4.3/4.6/4.7:  Add the following flags
     LOCAL_CFLAGS += -fopenmp
     LOCAL_LDFLAGS += -fopenmp

  Please find examples in tests/device/test-openmp

- 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
  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 &lt;chrono&gt; 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 &lt;chrono&gt; 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 &lt; 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

- 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 See http://b.android.com/40192

- Fixed ndk-build won't build if makefile has tailing whitespace in
  LOCAL_PATH definition
  See 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 with thumb

- 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/&lt;abi&gt;/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 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 &lt;android/bitmap.h&gt;
     See http://code.google.com/p/android/issues/detail?id=15134
  3. Corrected typo in &lt;errno.h&gt;
     See http://code.google.com/p/android/issues/detail?id=15134
  4. Check the presence of __STDC_VERSION__ in &lt;sys/cdefs.h&gt;
     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 &lt;tool-path&gt;/bin/clang
     and &lt;tool-path&gt;/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
    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 &lt;va_list&gt; 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
    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 &lt;&lt; -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
    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
    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 &lt;arch&gt;/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
     &lt;pthread.h&gt; to &lt;limits.h&gt;.

- 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

    &lt;path&gt;/arm-linux-androideabi/include/c++/4.6.x-google
  to
    &lt;path&gt;/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.

      * Fuxed 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/&lt;arch-os-ver&gt;/prebuilt/gdbserver to
      prebuilt/android-&lt;arch&gt;/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&lt;D&gt;(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 &lt;sys/atomics.h&gt; 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 &lt;OMXAL/OpenMAXAL.h&gt; and
       &lt;OMXAL/OpenMAXAL_Android.h&gt; 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_PLATFORM 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.

- &lt;android/input.h&gt;: 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).

- &lt;pthread.h&gt;: 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.

- &lt;netinet/in.h&gt;: Add missing declaration for INET_ADDRSTRLEN
- &lt;netinet/in6.h&gt;: Add missing declaration for IN6_IS_ADDR_MC_NODELOCAL
  and IN6_IS_ADDR_MC_GLOBAL.

- &lt;asm/byteorder.&gt;: 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 &lt;SLES/OpenSLES.h&gt; and &lt;SLES/OpenSLES_Android.h&gt;
       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 &lt;application&gt; 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: &lt;project&gt;/libs/armeabi/gdb.setup: No such file or directory

  When doing a "ndk-build -j&lt;number&gt;", with &lt;number&gt; 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
  &lt;err.h&gt; 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=&lt;path&gt; 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=&lt;timeout&gt; 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/&lt;abi&gt;/objs and obj/local/&lt;abi&gt;/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/&lt;abi&gt;/ 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 &lt;fenv.h&gt; 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/&lt;name&gt; though.

        However, not that sample applications have moved from
        'apps/&lt;name&gt;/project' to 'samples/&lt;name&gt;' 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 &lt;android/bitmap.h&gt;, 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/&lt;foo&gt;/&lt;name&gt;.patch, and it will be applied
  with 'patch -p1' into the &lt;foo&gt; 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:

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

- C Library changes:

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

        - &lt;dlfcn.h&gt;: add DL_info and dladdr().
        - &lt;err.h&gt;: add err(), warn() and other variants.
        - &lt;regex.h&gt;, &lt;fts.h&gt;, &lt;sys/queue.h&gt;: added
        - &lt;pthread.h&gt;: add pthread_condattr_t
        - &lt;sched.h&gt;: added proper clone() declaration (and implementation).
        - &lt;signal.h&gt;: added killpg().
        - &lt;stdio.h&gt;: add fdprintf() and vfdprintf().
        - &lt;stdlib.h&gt;: fix ptsname_r() signature in declaration. previous
          implementation was broken anyway.
        - &lt;unistd.h&gt;: add getusershell(), setusershell(), endusershell(),
          ttyname(), ttyname_r(), TEMP_FAILURE_RETRY. Fix usleep() signature
          (now returns int).
        - &lt;wchar.h&gt;: 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 &lt;uses-feature&gt; 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 &lt;endian.h&gt; simply include &lt;sys/endian.h&gt;
    - make &lt;stdint.h&gt; properly declare 64-bit integer types with a C99 compiler
    - add missing &lt;sys/types.h&gt; to &lt;strings.h&gt;
    - add GLibc-compatible macro aliases (st_atimensec, st_mtimensec and
      st_ctimensec) to &lt;stat.h&gt;
    - add missing declaration for tzset() in &lt;time.h&gt;

- 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=&lt;file&gt; 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/&lt;name&gt;' 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.
</pre></body></html>
