diff --git a/libstdc++/Android.mk b/libstdc++/Android.mk
new file mode 100644
index 0000000..df97c9f
--- /dev/null
+++ b/libstdc++/Android.mk
@@ -0,0 +1,28 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES:= \
+	src/one_time_construction.cpp \
+	src/new.cpp \
+	src/pure_virtual.cpp \
+	src/typeinfo.cpp
+
+LOCAL_MODULE:= libstdc++
+
+LOCAL_SYSTEM_SHARED_LIBRARIES := libc
+
+include $(BUILD_SHARED_LIBRARY)
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES:= \
+	src/one_time_construction.cpp \
+	src/new.cpp \
+	src/pure_virtual.cpp \
+	src/typeinfo.cpp
+
+LOCAL_MODULE:= libstdc++
+
+LOCAL_SYSTEM_SHARED_LIBRARIES := libc
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/libstdc++/MODULE_LICENSE_BSD b/libstdc++/MODULE_LICENSE_BSD
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libstdc++/MODULE_LICENSE_BSD
diff --git a/libstdc++/NOTICE b/libstdc++/NOTICE
new file mode 100644
index 0000000..3831b34
--- /dev/null
+++ b/libstdc++/NOTICE
@@ -0,0 +1,26 @@
+Copyright (C) 2007 The Android Open Source Project
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the project nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
diff --git a/libstdc++/include/cstddef b/libstdc++/include/cstddef
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libstdc++/include/cstddef
diff --git a/libstdc++/include/new b/libstdc++/include/new
new file mode 100644
index 0000000..559308b
--- /dev/null
+++ b/libstdc++/include/new
@@ -0,0 +1,29 @@
+#ifndef __NEW__
+#define __NEW__
+
+#include <stddef.h>
+
+namespace std {
+    using ::size_t;
+
+    struct nothrow_t {};
+    extern const nothrow_t nothrow;
+}
+
+void* operator new(std::size_t);
+void* operator new[](std::size_t);
+void  operator delete(void*);
+void  operator delete[](void*);
+void* operator new(std::size_t, const std::nothrow_t&);
+void* operator new[](std::size_t, const std::nothrow_t&);
+void  operator delete(void*, const std::nothrow_t&);
+void  operator delete[](void*, const std::nothrow_t&);
+
+inline void* operator new(std::size_t, void* p) { return p; }
+inline void* operator new[](std::size_t, void* p) { return p; }
+
+// these next two are not really required, since exceptions are off
+inline void  operator delete(void*, void*) { }
+inline void  operator delete[](void*, void*) { }
+
+#endif // __NEW__
diff --git a/libstdc++/include/typeinfo b/libstdc++/include/typeinfo
new file mode 100644
index 0000000..8a51a54
--- /dev/null
+++ b/libstdc++/include/typeinfo
@@ -0,0 +1,28 @@
+#ifndef _TYPEINFO_HEADER_GAURD
+#define _TYPEINFO_HEADER_GAURD
+
+
+namespace std {
+    class type_info;
+    class bad_cast;
+    class bad_typeid;
+};
+
+
+class type_info {
+public:
+    type_info();
+    virtual ~type_info();
+
+    char const * name() const;
+
+    bool operator==(type_info const & right) const;
+    bool operator!=(type_info const & right) const;
+    bool before(type_info const & right) const;
+
+private:
+    type_info(type_info const & right);
+    type_info & operator=(type_info const & right);
+};
+
+#endif
diff --git a/libstdc++/src/new.cpp b/libstdc++/src/new.cpp
new file mode 100644
index 0000000..8189159
--- /dev/null
+++ b/libstdc++/src/new.cpp
@@ -0,0 +1,65 @@
+#include "new"
+#include <stdlib.h>
+
+const std::nothrow_t std::nothrow = {};
+
+void* operator new(std::size_t size)
+{
+    void* p = malloc(size);
+    if (p == NULL) {
+        // abort();
+    }
+    return p;
+}
+
+void* operator new[](std::size_t size)
+{
+    void* p = malloc(size);
+    if (p == NULL) {
+        // abort();
+    }
+    return p;
+}
+
+void  operator delete(void* ptr)
+{
+    if (ptr) {
+        free(ptr);
+    }
+}
+
+void  operator delete[](void* ptr)
+{
+    if (ptr) {
+        free(ptr);
+    }
+}
+
+void* operator new(std::size_t size, const std::nothrow_t&)
+{
+    return malloc(size);
+}
+
+void* operator new[](std::size_t size, const std::nothrow_t&)
+{
+    return malloc(size);
+}
+
+void  operator delete(void* ptr, const std::nothrow_t&)
+{
+    if (ptr) {
+        free(ptr);
+    }
+}
+
+void  operator delete[](void* ptr, const std::nothrow_t&)
+{
+    if (ptr) {
+        free(ptr);
+    }
+}
+
+
+
+
+
diff --git a/libstdc++/src/one_time_construction.cpp b/libstdc++/src/one_time_construction.cpp
new file mode 100644
index 0000000..304afb8
--- /dev/null
+++ b/libstdc++/src/one_time_construction.cpp
@@ -0,0 +1,50 @@
+/*
+ * one_time_construction.cpp
+ *
+ * Copyright 2006 The Android Open Source Project
+ *
+ * This file contains C++ ABI support functions for one time
+ * constructors as defined in the "Run-time ABI for the ARM Architecture"
+ * section 4.4.2
+ */
+
+#include <stddef.h>
+#include <sys/atomics.h>
+
+extern "C" int __futex_wait(volatile void *ftx, int val, const struct timespec *timeout);
+extern "C" int __futex_wake(volatile void *ftx, int count);
+
+
+extern "C" int __cxa_guard_acquire(int volatile * gv)
+{
+    // 0 -> 2, return 1
+    // 2 -> 6, wait and return 0
+    // 6 untouched, wait and return 0
+    // 1 untouched, return 0
+retry:
+    if (__atomic_cmpxchg(0, 0x2, gv) == 0)
+        return 1;
+
+    __atomic_cmpxchg(0x2, 0x6, gv); // Indicate there is a waiter
+    __futex_wait(gv, 0x6, NULL);
+    if(*gv != 1) // __cxa_guard_abort was called, let every thread try since there is no return code for this condition
+        goto retry;
+    return 0;
+}
+
+extern "C" void __cxa_guard_release(int volatile * gv)
+{
+    // 2 -> 1
+    // 6 -> 1, and wake
+    if (__atomic_cmpxchg(0x2, 0x1, gv) == 0)
+        return;
+
+    *gv = 0x1;
+    __futex_wake(gv, 0x7fffffff);
+}
+
+extern "C" void __cxa_guard_abort(int volatile * gv)
+{
+    *gv = 0;
+    __futex_wake(gv, 0x7fffffff);
+}
diff --git a/libstdc++/src/pure_virtual.cpp b/libstdc++/src/pure_virtual.cpp
new file mode 100644
index 0000000..663c1e9
--- /dev/null
+++ b/libstdc++/src/pure_virtual.cpp
@@ -0,0 +1,10 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+
+extern "C" void __cxa_pure_virtual()
+{
+    fprintf(stderr, "Pure virtual function called.  Are you calling virtual methods from a destructor?\n");
+    abort();
+}
+
diff --git a/libstdc++/src/typeinfo.cpp b/libstdc++/src/typeinfo.cpp
new file mode 100644
index 0000000..b426f1a
--- /dev/null
+++ b/libstdc++/src/typeinfo.cpp
@@ -0,0 +1,32 @@
+#include "typeinfo"
+#include <stdlib.h>
+
+type_info::type_info() {
+}
+
+type_info::~type_info() {
+}
+
+char const *
+type_info::name() const {
+    return "N/A";
+}
+
+bool 
+type_info::operator==(type_info const & right) const {
+    return false;
+}
+
+bool 
+type_info::operator!=(type_info const & right) const {
+    return false;
+}
+
+bool
+type_info::before(type_info const & right) const {
+    return false;
+}
+
+type_info::type_info(type_info const & right) {
+}
+
