From 09221ebd18ec0074b25d593400f040ee460526aa Mon Sep 17 00:00:00 2001
From: Bruce Mitchener <bruce.mitchener@gmail.com>
Date: Mon, 25 Mar 2013 11:25:49 +0700
Subject: [PATCH 1/2] Get exceptions working as they were before.

This no longer uses headers from libcxxabi and
in fact uses libcxxabi a bit less than before.

This no longer lets some new C++11 stuff such as
exception_ptr work as the support for that relies
upon libcxxabi code.
---
 emcc                            |  12 +-
 system/lib/libc.symbols         |  30 ++++
 system/lib/libcxx/exception.cpp |   4 +-
 system/lib/libcxx/symbols       | 290 ++++++++------------------------
 system/lib/libcxxabi/symbols    | 111 ------------
 tools/shared.py                 |   1 -
 6 files changed, 104 insertions(+), 344 deletions(-)

diff --git a/emcc b/emcc
index c9bb4c3786f42..cd906c7b016cd 100755
--- a/emcc
+++ b/emcc
@@ -1102,6 +1102,7 @@ try:
       o_s = []
       libc_files = [
         'dlmalloc.c',
+        os.path.join('libcxx', 'new.cpp'),
         os.path.join('libc', 'stdlib', 'getopt_long.c'),
         os.path.join('libc', 'gen', 'err.c'),
         os.path.join('libc', 'gen', 'errx.c'),
@@ -1165,8 +1166,7 @@ try:
         'ios.cpp',
         'locale.cpp',
         'regex.cpp',
-        'strstream.cpp',
-        'typeinfo.cpp'
+        'strstream.cpp'
       ]
       for src in libcxx_files:
         o = in_temp(src + '.o')
@@ -1189,14 +1189,8 @@ try:
       if DEBUG: print >> sys.stderr, 'emcc: building libcxxabi for cache'
       os = []
       libcxxabi_files = [
-        'abort_message.cpp',
-        'private_typeinfo.cpp',
         'typeinfo.cpp',
-        'cxa_new_delete.cpp',
-        'cxa_handlers.cpp',
-        'stdexcept.cpp',
-        'exception.cpp',
-        'cxa_exception_storage.cpp']:
+        'private_typeinfo.cpp'
       ]
       for src in libcxxabi_files:
         o = in_temp(src + '.o')
diff --git a/system/lib/libc.symbols b/system/lib/libc.symbols
index cd498651031fc..96e995cf10cd4 100644
--- a/system/lib/libc.symbols
+++ b/system/lib/libc.symbols
@@ -1,3 +1,33 @@
+_ZNKSt20bad_array_new_length4whatEv
+_ZNKSt9bad_alloc4whatEv
+_ZNSt20bad_array_new_lengthC1Ev
+_ZNSt20bad_array_new_lengthC2Ev
+_ZNSt20bad_array_new_lengthD0Ev
+_ZNSt20bad_array_new_lengthD1Ev
+_ZNSt20bad_array_new_lengthD2Ev
+_ZNSt9bad_allocC1Ev
+_ZNSt9bad_allocC2Ev
+_ZNSt9bad_allocD0Ev
+_ZNSt9bad_allocD1Ev
+_ZNSt9bad_allocD2Ev
+_ZSt15get_new_handlerv
+_ZSt15set_new_handlerPFvvE
+_ZSt17__throw_bad_allocv
+_ZSt7nothrow
+_ZTISt20bad_array_new_length
+_ZTISt9bad_alloc
+_ZTSSt20bad_array_new_length
+_ZTSSt9bad_alloc
+_ZTVSt20bad_array_new_length
+_ZTVSt9bad_alloc
+_ZdaPv
+_ZdaPvRKSt9nothrow_t
+_ZdlPv
+_ZdlPvRKSt9nothrow_t
+_Znaj
+_ZnajRKSt9nothrow_t
+_Znwj
+_ZnwjRKSt9nothrow_t
 _err
 _errx
 _verr
diff --git a/system/lib/libcxx/exception.cpp b/system/lib/libcxx/exception.cpp
index 0cd182b716cb1..8d5ded4d875e0 100644
--- a/system/lib/libcxx/exception.cpp
+++ b/system/lib/libcxx/exception.cpp
@@ -77,6 +77,7 @@ get_terminate() _NOEXCEPT
     return __sync_fetch_and_add(&__terminate_handler, (terminate_handler)0);
 }
 
+#ifndef EMSCRIPTEN // We provide this in JS
 _LIBCPP_NORETURN
 void
 terminate() _NOEXCEPT
@@ -97,9 +98,10 @@ terminate() _NOEXCEPT
     }
 #endif  // _LIBCPP_NO_EXCEPTIONS
 }
+#endif // !EMSCRIPTEN
 #endif // !defined(LIBCXXRT) && !defined(_LIBCPPABI_VERSION)
 
