Index: src/cxa_demangle.cpp |
diff --git a/src/cxa_demangle.cpp b/src/cxa_demangle.cpp |
index ba8225cfd2d5363ac95a06f479fe0f7b21f6a81b..671d79ca9124e3771f93f2367d06540a7d218b41 100644 |
--- a/src/cxa_demangle.cpp |
+++ b/src/cxa_demangle.cpp |
@@ -4604,6 +4604,16 @@ __cxa_demangle(const char* mangled_name, char* buf, size_t* n, int* status) |
*status = invalid_args; |
return nullptr; |
} |
+ // @LOCALMOD-START The demangler is *huge* and only used in |
+ // default_terminate_handler with a fallback to printing mangled |
+ // names instead. pexe size matters a lot, so PNaCl only prints out |
+ // mangled names when exceptions are uncaught. |
+#ifdef __pnacl__ |
+ if (status) |
+ *status = memory_alloc_failure; |
+ return nullptr; |
+#else |
+ // @LOCALMOD-END |
size_t internal_size = buf != nullptr ? *n : 0; |
arena<bs> a; |
struct Db |
@@ -4681,6 +4691,9 @@ __cxa_demangle(const char* mangled_name, char* buf, size_t* n, int* status) |
if (status) |
*status = internal_status; |
return buf; |
+ // @LOCALMOD-START |
+#endif // __pnacl__ |
+ // @LOCALMOD-END |
} |
} // __cxxabiv1 |