diff -urN android-ndk-r3/apps/hello-exe/Android.mk android-ndk-r3-crystax/apps/hello-exe/Android.mk
--- android-ndk-r3/apps/hello-exe/Android.mk	1970-01-01 03:00:00.000000000 +0300
+++ android-ndk-r3-crystax/apps/hello-exe/Android.mk	2010-03-27 17:18:02.000000000 +0300
@@ -0,0 +1,23 @@
+# Copyright (C) 2009 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_CPP_EXTENSION := cc
+LOCAL_MODULE    := hello-exe
+LOCAL_SRC_FILES := main.cc
+
+include $(BUILD_EXECUTABLE)
diff -urN android-ndk-r3/apps/hello-exe/Application.mk android-ndk-r3-crystax/apps/hello-exe/Application.mk
--- android-ndk-r3/apps/hello-exe/Application.mk	1970-01-01 03:00:00.000000000 +0300
+++ android-ndk-r3-crystax/apps/hello-exe/Application.mk	2010-03-27 17:17:40.000000000 +0300
@@ -0,0 +1,3 @@
+APP_PROJECT_PATH := $(call my-dir)
+APP_BUILD_SCRIPT := $(call my-dir)/Android.mk
+APP_MODULES      := hello-exe
diff -urN android-ndk-r3/apps/hello-exe/main.cc android-ndk-r3-crystax/apps/hello-exe/main.cc
--- android-ndk-r3/apps/hello-exe/main.cc	1970-01-01 03:00:00.000000000 +0300
+++ android-ndk-r3-crystax/apps/hello-exe/main.cc	2010-03-27 17:20:28.000000000 +0300
@@ -0,0 +1,19 @@
+#include <cstdio>
+#include <cstdlib>
+#include <stdexcept>
+
+int main(int argc, char* argv[])
+{
+    try
+    {
+        if (std::getenv("NON_EXISTENT_ENVIRONMENT_VARIABLE") == NULL)
+            throw std::runtime_error("Hello, world (with full C++ support) !");
+        std::printf("Hello, world!\n");
+    }
+    catch (std::exception &ex)
+    {
+        std::printf("%s\n", ex.what());
+    }
+
+    return 0;
+}
diff -urN android-ndk-r3/apps/hello-jni/project/jni/Android.mk android-ndk-r3-crystax/apps/hello-jni/project/jni/Android.mk
--- android-ndk-r3/apps/hello-jni/project/jni/Android.mk	2010-01-08 02:14:48.000000000 +0300
+++ android-ndk-r3-crystax/apps/hello-jni/project/jni/Android.mk	2010-05-26 22:11:21.039315302 +0400
@@ -16,7 +16,8 @@
 
 include $(CLEAR_VARS)
 
+LOCAL_CPP_EXTENSION := cc
 LOCAL_MODULE    := hello-jni
-LOCAL_SRC_FILES := hello-jni.c
+LOCAL_SRC_FILES := hello-jni.cc
 
 include $(BUILD_SHARED_LIBRARY)
diff -urN android-ndk-r3/apps/hello-jni/project/jni/hello-jni.c android-ndk-r3-crystax/apps/hello-jni/project/jni/hello-jni.c
--- android-ndk-r3/apps/hello-jni/project/jni/hello-jni.c	2010-01-08 02:14:48.000000000 +0300
+++ android-ndk-r3-crystax/apps/hello-jni/project/jni/hello-jni.c	1970-01-01 03:00:00.000000000 +0300
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include <string.h>
-#include <jni.h>
-
-/* This is a trivial JNI example where we use a native method
- * to return a new VM String. See the corresponding Java source
- * file located at:
- *
- *   apps/samples/hello-jni/project/src/com/example/HelloJni/HelloJni.java
- */
-jstring
-Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
-                                                  jobject thiz )
-{
-    return (*env)->NewStringUTF(env, "Hello from JNI !");
-}
diff -urN android-ndk-r3/apps/hello-jni/project/jni/hello-jni.cc android-ndk-r3-crystax/apps/hello-jni/project/jni/hello-jni.cc
--- android-ndk-r3/apps/hello-jni/project/jni/hello-jni.cc	1970-01-01 03:00:00.000000000 +0300
+++ android-ndk-r3-crystax/apps/hello-jni/project/jni/hello-jni.cc	2010-05-26 22:11:21.040315358 +0400
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#include <jni.h>
+#include <cstdlib>
+#include <stdexcept>
+#include <string>
+
+/* This is a trivial JNI example where we use a native method
+ * to return a new VM String. See the corresponding Java source
+ * file located at:
+ *
+ *   apps/samples/hello-jni/project/src/com/example/HelloJni/HelloJni.java
+ */
+extern "C"
+jstring
+Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
+                                                  jobject thiz )
+{
+    std::string s = "Hello from JNI !";
+    try
+    {
+        if (std::getenv("NON_EXISTENT_ENVIRONMENT_VARIABLE") == NULL)
+            throw std::runtime_error("Hello from JNI (with full C++ support) !");
+    }
+    catch (std::exception &ex)
+    {
+        s = ex.what();
+    }
+    return env->NewStringUTF(s.c_str());
+}
diff -urN android-ndk-r3/build/core/setup-toolchain.mk android-ndk-r3-crystax/build/core/setup-toolchain.mk
--- android-ndk-r3/build/core/setup-toolchain.mk	2010-01-08 02:14:48.000000000 +0300
+++ android-ndk-r3-crystax/build/core/setup-toolchain.mk	2010-05-26 22:11:21.040315358 +0400
@@ -41,7 +41,7 @@
 TARGET_CRTBEGIN_DYNAMIC_O := $(SYSROOT)/usr/lib/crtbegin_dynamic.o
 TARGET_CRTEND_O           := $(SYSROOT)/usr/lib/crtend_android.o
 
-TARGET_PREBUILT_SHARED_LIBRARIES := libc libstdc++ libm
+TARGET_PREBUILT_SHARED_LIBRARIES := libc libm
 TARGET_PREBUILT_SHARED_LIBRARIES := $(TARGET_PREBUILT_SHARED_LIBRARIES:%=$(SYSROOT)/usr/lib/%.so)
 
 # now call the toolchain-specific setup script
diff -urN android-ndk-r3/build/toolchains/arm-eabi-4.2.1/setup.mk android-ndk-r3-crystax/build/toolchains/arm-eabi-4.2.1/setup.mk
--- android-ndk-r3/build/toolchains/arm-eabi-4.2.1/setup.mk	2010-03-05 01:13:53.000000000 +0300
+++ android-ndk-r3-crystax/build/toolchains/arm-eabi-4.2.1/setup.mk	2010-05-26 22:11:21.041324004 +0400
@@ -91,7 +91,7 @@
 
 
 TARGET_CXX      := $(TOOLCHAIN_PREFIX)g++
-TARGET_CXXFLAGS := $(TARGET_CFLAGS.common) -fno-exceptions -fno-rtti
+TARGET_CXXFLAGS := $(TARGET_CFLAGS.common)
 
 TARGET_LD      := $(TOOLCHAIN_PREFIX)ld
 TARGET_LDFLAGS :=
@@ -102,6 +102,9 @@
 TARGET_LIBGCC := $(shell $(TARGET_CC) -mthumb-interwork -print-libgcc-file-name)
 TARGET_LDLIBS := -Wl,-rpath-link=$(SYSROOT)/usr/lib
 
+TARGET_CXXLIBS := $(shell $(TARGET_CXX) -mthumb-interwork -print-file-name=libstdc++.a)
+TARGET_CXXLIBS += $(shell $(TARGET_CXX) -mthumb-interwork -print-file-name=libsupc++.a)
+
 # These flags are used to ensure that a binary doesn't reference undefined
 # flags.
 TARGET_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined
@@ -128,10 +131,13 @@
     $(PRIVATE_WHOLE_STATIC_LIBRARIES) \
     -Wl,--no-whole-archive \
     $(PRIVATE_STATIC_LIBRARIES) \
+    $(TARGET_CXXLIBS) \
     $(TARGET_LIBGCC) \
     $(PRIVATE_SHARED_LIBRARIES) \
     $(PRIVATE_LDFLAGS) \
     $(PRIVATE_LDLIBS) \
+    $(TARGET_CXXLIBS) \
+    $(TARGET_LIBGCC) \
     -o $@
 endef
 