-#if !defined(LIBCXXRT) && !defined(__GLIBCXX__)
+#if !defined(LIBCXXRT) && !defined(__GLIBCXX__) && !defined(EMSCRIPTEN)
 bool uncaught_exception() _NOEXCEPT
 {
 #if __APPLE__ || defined(_LIBCPPABI_VERSION)
diff --git a/system/lib/libcxx/symbols b/system/lib/libcxx/symbols
index 2a9b51860c677..7e2072bce5f73 100644
--- a/system/lib/libcxx/symbols
+++ b/system/lib/libcxx/symbols
@@ -1,44 +1,6 @@
-         t _GLOBAL__I_a
-         t _GLOBAL__I_a23
-         d _ZGVZNKSt3__120__time_get_c_storageIcE3__XEvE1s
-         d _ZGVZNKSt3__120__time_get_c_storageIcE3__cEvE1s
-         d _ZGVZNKSt3__120__time_get_c_storageIcE3__rEvE1s
-         d _ZGVZNKSt3__120__time_get_c_storageIcE3__xEvE1s
-         d _ZGVZNKSt3__120__time_get_c_storageIcE7__am_pmEvE5am_pm
-         d _ZGVZNKSt3__120__time_get_c_storageIcE7__weeksEvE5weeks
-         d _ZGVZNKSt3__120__time_get_c_storageIcE8__monthsEvE6months
-         d _ZGVZNKSt3__120__time_get_c_storageIwE3__XEvE1s
-         d _ZGVZNKSt3__120__time_get_c_storageIwE3__cEvE1s
-         d _ZGVZNKSt3__120__time_get_c_storageIwE3__rEvE1s
-         d _ZGVZNKSt3__120__time_get_c_storageIwE3__xEvE1s
-         d _ZGVZNKSt3__120__time_get_c_storageIwE7__am_pmEvE5am_pm
-         d _ZGVZNKSt3__120__time_get_c_storageIwE7__weeksEvE5weeks
-         d _ZGVZNKSt3__120__time_get_c_storageIwE8__monthsEvE6months
-         d _ZGVZNSt3__112_GLOBAL__N_13mutEvE1m
-         d _ZGVZNSt3__112__get_sp_mutEPKvE4muts
-         d _ZGVZNSt3__112__rs_defaultclEvE6__rs_g
-         d _ZGVZNSt3__115future_categoryEvE3__f
-         d _ZGVZNSt3__115system_categoryEvE1s
-         d _ZGVZNSt3__116generic_categoryEvE1s
-         d _ZGVZNSt3__117iostream_categoryEvE1s
-         d _ZGVZNSt3__119__thread_local_dataEvE3__p
-         d _ZGVZNSt3__16__clocEvE6result
-         d _ZGVZNSt3__16locale7classicEvE1c
-         d _ZGVZNSt3__16locale8__globalEvE1g
-         d _ZGVZNSt3__18__get_dbEvE2db
-         d _ZGVZNSt3__1L10init_am_pmEvE5am_pm
-         d _ZGVZNSt3__1L10init_weeksEvE5weeks
-         d _ZGVZNSt3__1L11init_monthsEvE6months
-         d _ZGVZNSt3__1L11init_wam_pmEvE5am_pm
-         d _ZGVZNSt3__1L11init_wweeksEvE5weeks
-         d _ZGVZNSt3__1L12init_wmonthsEvE6months
-         t _ZN12_GLOBAL__N_114__libcpp_nmstrC1EPKc
-         t _ZN12_GLOBAL__N_114__libcpp_nmstrC1ERKS0_
-         t _ZN12_GLOBAL__N_114__libcpp_nmstrC2EPKc
-         t _ZN12_GLOBAL__N_114__libcpp_nmstrC2ERKS0_
-         t _ZN12_GLOBAL__N_114__libcpp_nmstraSERKS0_
-         t _ZNK12_GLOBAL__N_114__libcpp_nmstr5c_strEv
-         t _ZNK12_GLOBAL__N_114__libcpp_nmstr5countEv
+         T _ZNKSt11logic_error4whatEv
+         T _ZNKSt13bad_exception4whatEv
+         T _ZNKSt13runtime_error4whatEv
          T _ZNKSt16nested_exception14rethrow_nestedEv
          T _ZNKSt3__110__time_put8__do_putEPcRS1_PK2tmcc
          T _ZNKSt3__110__time_put8__do_putEPwRS1_PK2tmcc
@@ -125,7 +87,6 @@
          T _ZNKSt3__111__libcpp_db6unlockEv
          T _ZNKSt3__111__libcpp_db8__find_cEPv
          T _ZNKSt3__111__libcpp_db9__addableEPKvi
-         t _ZNKSt3__112_GLOBAL__N_111__fake_bindclEv
          T _ZNKSt3__112__do_message7messageEi
          T _ZNKSt3__112bad_weak_ptr4whatEv
          W _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12__invariantsEv
@@ -749,7 +710,25 @@
          T _ZNSt11logic_errorC2EPKc
          T _ZNSt11logic_errorC2ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE
          T _ZNSt11logic_errorC2ERKS_
+         T _ZNSt11logic_errorD0Ev
+         T _ZNSt11logic_errorD1Ev
+         T _ZNSt11logic_errorD2Ev
          T _ZNSt11logic_erroraSERKS_
+         T _ZNSt11range_errorD0Ev
+         T _ZNSt11range_errorD1Ev
+         T _ZNSt11range_errorD2Ev
+         T _ZNSt12domain_errorD0Ev
+         T _ZNSt12domain_errorD1Ev
+         T _ZNSt12domain_errorD2Ev
+         T _ZNSt12length_errorD0Ev
+         T _ZNSt12length_errorD1Ev
+         T _ZNSt12length_errorD2Ev
+         T _ZNSt12out_of_rangeD0Ev
+         T _ZNSt12out_of_rangeD1Ev
+         T _ZNSt12out_of_rangeD2Ev
+         T _ZNSt13bad_exceptionD0Ev
+         T _ZNSt13bad_exceptionD1Ev
+         T _ZNSt13bad_exceptionD2Ev
          T _ZNSt13exception_ptrC1ERKS_
          T _ZNSt13exception_ptrC2ERKS_
          T _ZNSt13exception_ptrD1Ev
@@ -761,7 +740,19 @@
          T _ZNSt13runtime_errorC2EPKc
          T _ZNSt13runtime_errorC2ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE
          T _ZNSt13runtime_errorC2ERKS_
+         T _ZNSt13runtime_errorD0Ev
+         T _ZNSt13runtime_errorD1Ev
+         T _ZNSt13runtime_errorD2Ev
          T _ZNSt13runtime_erroraSERKS_
+         T _ZNSt14overflow_errorD0Ev
+         T _ZNSt14overflow_errorD1Ev
+         T _ZNSt14overflow_errorD2Ev
+         T _ZNSt15underflow_errorD0Ev
+         T _ZNSt15underflow_errorD1Ev
+         T _ZNSt15underflow_errorD2Ev
+         T _ZNSt16invalid_argumentD0Ev
+         T _ZNSt16invalid_argumentD1Ev
+         T _ZNSt16invalid_argumentD2Ev
          T _ZNSt16nested_exceptionC1Ev
          T _ZNSt16nested_exceptionC2Ev
          T _ZNSt16nested_exceptionD0Ev
@@ -919,51 +910,6 @@
          T _ZNSt3__111timed_mutexD2Ev
          D _ZNSt3__111try_to_lockE
          C _ZNSt3__111unique_lockINS_5mutexEE6unlockEv
-         t _ZNSt3__112_GLOBAL__N_110use_strcmpclERKNS0_10classnamesEPKc
-         t _ZNSt3__112_GLOBAL__N_110use_strcmpclERKNS0_14collationnamesEPKc
-         t _ZNSt3__112_GLOBAL__N_111__fake_bindC1EMNS_6locale2idEFvvEPS3_
-         t _ZNSt3__112_GLOBAL__N_111__fake_bindC2EMNS_6locale2idEFvvEPS3_
-         t _ZNSt3__112_GLOBAL__N_13mutEv
-         t _ZNSt3__112_GLOBAL__N_14makeINS_10moneypunctIcLb0EEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_10moneypunctIcLb1EEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_10moneypunctIwLb0EEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_10moneypunctIwLb1EEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_5ctypeIcEEPtbjEERT_T0_T1_T2_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_5ctypeIwEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_6locale5__impEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_7codecvtIDic10_mbstate_tEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_7codecvtIDsc10_mbstate_tEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_7codecvtIcc10_mbstate_tEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_7codecvtIwc10_mbstate_tEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_7collateIcEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_7collateIwEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_7num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_7num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_7num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_7num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_8messagesIcEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_8messagesIwEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_8numpunctIcEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_8numpunctIwEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_8time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_8time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_8time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_8time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_9money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_9money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_9money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_14makeINS_9money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEjEERT_T0_
-         t _ZNSt3__112_GLOBAL__N_17countofIcEEjPKT_S4_
-         t _ZNSt3__112_GLOBAL__N_17countofIcLj100EEEjRAT0__KT_
-         t _ZNSt3__112_GLOBAL__N_17countofIwEEjPKT_S4_
-         t _ZNSt3__112_GLOBAL__N_17countofIwLj100EEEjRAT0__KT_
-         t _ZNSt3__112_GLOBAL__N_17releaseclEPNS_6locale5facetE
-         t _ZNSt3__112_GLOBAL__N_19decrementIlEET_RS2_
-         t _ZNSt3__112_GLOBAL__N_19incrementIlEET_RS2_
-         d _ZNSt3__112_GLOBAL__N_1L10ClassNamesE
-         d _ZNSt3__112_GLOBAL__N_1L12collatenamesE
-         d _ZNSt3__112_GLOBAL__N_1L12small_primesE
-         d _ZNSt3__112_GLOBAL__N_1L7indicesE
          C _ZNSt3__112__asprintf_lEPPcPvPKcz
          C _ZNSt3__112__do_messageC2Ev
          C _ZNSt3__112__do_messageD0Ev
@@ -1314,8 +1260,6 @@
          T _ZNSt3__112system_errorD0Ev
          T _ZNSt3__112system_errorD1Ev
          T _ZNSt3__112system_errorD2Ev
-         t _ZNSt3__113__lower_boundIRNS_12_GLOBAL__N_110use_strcmpEPKNS1_10classnamesEPKcEET0_S9_S9_RKT1_T_
-         t _ZNSt3__113__lower_boundIRNS_12_GLOBAL__N_110use_strcmpEPKNS1_14collationnamesEPKcEET0_S9_S9_RKT1_T_
          C _ZNSt3__113__lower_boundIRNS_6__lessIjjEEPKjjEET0_S6_S6_RKT1_T_
          C _ZNSt3__113__rotate_leftINS_11__wrap_iterIPcEEEET_S4_S4_
          C _ZNSt3__113__rotate_leftINS_11__wrap_iterIPwEEEET_S4_S4_
@@ -1805,7 +1749,6 @@
          C _ZNSt3__117__assoc_sub_stateD0Ev
          C _ZNSt3__117__assoc_sub_stateD1Ev
          C _ZNSt3__117__assoc_sub_stateD2Ev
-         t _ZNSt3__117__call_once_proxyINS_5tupleIJNS_12_GLOBAL__N_111__fake_bindEEEEEEvPv
          T _ZNSt3__117__widen_from_utf8ILj16EED0Ev
          T _ZNSt3__117__widen_from_utf8ILj16EED1Ev
          T _ZNSt3__117__widen_from_utf8ILj16EED2Ev
@@ -2544,53 +2487,15 @@
          T _ZNSt3__19to_stringEm
          T _ZNSt3__19to_stringEx
          T _ZNSt3__19to_stringEy
-         t _ZNSt3__1L10__init_patIcEEvRNS_10money_base7patternERNS_12basic_stringIT_NS_11char_traitsIS5_EENS_9allocatorIS5_EEEEbcccS5_
-         t _ZNSt3__1L10__init_patIwEEvRNS_10money_base7patternERNS_12basic_stringIT_NS_11char_traitsIS5_EENS_9allocatorIS5_EEEEbcccS5_
-         t _ZNSt3__1L10init_am_pmEv
-         t _ZNSt3__1L10init_weeksEv
-         t _ZNSt3__1L11init_monthsEv
-         t _ZNSt3__1L11init_wam_pmEv
-         t _ZNSt3__1L11init_wweeksEv
-         t _ZNSt3__1L12init_wmonthsEv
-         t _ZNSt3__1L12ucs2_to_utf8EPKtS1_RS1_PhS3_RS3_mNS_12codecvt_modeE
-         t _ZNSt3__1L12ucs4_to_utf8EPKjS1_RS1_PhS3_RS3_mNS_12codecvt_modeE
-         t _ZNSt3__1L12utf8_to_ucs2EPKhS1_RS1_PtS3_RS3_mNS_12codecvt_modeE
-         t _ZNSt3__1L12utf8_to_ucs4EPKhS1_RS1_PjS3_RS3_mNS_12codecvt_modeE
-         t _ZNSt3__1L13utf16_to_utf8EPKjS1_RS1_PhS3_RS3_mNS_12codecvt_modeE
-         t _ZNSt3__1L13utf16_to_utf8EPKtS1_RS1_PhS3_RS3_mNS_12codecvt_modeE
-         t _ZNSt3__1L13utf8_to_utf16EPKhS1_RS1_PjS3_RS3_mNS_12codecvt_modeE
-         t _ZNSt3__1L13utf8_to_utf16EPKhS1_RS1_PtS3_RS3_mNS_12codecvt_modeE
-         t _ZNSt3__1L15ucs2_to_utf16beEPKtS1_RS1_PhS3_RS3_mNS_12codecvt_modeE
-         t _ZNSt3__1L15ucs2_to_utf16leEPKtS1_RS1_PhS3_RS3_mNS_12codecvt_modeE
-         t _ZNSt3__1L15ucs4_to_utf16beEPKjS1_RS1_PhS3_RS3_mNS_12codecvt_modeE
-         t _ZNSt3__1L15ucs4_to_utf16leEPKjS1_RS1_PhS3_RS3_mNS_12codecvt_modeE
-         t _ZNSt3__1L15utf16be_to_ucs2EPKhS1_RS1_PtS3_RS3_mNS_12codecvt_modeE
-         t _ZNSt3__1L15utf16be_to_ucs4EPKhS1_RS1_PjS3_RS3_mNS_12codecvt_modeE
-         t _ZNSt3__1L15utf16le_to_ucs2EPKhS1_RS1_PtS3_RS3_mNS_12codecvt_modeE
-         t _ZNSt3__1L15utf16le_to_ucs4EPKhS1_RS1_PjS3_RS3_mNS_12codecvt_modeE
-         t _ZNSt3__1L19utf8_to_ucs2_lengthEPKhS1_jmNS_12codecvt_modeE
-         t _ZNSt3__1L19utf8_to_ucs4_lengthEPKhS1_jmNS_12codecvt_modeE
-         t _ZNSt3__1L20utf8_to_utf16_lengthEPKhS1_jmNS_12codecvt_modeE
-         t _ZNSt3__1L22make_error_type_stringENS_15regex_constants10error_typeE
-         t _ZNSt3__1L22utf16be_to_ucs2_lengthEPKhS1_jmNS_12codecvt_modeE
-         t _ZNSt3__1L22utf16be_to_ucs4_lengthEPKhS1_jmNS_12codecvt_modeE
-         t _ZNSt3__1L22utf16le_to_ucs2_lengthEPKhS1_jmNS_12codecvt_modeE
-         t _ZNSt3__1L22utf16le_to_ucs4_lengthEPKhS1_jmNS_12codecvt_modeE
-         d _ZNSt3__1L2cvE
-         d _ZNSt3__1L3mutE
-         d _ZNSt3__1L5__cinE
-         d _ZNSt3__1L6__cerrE
-         d _ZNSt3__1L6__coutE
-         d _ZNSt3__1L6__wcinE
-         d _ZNSt3__1L7__wcerrE
-         d _ZNSt3__1L7__wcoutE
-         d _ZNSt3__1L8__rs_mutE
-         d _ZNSt3__1L8mut_backE
          W _ZNSt3__1plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EEPKS6_RKS9_
+         T _ZSt10unexpectedv
+         T _ZSt13get_terminatev
+         T _ZSt13set_terminatePFvvE
+         T _ZSt14get_unexpectedv
+         T _ZSt14set_unexpectedPFvvE
          T _ZSt17current_exceptionv
          T _ZSt17rethrow_exceptionSt13exception_ptr
          C _ZSt18make_exception_ptrINSt3__112future_errorEESt13exception_ptrT_
-         T _ZSt18uncaught_exceptionv
          D _ZTCNSt3__110istrstreamE0_NS_13basic_istreamIcNS_11char_traitsIcEEEE
          D _ZTCNSt3__110ostrstreamE0_NS_13basic_ostreamIcNS_11char_traitsIcEEEE
          W _ZTCNSt3__114basic_iostreamIcNS_11char_traitsIcEEEE0_NS_13basic_istreamIcS2_EE
@@ -2720,6 +2625,16 @@
          W _ZTINSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE
          D _ZTINSt3__19strstreamE
          C _ZTINSt3__19time_baseE
+         D _ZTISt11logic_error
+         D _ZTISt11range_error
+         D _ZTISt12domain_error
+         D _ZTISt12length_error
+         D _ZTISt12out_of_range
+         D _ZTISt13bad_exception
+         D _ZTISt13runtime_error
+         D _ZTISt14overflow_error
+         D _ZTISt15underflow_error
+         D _ZTISt16invalid_argument
          D _ZTISt16nested_exception
          C _ZTSNSt3__110__stdinbufIcEE
          C _ZTSNSt3__110__stdinbufIwEE
@@ -2843,6 +2758,16 @@
          W _ZTSNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE
          D _ZTSNSt3__19strstreamE
          C _ZTSNSt3__19time_baseE
+         D _ZTSSt11logic_error
+         D _ZTSSt11range_error
+         D _ZTSSt12domain_error
+         D _ZTSSt12length_error
+         D _ZTSSt12out_of_range
+         D _ZTSSt13bad_exception
+         D _ZTSSt13runtime_error
+         D _ZTSSt14overflow_error
+         D _ZTSSt15underflow_error
+         D _ZTSSt16invalid_argument
          D _ZTSSt16nested_exception
          D _ZTTNSt3__110istrstreamE
          D _ZTTNSt3__110ostrstreamE
@@ -2955,6 +2880,16 @@
          W _ZTVNSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE
          W _ZTVNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE
          D _ZTVNSt3__19strstreamE
+         D _ZTVSt11logic_error
+         D _ZTVSt11range_error
+         D _ZTVSt12domain_error
+         D _ZTVSt12length_error
+         D _ZTVSt12out_of_range
+         D _ZTVSt13bad_exception
+         D _ZTVSt13runtime_error
+         D _ZTVSt14overflow_error
+         D _ZTVSt15underflow_error
+         D _ZTVSt16invalid_argument
          D _ZTVSt16nested_exception
          W _ZThn8_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__XEv
          W _ZThn8_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__cEv
@@ -2990,93 +2925,4 @@
          W _ZTv0_n12_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED1Ev
          T _ZTv0_n12_NSt3__19strstreamD0Ev
          T _ZTv0_n12_NSt3__19strstreamD1Ev
-         d _ZZNKSt3__120__time_get_c_storageIcE3__XEvE1s
-         d _ZZNKSt3__120__time_get_c_storageIcE3__cEvE1s
-         d _ZZNKSt3__120__time_get_c_storageIcE3__rEvE1s
-         d _ZZNKSt3__120__time_get_c_storageIcE3__xEvE1s
-         d _ZZNKSt3__120__time_get_c_storageIcE7__am_pmEvE5am_pm
-         d _ZZNKSt3__120__time_get_c_storageIcE7__weeksEvE5weeks
-         d _ZZNKSt3__120__time_get_c_storageIcE8__monthsEvE6months
-         d _ZZNKSt3__120__time_get_c_storageIwE3__XEvE1s
-         d _ZZNKSt3__120__time_get_c_storageIwE3__cEvE1s
-         d _ZZNKSt3__120__time_get_c_storageIwE3__rEvE1s
-         d _ZZNKSt3__120__time_get_c_storageIwE3__xEvE1s
-         d _ZZNKSt3__120__time_get_c_storageIwE7__am_pmEvE5am_pm
-         d _ZZNKSt3__120__time_get_c_storageIwE7__weeksEvE5weeks
-         d _ZZNKSt3__120__time_get_c_storageIwE8__monthsEvE6months
-         d _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11do_get_timeES4_S4_RNS_8ios_baseERjP2tmE5__fmt
-         d _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm
-         d _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm5
-         d _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm6
-         d _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm7
-         d _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm8
-         d _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11do_get_timeES4_S4_RNS_8ios_baseERjP2tmE5__fmt
-         d _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm
-         d _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm10
-         d _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm11
-         d _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm12
-         d _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm9
-         d _ZZNKSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_bRNS_8ios_baseERjReE5__src
-         d _ZZNKSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_bRNS_8ios_baseERjReE5__src
-         d _ZZNSt3__112_GLOBAL__N_13mutEvE1m
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_10moneypunctIcLb0EEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_10moneypunctIcLb1EEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_10moneypunctIwLb0EEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_10moneypunctIwLb1EEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_5ctypeIcEEPtbjEERT_T0_T1_T2_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_5ctypeIwEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_6locale5__impEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_7codecvtIDic10_mbstate_tEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_7codecvtIDsc10_mbstate_tEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_7codecvtIcc10_mbstate_tEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_7codecvtIwc10_mbstate_tEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_7collateIcEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_7collateIwEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_7num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_7num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_7num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_7num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_8messagesIcEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_8messagesIwEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_8numpunctIcEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_8numpunctIwEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_8time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_8time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_8time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_8time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_9money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_9money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_9money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEjEERT_T0_E3buf
-         d _ZZNSt3__112_GLOBAL__N_14makeINS_9money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEjEERT_T0_E3buf
-         d _ZZNSt3__112__get_sp_mutEPKvE4muts
-         d _ZZNSt3__112__rs_defaultclEvE6__rs_g
-         d _ZZNSt3__115future_categoryEvE3__f
-         d _ZZNSt3__115system_categoryEvE1s
-         d _ZZNSt3__116generic_categoryEvE1s
-         d _ZZNSt3__117iostream_categoryEvE1s
-         d _ZZNSt3__119__thread_local_dataEvE3__p
-         d _ZZNSt3__16__clocEvE6result
-         d _ZZNSt3__16locale5__imp11make_globalEvE3buf
-         d _ZZNSt3__16locale5__imp12make_classicEvE3buf
-         d _ZZNSt3__16locale7classicEvE1c
-         d _ZZNSt3__16locale8__globalEvE1g
-         d _ZZNSt3__18__get_dbEvE2db
-         d _ZZNSt3__18ios_base15sync_with_stdioEbE14previous_state
-         d _ZZNSt3__18ios_base5iwordEiE5error
-         d _ZZNSt3__18ios_base5pwordEiE5error
-         d _ZZNSt3__1L10init_am_pmEvE5am_pm
-         d _ZZNSt3__1L10init_weeksEvE5weeks
-         d _ZZNSt3__1L11init_monthsEvE6months
-         d _ZZNSt3__1L11init_wam_pmEvE5am_pm
-         d _ZZNSt3__1L11init_wweeksEvE5weeks
-         d _ZZNSt3__1L12init_wmonthsEvE6months
-         t __cxx_global_array_dtor
-         t __cxx_global_array_dtor105
-         t __cxx_global_array_dtor120
-         t __cxx_global_array_dtor281
-         t __cxx_global_array_dtor53
-         t __cxx_global_array_dtor56
-         t __cxx_global_array_dtor81
-         t __cxx_global_var_init
-         t __cxx_global_var_init22
          D llvm.global_ctors
diff --git a/system/lib/libcxxabi/symbols b/system/lib/libcxxabi/symbols
index 80867b8ba4d58..a02a641107e72 100644
--- a/system/lib/libcxxabi/symbols
+++ b/system/lib/libcxxabi/symbols
@@ -32,8 +32,6 @@
          T _ZN10__cxxabiv129__pointer_to_member_type_infoD1Ev
          T _ZN10__cxxabiv129__pointer_to_member_type_infoD2Ev
          C _ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b
-         t _ZN12_GLOBAL__N_114__libcpp_nmstrD1Ev
-         t _ZN12_GLOBAL__N_114__libcpp_nmstrD2Ev
          T _ZNK10__cxxabiv116__enum_type_info9can_catchEPKNS_16__shim_type_infoERPv
          T _ZNK10__cxxabiv116__shim_type_info5noop1Ev
          T _ZNK10__cxxabiv116__shim_type_info5noop2Ev
@@ -58,80 +56,21 @@
          T _ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib
          T _ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi
          T _ZNK10__cxxabiv123__fundamental_type_info9can_catchEPKNS_16__shim_type_infoERPv
-         t _ZNK12_GLOBAL__N_114__libcpp_nmstr5c_strEv
-         t _ZNK12_GLOBAL__N_114__libcpp_nmstr5countEv
          T _ZNKSt10bad_typeid4whatEv
-         T _ZNKSt11logic_error4whatEv
-         T _ZNKSt13bad_exception4whatEv
-         T _ZNKSt13runtime_error4whatEv
-         T _ZNKSt20bad_array_new_length4whatEv
          T _ZNKSt8bad_cast4whatEv
-         T _ZNKSt9bad_alloc4whatEv
-         T _ZNKSt9exception4whatEv
          T _ZNSt10bad_typeidC1Ev
          T _ZNSt10bad_typeidC2Ev
          T _ZNSt10bad_typeidD0Ev
          T _ZNSt10bad_typeidD1Ev
          T _ZNSt10bad_typeidD2Ev
-         T _ZNSt11logic_errorD0Ev
-         T _ZNSt11logic_errorD1Ev
-         T _ZNSt11logic_errorD2Ev
-         T _ZNSt11range_errorD0Ev
-         T _ZNSt11range_errorD1Ev
-         T _ZNSt11range_errorD2Ev
-         T _ZNSt12domain_errorD0Ev
-         T _ZNSt12domain_errorD1Ev
-         T _ZNSt12domain_errorD2Ev
-         T _ZNSt12length_errorD0Ev
-         T _ZNSt12length_errorD1Ev
-         T _ZNSt12length_errorD2Ev
-         T _ZNSt12out_of_rangeD0Ev
-         T _ZNSt12out_of_rangeD1Ev
-         T _ZNSt12out_of_rangeD2Ev
-         T _ZNSt13bad_exceptionD0Ev
-         T _ZNSt13bad_exceptionD1Ev
-         T _ZNSt13bad_exceptionD2Ev
-         T _ZNSt13runtime_errorD0Ev
-         T _ZNSt13runtime_errorD1Ev
-         T _ZNSt13runtime_errorD2Ev
-         T _ZNSt14overflow_errorD0Ev
-         T _ZNSt14overflow_errorD1Ev
-         T _ZNSt14overflow_errorD2Ev
-         T _ZNSt15underflow_errorD0Ev
-         T _ZNSt15underflow_errorD1Ev
-         T _ZNSt15underflow_errorD2Ev
-         T _ZNSt16invalid_argumentD0Ev
-         T _ZNSt16invalid_argumentD1Ev
-         T _ZNSt16invalid_argumentD2Ev
-         T _ZNSt20bad_array_new_lengthC1Ev
-         T _ZNSt20bad_array_new_lengthC2Ev
-         T _ZNSt20bad_array_new_lengthD0Ev
-         T _ZNSt20bad_array_new_lengthD1Ev
-         T _ZNSt20bad_array_new_lengthD2Ev
          T _ZNSt8bad_castC1Ev
          T _ZNSt8bad_castC2Ev
          T _ZNSt8bad_castD0Ev
          T _ZNSt8bad_castD1Ev
          T _ZNSt8bad_castD2Ev
-         T _ZNSt9bad_allocC1Ev
-         T _ZNSt9bad_allocC2Ev
-         T _ZNSt9bad_allocD0Ev
-         T _ZNSt9bad_allocD1Ev
-         T _ZNSt9bad_allocD2Ev
-         T _ZNSt9exceptionD0Ev
-         T _ZNSt9exceptionD1Ev
-         T _ZNSt9exceptionD2Ev
          T _ZNSt9type_infoD0Ev
          T _ZNSt9type_infoD1Ev
          T _ZNSt9type_infoD2Ev
-         T _ZSt10unexpectedv
-         T _ZSt11__terminatePFvvE
-         T _ZSt12__unexpectedPFvvE
-         T _ZSt13get_terminatev
-         T _ZSt14get_unexpectedv
-         T _ZSt15get_new_handlerv
-         T _ZSt15set_new_handlerPFvvE
-         T _ZSt9terminatev
          D _ZTIDi
          D _ZTIDn
          D _ZTIDs
@@ -146,7 +85,6 @@
          D _ZTIN10__cxxabiv121__vmi_class_type_infoE
          D _ZTIN10__cxxabiv123__fundamental_type_infoE
          D _ZTIN10__cxxabiv129__pointer_to_member_type_infoE
-         C _ZTINSt3__19nullptr_tE
          D _ZTIPDi
          D _ZTIPDn
          D _ZTIPDs
@@ -188,20 +126,7 @@
          D _ZTIPx
          D _ZTIPy
          D _ZTISt10bad_typeid
-         D _ZTISt11logic_error
-         D _ZTISt11range_error
-         D _ZTISt12domain_error
-         D _ZTISt12length_error
-         D _ZTISt12out_of_range
-         D _ZTISt13bad_exception
-         D _ZTISt13runtime_error
-         D _ZTISt14overflow_error
-         D _ZTISt15underflow_error
-         D _ZTISt16invalid_argument
-         D _ZTISt20bad_array_new_length
          D _ZTISt8bad_cast
-         D _ZTISt9bad_alloc
-         D _ZTISt9exception
          D _ZTISt9type_info
          D _ZTIa
          D _ZTIb
@@ -234,7 +159,6 @@
          D _ZTSN10__cxxabiv121__vmi_class_type_infoE
          D _ZTSN10__cxxabiv123__fundamental_type_infoE
          D _ZTSN10__cxxabiv129__pointer_to_member_type_infoE
-         C _ZTSNSt3__19nullptr_tE
          D _ZTSPDi
          D _ZTSPDn
          D _ZTSPDs
@@ -276,20 +200,7 @@
          D _ZTSPx
          D _ZTSPy
          D _ZTSSt10bad_typeid
-         D _ZTSSt11logic_error
-         D _ZTSSt11range_error
-         D _ZTSSt12domain_error
-         D _ZTSSt12length_error
-         D _ZTSSt12out_of_range
-         D _ZTSSt13bad_exception
-         D _ZTSSt13runtime_error
-         D _ZTSSt14overflow_error
-         D _ZTSSt15underflow_error
-         D _ZTSSt16invalid_argument
-         D _ZTSSt20bad_array_new_length
          D _ZTSSt8bad_cast
-         D _ZTSSt9bad_alloc
-         D _ZTSSt9exception
          D _ZTSSt9type_info
          D _ZTSa
          D _ZTSb
@@ -320,28 +231,6 @@
          D _ZTVN10__cxxabiv123__fundamental_type_infoE
          D _ZTVN10__cxxabiv129__pointer_to_member_type_infoE
          D _ZTVSt10bad_typeid
-         D _ZTVSt11logic_error
-         D _ZTVSt11range_error
-         D _ZTVSt12domain_error
-         D _ZTVSt12length_error
-         D _ZTVSt12out_of_range
-         D _ZTVSt13bad_exception
-         D _ZTVSt13runtime_error
-         D _ZTVSt14overflow_error
-         D _ZTVSt15underflow_error
-         D _ZTVSt16invalid_argument
-         D _ZTVSt20bad_array_new_length
          D _ZTVSt8bad_cast
-         D _ZTVSt9bad_alloc
-         D _ZTVSt9exception
          D _ZTVSt9type_info
-         W _ZdaPv
-         W _ZdaPvRKSt9nothrow_t
-         W _ZdlPv
-         W _ZdlPvRKSt9nothrow_t
-         W _Znaj
-         W _ZnajRKSt9nothrow_t
-         W _Znwj
-         W _ZnwjRKSt9nothrow_t
-         D __cxa_new_handler
          T __dynamic_cast
diff --git a/tools/shared.py b/tools/shared.py
index 7b6677821c9f1..7514171c75625 100644
--- a/tools/shared.py
+++ b/tools/shared.py
@@ -393,7 +393,6 @@ def clean_temp():
     '-Xclang', '-isystem' + path_from_root('system', 'include', 'emscripten'),
     '-Xclang', '-isystem' + path_from_root('system', 'include', 'bsd'), # posix stuff
     '-Xclang', '-isystem' + path_from_root('system', 'include', 'libc'),
-    '-Xclang', '-isystem' + path_from_root('system', 'lib', 'libcxxabi', 'include'),
     '-Xclang', '-isystem' + path_from_root('system', 'include', 'gfx'),
     '-Xclang', '-isystem' + path_from_root('system', 'include', 'net'),
     '-Xclang', '-isystem' + path_from_root('system', 'include', 'SDL'),

From ad285f60d0be807e7e49e7c86ca8f9bedec4714f Mon Sep 17 00:00:00 2001
From: Alon Zakai <alonzakai@gmail.com>
Date: Mon, 25 Mar 2013 12:58:25 -0700
Subject: [PATCH 2/2] remove symbol removing hack; export all malloc symbols as
 weak; add test for a case where symbol removing made us not merge llvm
 constructors properly

---
 emcc                  |  8 --------
 system/lib/dlmalloc.c |  6 +++++-
 tests/runner.py       | 28 ++++++++++++++++++++++++++++
 tools/shared.py       |  2 +-
 4 files changed, 34 insertions(+), 10 deletions(-)

diff --git a/emcc b/emcc
index cd906c7b016cd..bc76b01dbc7b9 100755
--- a/emcc
+++ b/emcc
@@ -1232,14 +1232,6 @@ try:
         # We need to build and link the library in
         if DEBUG: print >> sys.stderr, 'emcc: including %s' % name
         libfile = shared.Cache.get(name, create)
-        if has and len(has) > 0:
-          # remove the symbols we do not need
-          fixed = in_temp(uniquename(libfile)) + '.bc'
-          shutil.copyfile(libfile, fixed)
-          for haz in has:
-            if DEBUG: print >> sys.stderr, 'emcc: including: removing symbol "%s" that we have' % haz
-            shared.Building.remove_symbol(fixed, haz)
-          libfile = fixed
         extra_files_to_link.append(libfile)
         force = True
         if fix and need:
diff --git a/system/lib/dlmalloc.c b/system/lib/dlmalloc.c
index 7e04a726bd63b..9a84d48f48c82 100644
--- a/system/lib/dlmalloc.c
+++ b/system/lib/dlmalloc.c
@@ -532,6 +532,10 @@
 #define DLMALLOC_VERSION 20806
 #endif /* DLMALLOC_VERSION */
 
+#if EMSCRIPTEN
+#define DLMALLOC_EXPORT __attribute__((__weak__, __visibility__("default")))
+#endif
+
 #ifndef DLMALLOC_EXPORT
 #define DLMALLOC_EXPORT extern
 #endif
@@ -6291,4 +6295,4 @@ int mspace_mallopt(int param_number, int value) {
  * Based loosely on libg++-1.2X malloc. (It retains some of the overall
  structure of old version,  but most details differ.)
  
- */
\ No newline at end of file
+ */
diff --git a/tests/runner.py b/tests/runner.py
index f0b5445ca9f09..e3b62110a63c4 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -6245,6 +6245,34 @@ def test_direct_string_constant_usage(self):
         }
       '''
       self.do_run(src, "some string constant")
+
+    def test_std_cout_new(self):
+      src = '''
+        #include <iostream>
+
+        struct NodeInfo { //structure that we want to transmit to our shaders
+            float x;
+            float y;
+            float s;
+            float c;
+        };
+        const int nbNodes = 100;
+        NodeInfo * data = new NodeInfo[nbNodes]; //our data that will be transmitted using float texture.
+
+        template<int i>
+        void printText( const char (&text)[ i ] )
+        {
+           std::cout << text << std::endl;
+        }
+
+        int main()
+        {
+          printText( "some string constant" );
+          return 0;
+        }
+      '''
+
+      self.do_run(src, "some string constant")
       
     def test_istream(self):
       if self.emcc_args is None: return self.skip('requires libcxx')
diff --git a/tools/shared.py b/tools/shared.py
index 7514171c75625..c4efc974ba3c5 100644
--- a/tools/shared.py
+++ b/tools/shared.py
@@ -181,7 +181,7 @@ def check_node_version():
 # we re-check sanity when the settings are changed)
 # We also re-check sanity and clear the cache when the version changes
 
-EMSCRIPTEN_VERSION = '1.3.4'
+EMSCRIPTEN_VERSION = '1.3.5'
 
 def check_sanity(force=False):
   try: