Report errors to the log, not just stderr.
In particular this affects assert(3) and __cxa_pure_virtual, both of
which have managed to confuse people this week by apparently aborting
without reason. (Because stderr goes nowhere, normally.)
Bug: 6852995
Bug: 6840813
Change-Id: I7f5d17d5ddda439e217b7932096702dc013b9142
diff --git a/libstdc++/src/one_time_construction.cpp b/libstdc++/src/one_time_construction.cpp
index 1eac3b1..3cfb213 100644
--- a/libstdc++/src/one_time_construction.cpp
+++ b/libstdc++/src/one_time_construction.cpp
@@ -11,8 +11,8 @@
#include <stddef.h>
#include <sys/atomics.h>
#include <endian.h>
-#include <bionic_futex.h>
-#include <bionic_atomic_inline.h>
+#include <private/bionic_futex.h>
+#include <private/bionic_atomic_inline.h>
// ARM C++ ABI and Itanium/x86 C++ ABI has different definition for
// one time construction:
diff --git a/libstdc++/src/pure_virtual.cpp b/libstdc++/src/pure_virtual.cpp
index 663c1e9..affb80f 100644
--- a/libstdc++/src/pure_virtual.cpp
+++ b/libstdc++/src/pure_virtual.cpp
@@ -1,10 +1,8 @@
+#undef NDEBUG
+#include <assert.h>
-#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();
+extern "C" void __cxa_pure_virtual() {
+ // We can't call __libc_android_log_write from libstdc++ because it's private, so cheat.
+ assert(!"Pure virtual function called. Are you calling virtual methods from a destructor?");
+ /* NOTREACHED */
}
-