@@ -144,10 +150,13 @@
     $(TARGET_CRTBEGIN_DYNAMIC_O) \
     $(PRIVATE_OBJECTS) \
     $(PRIVATE_STATIC_LIBRARIES) \
+    $(TARGET_CXXLIBS) \
     $(TARGET_LIBGCC) \
     $(PRIVATE_SHARED_LIBRARIES) \
     $(PRIVATE_LDFLAGS) \
     $(PRIVATE_LDLIBS) \
+    $(TARGET_CXXLIBS) \
+    $(TARGET_LIBGCC) \
     $(TARGET_CRTEND_O) \
     -o $@
 endef
diff -urN android-ndk-r3/build/toolchains/arm-eabi-4.4.0/setup.mk android-ndk-r3-crystax/build/toolchains/arm-eabi-4.4.0/setup.mk
--- android-ndk-r3/build/toolchains/arm-eabi-4.4.0/setup.mk	2010-03-05 01:10:43.000000000 +0300
+++ android-ndk-r3-crystax/build/toolchains/arm-eabi-4.4.0/setup.mk	2010-05-26 22:11:21.041324004 +0400
@@ -94,7 +94,7 @@
 
 
 TARGET_CXX      := $(TOOLCHAIN_PREFIX)g++
-TARGET_CXXFLAGS := $(TARGET_CFLAGS.common) $(TARGET_ARCH_CFLAGS) -fno-exceptions -fno-rtti
+TARGET_CXXFLAGS := $(TARGET_CFLAGS.common) $(TARGET_ARCH_CFLAGS)
 
 TARGET_LD      := $(TOOLCHAIN_PREFIX)ld
 TARGET_LDFLAGS := $(TARGET_ARCH_LDFLAGS)
@@ -105,6 +105,9 @@
 TARGET_LIBGCC := $(shell $(TARGET_CC) -mthumb-interwork -print-libgcc-file-name)
 TARGET_LDLIBS := -Wl,-rpath-link=$(SYSROOT)/usr/lib
 
+TARGET_CXXLIBS := $(shell $(TARGET_CXX) -mthumb-interwork -print-file-name=libstdc++.a)
+TARGET_CXXLIBS += $(shell $(TARGET_CXX) -mthumb-interwork -print-file-name=libsupc++.a)
+
 # These flags are used to ensure that a binary doesn't reference undefined
 # flags.
 TARGET_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined
@@ -127,10 +130,13 @@
     $(PRIVATE_WHOLE_STATIC_LIBRARIES) \
     -Wl,--no-whole-archive \
     $(PRIVATE_STATIC_LIBRARIES) \
+    $(TARGET_CXXLIBS) \
     $(TARGET_LIBGCC) \
     $(PRIVATE_SHARED_LIBRARIES) \
     $(PRIVATE_LDFLAGS) \
     $(PRIVATE_LDLIBS) \
+    $(TARGET_CXXLIBS) \
+    $(TARGET_LIBGCC) \
     -o $@
 endef
 
@@ -143,10 +149,13 @@
     $(TARGET_CRTBEGIN_DYNAMIC_O) \
     $(PRIVATE_OBJECTS) \
     $(PRIVATE_STATIC_LIBRARIES) \
+    $(TARGET_CXXLIBS) \
     $(TARGET_LIBGCC) \
     $(PRIVATE_SHARED_LIBRARIES) \
     $(PRIVATE_LDFLAGS) \
     $(PRIVATE_LDLIBS) \
+    $(TARGET_CXXLIBS) \
+    $(TARGET_LIBGCC) \
     $(TARGET_CRTEND_O) \
     -o $@
 endef
diff -urN android-ndk-r3/build/tools/build-toolchain.sh android-ndk-r3-crystax/build/tools/build-toolchain.sh
--- android-ndk-r3/build/tools/build-toolchain.sh	2010-02-25 01:42:55.000000000 +0300
+++ android-ndk-r3-crystax/build/tools/build-toolchain.sh	2010-05-26 22:35:05.916635691 +0400
@@ -530,6 +530,7 @@
                                 --disable-nls \
                                 --prefix=$TOOLCHAIN_PREFIX \
                                 --with-sysroot=$ANDROID_SYSROOT \
+                                --enable-libstdc__-v3 \
                                 --with-binutils-version=$BINUTILS_VERSION \
                                 --with-gcc-version=$GCC_VERSION \
                                 --with-gdb-version=$GDB_VERSION
@@ -586,6 +587,12 @@
         strip $TOOLCHAIN_PREFIX/libexec/gcc/*/*/cc1
         strip $TOOLCHAIN_PREFIX/libexec/gcc/*/*/cc1plus
         strip $TOOLCHAIN_PREFIX/libexec/gcc/*/*/collect2
+        # CrystaX: replace android libstdc++ simulation to GCC's (full) version
+        for i in cstddef new stl_pair.h typeinfo utility libstdc++.a libstdc++.so
+        do
+            find $ANDROID_PLATFORMS_ROOT -name $i -exec rm -f '{}' \;
+        done
+        # CrystaX END
         timestamp_set   $TOOLCHAIN_NAME install
         timestamp_force $TOOLCHAIN_NAME-gdbserver configure
     fi
diff -urN android-ndk-r3/build/tools/toolchain-patches/crystax.patch android-ndk-r3-crystax/build/tools/toolchain-patches/crystax.patch
--- android-ndk-r3/build/tools/toolchain-patches/crystax.patch	1970-01-01 03:00:00.000000000 +0300
+++ android-ndk-r3-crystax/build/tools/toolchain-patches/crystax.patch	2010-05-26 22:11:21.156314315 +0400
@@ -0,0 +1,363 @@
+diff -urN src-original/gcc/gcc-4.2.1/gcc/config/arm/eabi.h src-crystax/gcc/gcc-4.2.1/gcc/config/arm/eabi.h
+--- src-original/gcc/gcc-4.2.1/gcc/config/arm/eabi.h	2010-03-09 04:54:44.000000000 +0300
++++ src-crystax/gcc/gcc-4.2.1/gcc/config/arm/eabi.h	2010-05-21 02:29:20.586760054 +0400
+@@ -68,7 +68,6 @@
+    default. */
+ #undef ANDROID_CC1_SPEC
+ #define ANDROID_CC1_SPEC \
+-"%{!fexceptions:-fno-exceptions} " \
+ "%{!fno-pic:%{!fno-PIC:-fpic}} " \
+ "%{!fshort-enums:-fno-short-enums} " \
+ "%{!mno-thumb-interwork:-mthumb-interwork}"
+@@ -84,7 +83,7 @@
+ 
+ /* Android uses -fno-rtti by default. */
+ #undef ANDROID_CC1PLUS_SPEC
+-#define ANDROID_CC1PLUS_SPEC "%{!frtti:-fno-rtti}"
++#define ANDROID_CC1PLUS_SPEC ""
+ 
+ /* Default CC1PLUS_SPEC as in gcc.c. */
+ #undef CC1PLUS_DEFAULT_SPEC
+diff -urN src-original/gcc/gcc-4.2.1/gcc/config/arm/unwind-arm.c src-crystax/gcc/gcc-4.2.1/gcc/config/arm/unwind-arm.c
+--- src-original/gcc/gcc-4.2.1/gcc/config/arm/unwind-arm.c	2010-03-09 04:54:44.000000000 +0300
++++ src-crystax/gcc/gcc-4.2.1/gcc/config/arm/unwind-arm.c	2010-05-21 02:29:20.595425898 +0400
+@@ -43,7 +43,7 @@
+ 					    const type_info *rttip,
+ 					    void **matched_object);
+ 
+-_Unwind_Ptr __attribute__((weak))
++_Unwind_Ptr
+ __gnu_Unwind_Find_exidx (_Unwind_Ptr, int *);
+ 
+ /* Misc constants.  */
+diff -urN src-original/gcc/gcc-4.2.1/intl/localename.c src-crystax/gcc/gcc-4.2.1/intl/localename.c
+--- src-original/gcc/gcc-4.2.1/intl/localename.c	2010-03-09 04:55:16.000000000 +0300
++++ src-crystax/gcc/gcc-4.2.1/intl/localename.c	2010-05-21 03:07:40.497183004 +0400
+@@ -393,6 +393,8 @@
+      On some systems this can be done by the 'setlocale' function itself.  */
+ # if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
+   retval = setlocale (category, NULL);
++  if (retval == NULL || retval[0] == '\0')
++    retval = "C";
+ # else
+   /* Setting of LC_ALL overwrites all other.  */
+   retval = getenv ("LC_ALL");
+diff -urN src-original/gcc/gcc-4.2.1/libiberty/getpagesize.c src-crystax/gcc/gcc-4.2.1/libiberty/getpagesize.c
+--- src-original/gcc/gcc-4.2.1/libiberty/getpagesize.c	2010-03-09 04:55:18.000000000 +0300
++++ src-crystax/gcc/gcc-4.2.1/libiberty/getpagesize.c	2010-05-21 02:29:20.596194084 +0400
+@@ -60,17 +60,6 @@
+ # endif /* PAGESIZE */
+ #endif /* GNU_OUR_PAGESIZE */
+ 
+-/* ANDROID LOCAL BEGIN */
+-/* ANDROID FIXME: The declaration of getpagesize in Bionic's unistd.h
+-   is a static inline is different from one below.  */
+-#ifndef __ANDROID__ 
+-/* ANDROID LOCAL END */
+-int
+-getpagesize (void)
+-{
+-  return (GNU_OUR_PAGESIZE);
+-}
+-#endif /* ANDROID LOCAL */
+ 
+ #else /* VMS */
+ 
+diff -urN src-original/gcc/gcc-4.2.1/libstdc++-v3/config/locale/generic/c_locale.h src-crystax/gcc/gcc-4.2.1/libstdc++-v3/config/locale/generic/c_locale.h
+--- src-original/gcc/gcc-4.2.1/libstdc++-v3/config/locale/generic/c_locale.h	2010-03-09 04:55:30.000000000 +0300
++++ src-crystax/gcc/gcc-4.2.1/libstdc++-v3/config/locale/generic/c_locale.h	2010-05-21 03:08:22.232445252 +0400
+@@ -65,6 +65,8 @@
+ 		   const char* __fmt, ...)
+   {
+     char* __old = std::setlocale(LC_NUMERIC, NULL);
++    if (__old == NULL || __old[0] == '\0')
++      __old = "C";
+     char* __sav = NULL;
+     if (std::strcmp(__old, "C"))
+       {
+diff -urN src-original/gcc/gcc-4.2.1/libstdc++-v3/config/locale/gnu/c_locale.h src-crystax/gcc/gcc-4.2.1/libstdc++-v3/config/locale/gnu/c_locale.h
+--- src-original/gcc/gcc-4.2.1/libstdc++-v3/config/locale/gnu/c_locale.h	2010-03-09 04:55:30.000000000 +0300
++++ src-crystax/gcc/gcc-4.2.1/libstdc++-v3/config/locale/gnu/c_locale.h	2010-05-21 03:08:49.526182904 +0400
+@@ -82,6 +82,8 @@
+     __c_locale __old = __gnu_cxx::__uselocale(__cloc);
+ #else
+     char* __old = std::setlocale(LC_ALL, NULL);
++    if (__old == NULL || __old[0] == '\0')
++      __old = "C";
+     char* __sav = new char[std::strlen(__old) + 1];
+     std::strcpy(__sav, __old);
+     std::setlocale(LC_ALL, "C");
+diff -urN src-original/gcc/gcc-4.4.0/gcc/config/arm/eabi.h src-crystax/gcc/gcc-4.4.0/gcc/config/arm/eabi.h
+--- src-original/gcc/gcc-4.4.0/gcc/config/arm/eabi.h	2010-03-09 04:57:21.000000000 +0300
++++ src-crystax/gcc/gcc-4.4.0/gcc/config/arm/eabi.h	2010-05-21 02:29:20.596194084 +0400
+@@ -68,7 +68,6 @@
+    default. */
+ #undef ANDROID_CC1_SPEC
+ #define ANDROID_CC1_SPEC \
+-"%{!fexceptions:-fno-exceptions} " \
+ "%{!fno-pic:%{!fno-PIC:-fpic}} " \
+ "%{!fshort-enums:-fno-short-enums} " \
+ "%{!mno-thumb-interwork:-mthumb-interwork}"
+@@ -84,7 +83,7 @@
+ 
+ /* Android uses -fno-rtti by default. */
+ #undef ANDROID_CC1PLUS_SPEC
+-#define ANDROID_CC1PLUS_SPEC "%{!frtti:-fno-rtti}"
++#define ANDROID_CC1PLUS_SPEC ""
+ 
+ /* Default CC1PLUS_SPEC as in gcc.c. */
+ #undef CC1PLUS_DEFAULT_SPEC
+diff -urN src-original/gcc/gcc-4.4.0/gcc/config/arm/unwind-arm.c src-crystax/gcc/gcc-4.4.0/gcc/config/arm/unwind-arm.c
+--- src-original/gcc/gcc-4.4.0/gcc/config/arm/unwind-arm.c	2010-03-09 04:57:21.000000000 +0300
++++ src-crystax/gcc/gcc-4.4.0/gcc/config/arm/unwind-arm.c	2010-05-21 02:29:20.598433896 +0400
+@@ -40,7 +40,7 @@
+ 					    bool is_reference,
+ 					    void **matched_object);
+ 
+-_Unwind_Ptr __attribute__((weak))
++_Unwind_Ptr
+ __gnu_Unwind_Find_exidx (_Unwind_Ptr, int *);
+ 
+ /* Misc constants.  */
+diff -urN src-original/gcc/gcc-4.4.0/intl/localename.c src-crystax/gcc/gcc-4.4.0/intl/localename.c
+--- src-original/gcc/gcc-4.4.0/intl/localename.c	2010-03-09 04:57:56.000000000 +0300
++++ src-crystax/gcc/gcc-4.4.0/intl/localename.c	2010-05-21 02:54:59.944230116 +0400
+@@ -393,6 +393,8 @@
+      On some systems this can be done by the 'setlocale' function itself.  */
+ # if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
+   retval = setlocale (category, NULL);
++  if (retval == NULL || retval[0] == '\0')
++    retval = "C";
+ # else
+   /* Setting of LC_ALL overwrites all other.  */
+   retval = getenv ("LC_ALL");
+diff -urN src-original/gcc/gcc-4.4.0/libiberty/getpagesize.c src-crystax/gcc/gcc-4.4.0/libiberty/getpagesize.c
+--- src-original/gcc/gcc-4.4.0/libiberty/getpagesize.c	2010-03-09 04:57:59.000000000 +0300
++++ src-crystax/gcc/gcc-4.4.0/libiberty/getpagesize.c	2010-05-21 02:29:20.598433896 +0400
+@@ -60,12 +60,6 @@
+ # endif /* PAGESIZE */
+ #endif /* GNU_OUR_PAGESIZE */
+ 
+-int
+-getpagesize (void)
+-{
+-  return (GNU_OUR_PAGESIZE);
+-}
+-
+ #else /* VMS */
+ 
+ #if 0	/* older distributions of gcc-vms are missing <syidef.h> */
+diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/c_locale.cc src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/c_locale.cc
+--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/c_locale.cc	2010-03-09 04:58:41.000000000 +0300
++++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/c_locale.cc	2010-05-21 03:00:08.707198714 +0400
+@@ -51,6 +51,8 @@
+     {
+       // Assumes __s formatted for "C" locale.
+       char* __old = setlocale(LC_ALL, NULL);
++      if (__old == NULL || __old[0] == '\0')
++        __old = "C";
+       const size_t __len = strlen(__old) + 1;
+       char* __sav = new char[__len];
+       memcpy(__sav, __old, __len);
+@@ -116,6 +118,8 @@
+     {
+       // Assumes __s formatted for "C" locale.
+       char* __old = setlocale(LC_ALL, NULL);
++      if (__old == NULL || __old[0] == '\0')
++        __old = "C";
+       const size_t __len = strlen(__old) + 1;
+       char* __sav = new char[__len];
+       memcpy(__sav, __old, __len);
+@@ -161,6 +165,8 @@
+     {
+       // Assumes __s formatted for "C" locale.
+       char* __old = setlocale(LC_ALL, NULL);
++      if (__old == NULL || __old[0] == '\0')
++        __old = "C";
+       const size_t __len = strlen(__old) + 1;
+       char* __sav = new char[__len];
+       memcpy(__sav, __old, __len);
+diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/c_locale.h src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/c_locale.h
+--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/c_locale.h	2010-03-09 04:58:41.000000000 +0300
++++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/c_locale.h	2010-05-21 02:57:22.174379076 +0400
+@@ -58,6 +58,8 @@
+ 		   const char* __fmt, ...)
+   {
+     char* __old = std::setlocale(LC_NUMERIC, NULL);
++    if (__old == NULL || __old[0] == '\0')
++      __old = "C";
+     char* __sav = NULL;
+     if (__builtin_strcmp(__old, "C"))
+       {
+diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/time_members.cc src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/time_members.cc
+--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/time_members.cc	2010-03-09 04:58:41.000000000 +0300
++++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/generic/time_members.cc	2010-05-21 02:58:20.611722568 +0400
+@@ -43,6 +43,8 @@
+ 	   const tm* __tm) const
+     {
+       char* __old = setlocale(LC_ALL, NULL);
++      if (__old == NULL || __old[0] == '\0')
++        __old = "C";
+       const size_t __llen = strlen(__old) + 1;
+       char* __sav = new char[__llen];
+       memcpy(__sav, __old, __llen);
+@@ -128,6 +130,8 @@
+ 	   const tm* __tm) const
+     {
+       char* __old = setlocale(LC_ALL, NULL);
++      if (__old == NULL || __old[0] == '\0')
++        __old = "C";
+       const size_t __llen = strlen(__old) + 1;
+       char* __sav = new char[__llen];
+       memcpy(__sav, __old, __llen);
+diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/c_locale.h src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/c_locale.h
+--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/c_locale.h	2010-03-09 04:58:41.000000000 +0300
++++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/c_locale.h	2010-05-21 03:01:36.319307763 +0400
+@@ -72,6 +72,8 @@
+     __c_locale __old = __gnu_cxx::__uselocale(__cloc);
+ #else
+     char* __old = std::setlocale(LC_NUMERIC, NULL);
++    if (__old == NULL || __old[0] == '\0')
++      __old = "C";
+     char* __sav = NULL;
+     if (__builtin_strcmp(__old, "C"))
+       {
+diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/messages_members.cc src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/messages_members.cc
+--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/messages_members.cc	2010-03-09 04:58:41.000000000 +0300
++++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/messages_members.cc	2010-05-21 03:03:36.778447756 +0400
+@@ -45,6 +45,8 @@
+       return string(__msg);
+ #else
+       char* __old = setlocale(LC_ALL, NULL);
++      if (__old == NULL || __old[0] == '\0')
++        __old = "C";
+       const size_t __len = strlen(__old) + 1;
+       char* __sav = new char[__len];
+       memcpy(__sav, __old, __len);
+@@ -68,6 +70,8 @@
+       return _M_convert_from_char(__msg);
+ # else
+       char* __old = setlocale(LC_ALL, NULL);
++      if (__old == NULL || __old[0] == '\0')
++        __old = "C";
+       const size_t __len = strlen(__old) + 1;
+       char* __sav = new char[__len];
+       memcpy(__sav, __old, __len);
+diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/monetary_members.cc src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/monetary_members.cc
+--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/monetary_members.cc	2010-03-09 04:58:41.000000000 +0300
++++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/monetary_members.cc	2010-05-21 03:01:04.282183669 +0400
+@@ -428,6 +428,8 @@
+ #else
+ 	  // Switch to named locale so that mbsrtowcs will work.
+ 	  char* __old = setlocale(LC_ALL, NULL);
++    if (__old == NULL || __old[0] == '\0')
++      __old = "C";
+           const size_t __llen = strlen(__old) + 1;
+           char* __sav = new char[__llen];
+           memcpy(__sav, __old, __llen);
+@@ -596,6 +598,8 @@
+ #else
+ 	  // Switch to named locale so that mbsrtowcs will work.
+ 	  char* __old = setlocale(LC_ALL, NULL);
++    if (__old == NULL || __old[0] == '\0')
++      __old = "C";
+           const size_t __llen = strlen(__old) + 1;
+           char* __sav = new char[__llen];
+           memcpy(__sav, __old, __llen);
+diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/time_members.cc src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/time_members.cc
+--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/time_members.cc	2010-03-09 04:58:41.000000000 +0300
++++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/locale/gnu/time_members.cc	2010-05-21 03:02:54.836184301 +0400
+@@ -46,6 +46,8 @@
+ 					_M_c_locale_timepunct);
+ #else
+       char* __old = setlocale(LC_ALL, NULL);
++      if (__old == NULL || __old == '\0')
++        __old = "C";
+       const size_t __llen = strlen(__old) + 1;  
+       char* __sav = new char[__llen];
+       memcpy(__sav, __old, __llen);
+@@ -202,6 +204,8 @@
+ 					_M_c_locale_timepunct);
+ #else
+       char* __old = setlocale(LC_ALL, NULL);
++      if (__old == NULL || __old[0] == '\0')
++        __old = "C";
+       const size_t __llen = strlen(__old) + 1;
+       char* __sav = new char[__llen];
+       memcpy(__sav, __old, __llen);
+diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h
+--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h	2010-03-09 04:58:41.000000000 +0300
++++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h	2010-05-21 03:04:51.184198547 +0400
+@@ -45,6 +45,8 @@
+   {
+     const ctype_base::mask* __ret;
+     char* __old = setlocale(LC_CTYPE, NULL);
++    if (__old == NULL || __old[0] == '\0')
++      __old = "C";
+     char* __sav = NULL;
+     if (__builtin_strcmp(__old, "C"))
+       {
+@@ -87,6 +89,8 @@
+   _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
+   {
+     char* __old = setlocale(LC_CTYPE, NULL);
++    if (__old == NULL || __old[0] == '\0')
++      __old = "C";
+     char* __sav = NULL;
+     if (__builtin_strcmp(__old, "C"))
+       {    
+@@ -132,6 +136,8 @@
+   _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
+   {
+     char* __old = setlocale(LC_CTYPE, NULL);
++    if (__old == NULL || __old[0] == '\0')
++      __old = "C";
+     char* __sav = NULL;
+     if (__builtin_strcmp(__old, "C"))
+       {
+diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/config/os/tpf/ctype_noninline.h src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/os/tpf/ctype_noninline.h
+--- src-original/gcc/gcc-4.4.0/libstdc++-v3/config/os/tpf/ctype_noninline.h	2010-03-09 04:58:41.000000000 +0300
++++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/config/os/tpf/ctype_noninline.h	2010-05-21 03:06:05.894445080 +0400
+@@ -38,6 +38,8 @@
+   {
+     const ctype_base::mask* __ret;
+     char* __old = setlocale(LC_CTYPE, NULL);
++    if (__old == NULL || __old[0] == '\0')
++      __old = "C";
+     const size_t __len = __builtin_strlen(__old) + 1;
+     char* __sav = new char[__len];
+     __builtin_memcpy(__sav, __old, __len);
+@@ -53,6 +55,8 @@
+   : facet(__refs), _M_del(__table != 0 && __del)
+   {
+     char* __old = setlocale(LC_CTYPE, NULL);
++    if (__old == NULL || __old[0] == '\0')
++      __old = "C";
+     const size_t __len = __builtin_strlen(__old) + 1;
+     char* __sav = new char[__len];
+     __builtin_memcpy(__sav, __old, __len);
+@@ -69,6 +73,8 @@
+   : facet(__refs), _M_del(__table != 0 && __del)
+   {
+     char* __old = setlocale(LC_CTYPE, NULL);
++    if (__old == NULL || __old[0] == '\0')
++      __old = "C";
+     const size_t __len = __builtin_strlen(__old) + 1;
+     char* __sav = new char[__len];
+     __builtin_memcpy(__sav, __old, __len);
+diff -urN src-original/gcc/gcc-4.4.0/libstdc++-v3/configure src-crystax/gcc/gcc-4.4.0/libstdc++-v3/configure
+--- src-original/gcc/gcc-4.4.0/libstdc++-v3/configure	2010-03-09 04:59:45.000000000 +0300
++++ src-crystax/gcc/gcc-4.4.0/libstdc++-v3/configure	2010-05-21 02:29:20.635432703 +0400
+@@ -41615,6 +41615,12 @@
+     # This is a freestanding configuration; there is nothing to do here.
+     ;;
+ 
++  # ANDROID LOCAL BEGIN
++  arm*-*-eabi*)
++    # This is a freestanding configuration; there is nothing to do here.
++    ;;
++  # ANDROID LOCAL END
++
+   mips*-sde-elf*)
+     # These definitions are for the SDE C library rather than newlib.
+     SECTION_FLAGS='-ffunction-sections -fdata-sections'
