Get things working with the new libcxx / libcxxabi.

This commit is contained in:
Bruce Mitchener 2013-02-28 00:35:29 +07:00
Родитель 1a0bccc11d
Коммит 90338c69f7
11 изменённых файлов: 818 добавлений и 476 удалений

12
emcc
Просмотреть файл

@ -1102,7 +1102,6 @@ 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'),
@ -1166,7 +1165,8 @@ try:
'ios.cpp',
'locale.cpp',
'regex.cpp',
'strstream.cpp'
'strstream.cpp',
'typeinfo.cpp'
]
for src in libcxx_files:
o = in_temp(src + '.o')
@ -1189,8 +1189,14 @@ try:
if DEBUG: print >> sys.stderr, 'emcc: building libcxxabi for cache'
os = []
libcxxabi_files = [
'abort_message.cpp',
'private_typeinfo.cpp',
'typeinfo.cpp'
'typeinfo.cpp',
'cxa_new_delete.cpp',
'cxa_handlers.cpp',
'stdexcept.cpp',
'exception.cpp',
'cxa_exception_storage.cpp']:
]
for src in libcxxabi_files:
o = in_temp(src + '.o')

Просмотреть файл

@ -5082,6 +5082,10 @@ LibraryManager.library = {
_ZSt18uncaught_exceptionv: function() { // std::uncaught_exception()
return !!__ZSt18uncaught_exceptionv.uncaught_exception;
},
__cxa_uncaught_exception__deps: ['_Zst18uncaught_exceptionv'],
__cxa_uncaught_exception: function() {
return !!__ZSt18uncaught_exceptionv.uncaught_exception;
},
__cxa_call_unexpected: function(exception) {
Module.printErr('Unexpected exception thrown, this is not properly supported - aborting');

Просмотреть файл

@ -21,9 +21,9 @@
#include <locale.h>
#if _WIN32
# include <support/win32/locale_win32.h>
#elif (__GLIBC__ || __APPLE__ || __FreeBSD__ || __sun__)
#elif (__GLIBC__ || __APPLE__ || __FreeBSD__ || __sun__ || EMSCRIPTEN)
# include <xlocale.h>
#endif // _WIN32 || __GLIBC__ || __APPLE__ || __FreeBSD_
#endif // _WIN32 || __GLIBC__ || __APPLE__ || __FreeBSD__ || EMSCRIPTEN
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
@ -339,11 +339,13 @@ public:
static const mask punct = _PUNCT;
static const mask xdigit = _HEX;
static const mask blank = _BLANK;
#elif (__APPLE__ || __FreeBSD__)
#elif (__APPLE__ || __FreeBSD__ || EMSCRIPTEN)
#if __APPLE__
typedef __uint32_t mask;
#elif __FreeBSD__
typedef unsigned long mask;
#elif EMSCRIPTEN
typedef unsigned short mask;
#endif
static const mask space = _CTYPE_S;
static const mask print = _CTYPE_R;
@ -367,7 +369,7 @@ public:
static const mask punct = _ISPUNCT;
static const mask xdigit = _ISXDIGIT;
static const mask blank = _ISBLANK;
#else // __GLIBC__ || _WIN32 || __APPLE__ || __FreeBSD__ || __sun__
#else // __GLIBC__ || _WIN32 || __APPLE__ || __FreeBSD__ || EMSCRIPTEN || __sun__
typedef unsigned long mask;
static const mask space = 1<<0;
static const mask print = 1<<1;
@ -590,7 +592,7 @@ public:
#endif
_LIBCPP_ALWAYS_INLINE const mask* table() const _NOEXCEPT {return __tab_;}
static const mask* classic_table() _NOEXCEPT;
#if defined(__GLIBC__)
#if defined(__GLIBC__) || defined(EMSCRIPTEN)
static const int* __classic_upper_table() _NOEXCEPT;
static const int* __classic_lower_table() _NOEXCEPT;
#endif

Просмотреть файл

@ -222,7 +222,7 @@ typedef _VSTD::unique_ptr<__locale_struct, decltype(&uselocale)> __locale_raii;
// OSX has nice foo_l() functions that let you turn off use of the global
// locale. Linux, not so much. The following functions avoid the locale when
// that's possible and otherwise do the wrong thing. FIXME.
#ifdef __linux__
#if defined(__linux__) || defined(EMSCRIPTEN)
#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
decltype(MB_CUR_MAX_L(_VSTD::declval<locale_t>()))

Просмотреть файл

@ -1,75 +1,51 @@
_err
_errx
_verr
_verrx
_vwarn
_vwarnx
_warn
_warnx
atof
bulk_free
calloc
err
errx
free
getopt
getopt_long
getopt_long_only
malloc
free
calloc
memalign
realloc
valloc
pvalloc
mallinfo
mallopt
malloc_trim
malloc_stats
malloc_usable_size
malloc_footprint
malloc_max_footprint
independent_calloc
independent_comalloc
_Znwj
_Znaj
_Znam
_Znwm
_ZdaPv
_ZdaPvRKSt9nothrow_t
_ZdlPv
_ZdlPvRKSt9nothrow_t
_Znaj
_ZnajRKSt9nothrow_t
_Znwj
_ZnwjRKSt9nothrow_t
_ZL13__new_handler
_ZSt15get_new_handlerv
_ZSt15set_new_handlerPFvvE
_ZTVSt9bad_alloc
_ZTSSt9bad_alloc
_ZNKSt9bad_alloc4whatEv
_ZNSt9bad_allocC1Ev
_ZNSt9bad_allocC2Ev
_ZNSt9bad_allocD0Ev
_ZNSt9bad_allocD1Ev
_ZNSt9bad_allocD2Ev
_ZSt17__throw_bad_allocv
_ZTISt9bad_alloc
_ZTVSt20bad_array_new_length
_ZTSSt20bad_array_new_length
_ZTISt20bad_array_new_length
_ZNKSt20bad_array_new_length4whatEv
_ZNSt20bad_array_new_lengthC1Ev
_ZNSt20bad_array_new_lengthC2Ev
_ZNSt20bad_array_new_lengthD0Ev
_ZNSt20bad_array_new_lengthD1Ev
_ZNSt20bad_array_new_lengthD2Ev
warn
warnx
err
errx
_warn
_warnx
_err
_errx
vwarn
vwarnx
mallinfo
malloc
malloc_footprint
malloc_footprint_limit
malloc_max_footprint
malloc_set_footprint_limit
malloc_stats
malloc_trim
malloc_usable_size
mallopt
memalign
optarg
opterr
optind
optopt
optreset
posix_memalign
pvalloc
realloc
realloc_in_place
strtod
strtod_l
strtof
strtold
strtold_l
valloc
verr
verrx
_vwarn
_vwarnx
_verr
_verrx
strtod
strtold
strtof
strtod_l
strtold_l
atof
vwarn
vwarnx
warn1
warnx

Просмотреть файл

@ -786,7 +786,7 @@ ctype<wchar_t>::do_toupper(char_type c) const
{
#ifdef _LIBCPP_HAS_DEFAULTRUNELOCALE
return isascii(c) ? _DefaultRuneLocale.__mapupper[c] : c;
#elif defined(__GLIBC__)
#elif defined(__GLIBC__) || defined(EMSCRIPTEN)
return isascii(c) ? ctype<char>::__classic_upper_table()[c] : c;
#else
return (isascii(c) && iswlower_l(c, __cloc())) ? c-L'a'+L'A' : c;
@ -799,7 +799,7 @@ ctype<wchar_t>::do_toupper(char_type* low, const char_type* high) const
for (; low != high; ++low)
#ifdef _LIBCPP_HAS_DEFAULTRUNELOCALE
*low = isascii(*low) ? _DefaultRuneLocale.__mapupper[*low] : *low;
#elif defined(__GLIBC__)
#elif defined(__GLIBC__) || defined(EMSCRIPTEN)
*low = isascii(*low) ? ctype<char>::__classic_upper_table()[*low]
: *low;
#else
@ -813,7 +813,7 @@ ctype<wchar_t>::do_tolower(char_type c) const
{
#ifdef _LIBCPP_HAS_DEFAULTRUNELOCALE
return isascii(c) ? _DefaultRuneLocale.__maplower[c] : c;
#elif defined(__GLIBC__)
#elif defined(__GLIBC__) || defined(EMSCRIPTEN)
return isascii(c) ? ctype<char>::__classic_lower_table()[c] : c;
#else
return (isascii(c) && isupper_l(c, __cloc())) ? c-L'A'+'a' : c;
@ -826,7 +826,7 @@ ctype<wchar_t>::do_tolower(char_type* low, const char_type* high) const
for (; low != high; ++low)
#ifdef _LIBCPP_HAS_DEFAULTRUNELOCALE
*low = isascii(*low) ? _DefaultRuneLocale.__maplower[*low] : *low;
#elif defined(__GLIBC__)
#elif defined(__GLIBC__) || defined(EMSCRIPTEN)
*low = isascii(*low) ? ctype<char>::__classic_lower_table()[*low]
: *low;
#else
@ -893,7 +893,7 @@ ctype<char>::do_toupper(char_type c) const
#ifdef _LIBCPP_HAS_DEFAULTRUNELOCALE
return isascii(c) ?
static_cast<char>(_DefaultRuneLocale.__mapupper[static_cast<ptrdiff_t>(c)]) : c;
#elif defined(__GLIBC__)
#elif defined(__GLIBC__) || defined(EMSCRIPTEN)
return isascii(c) ?
static_cast<char>(__classic_upper_table()[static_cast<size_t>(c)]) : c;
#else
@ -908,7 +908,7 @@ ctype<char>::do_toupper(char_type* low, const char_type* high) const
#ifdef _LIBCPP_HAS_DEFAULTRUNELOCALE
*low = isascii(*low) ?
static_cast<char>(_DefaultRuneLocale.__mapupper[static_cast<ptrdiff_t>(*low)]) : *low;
#elif defined(__GLIBC__)
#elif defined(__GLIBC__) || defined(EMSCRIPTEN)
*low = isascii(*low) ?
static_cast<char>(__classic_upper_table()[static_cast<size_t>(*low)]) : *low;
#else
@ -923,7 +923,7 @@ ctype<char>::do_tolower(char_type c) const
#ifdef _LIBCPP_HAS_DEFAULTRUNELOCALE
return isascii(c) ?
static_cast<char>(_DefaultRuneLocale.__maplower[static_cast<ptrdiff_t>(c)]) : c;
#elif defined(__GLIBC__)
#elif defined(__GLIBC__) || defined(EMSCRIPTEN)
return isascii(c) ?
static_cast<char>(__classic_lower_table()[static_cast<size_t>(c)]) : c;
#else
@ -937,7 +937,7 @@ ctype<char>::do_tolower(char_type* low, const char_type* high) const
for (; low != high; ++low)
#ifdef _LIBCPP_HAS_DEFAULTRUNELOCALE
*low = isascii(*low) ? static_cast<char>(_DefaultRuneLocale.__maplower[static_cast<ptrdiff_t>(*low)]) : *low;
#elif defined(__GLIBC__)
#elif defined(__GLIBC__) || defined(EMSCRIPTEN)
*low = isascii(*low) ? static_cast<char>(__classic_lower_table()[static_cast<size_t>(*low)]) : *low;
#else
*low = (isascii(*low) && isupper_l(*low, __cloc())) ? *low-'A'+'a' : *low;
@ -978,6 +978,12 @@ ctype<char>::do_narrow(const char_type* low, const char_type* high, char dfault,
return low;
}
#ifdef EMSCRIPTEN
extern "C" const unsigned short ** __ctype_b_loc();
extern "C" const int ** __ctype_tolower_loc();
extern "C" const int ** __ctype_toupper_loc();
#endif
const ctype<char>::mask*
ctype<char>::classic_table() _NOEXCEPT
{
@ -991,6 +997,8 @@ ctype<char>::classic_table() _NOEXCEPT
return _ctype+1; // internal ctype mask table defined in msvcrt.dll
// This is assumed to be safe, which is a nonsense assumption because we're
// going to end up dereferencing it later...
#elif EMSCRIPTEN
return *__ctype_b_loc();
#else
// Platform not supported: abort so the person doing the port knows what to
// fix
@ -1014,6 +1022,20 @@ ctype<char>::__classic_upper_table() _NOEXCEPT
}
#endif // __GLIBC__
#if defined(EMSCRIPTEN)
const int*
ctype<char>::__classic_lower_table() _NOEXCEPT
{
return *__ctype_tolower_loc();
}
const int*
ctype<char>::__classic_upper_table() _NOEXCEPT
{
return *__ctype_toupper_loc();
}
#endif // EMSCRIPTEN
// template <> class ctype_byname<char>
ctype_byname<char>::ctype_byname(const char* name, size_t refs)

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -65,7 +65,7 @@ thread::hardware_concurrency() _NOEXCEPT
std::size_t s = sizeof(n);
sysctl(mib, 2, &n, &s, 0, 0);
return n;
#elif defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L) && defined(_SC_NPROCESSORS_ONLN)
#elif (defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L) && defined(_SC_NPROCESSORS_ONLN)) || defined(EMSCRIPTEN)
long result = sysconf(_SC_NPROCESSORS_ONLN);
// sysconf returns -1 if the name is invalid, the option does not exist or
// does not have a definite limit.

Просмотреть файл

@ -228,4 +228,15 @@ bad_array_new_length::what() const _NOEXCEPT
return "bad_array_new_length";
}
#ifdef EMSCRIPTEN
// We don't build the new.cpp from libcxx, so we need to define this.
void
__throw_bad_alloc()
{
#ifndef _LIBCPP_NO_EXCEPTIONS
throw bad_alloc();
#endif
}
#endif
} // std

Просмотреть файл

@ -1,4 +1,313 @@
T __dynamic_cast
T _ZN10__cxxabiv116__enum_type_infoD0Ev
T _ZN10__cxxabiv116__enum_type_infoD1Ev
T _ZN10__cxxabiv116__enum_type_infoD2Ev
T _ZN10__cxxabiv116__shim_type_infoD0Ev
T _ZN10__cxxabiv116__shim_type_infoD1Ev
T _ZN10__cxxabiv116__shim_type_infoD2Ev
T _ZN10__cxxabiv117__array_type_infoD0Ev
T _ZN10__cxxabiv117__array_type_infoD1Ev
T _ZN10__cxxabiv117__array_type_infoD2Ev
T _ZN10__cxxabiv117__class_type_infoD0Ev
T _ZN10__cxxabiv117__class_type_infoD1Ev
T _ZN10__cxxabiv117__class_type_infoD2Ev
T _ZN10__cxxabiv117__pbase_type_infoD0Ev
T _ZN10__cxxabiv117__pbase_type_infoD1Ev
T _ZN10__cxxabiv117__pbase_type_infoD2Ev
T _ZN10__cxxabiv119__pointer_type_infoD0Ev
T _ZN10__cxxabiv119__pointer_type_infoD1Ev
T _ZN10__cxxabiv119__pointer_type_infoD2Ev
T _ZN10__cxxabiv120__function_type_infoD0Ev
T _ZN10__cxxabiv120__function_type_infoD1Ev
T _ZN10__cxxabiv120__function_type_infoD2Ev
T _ZN10__cxxabiv120__si_class_type_infoD0Ev
T _ZN10__cxxabiv120__si_class_type_infoD1Ev
T _ZN10__cxxabiv120__si_class_type_infoD2Ev
T _ZN10__cxxabiv121__vmi_class_type_infoD0Ev
T _ZN10__cxxabiv121__vmi_class_type_infoD1Ev
T _ZN10__cxxabiv121__vmi_class_type_infoD2Ev
T _ZN10__cxxabiv123__fundamental_type_infoD0Ev
T _ZN10__cxxabiv123__fundamental_type_infoD1Ev
T _ZN10__cxxabiv123__fundamental_type_infoD2Ev
T _ZN10__cxxabiv129__pointer_to_member_type_infoD0Ev
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
T _ZNK10__cxxabiv117__array_type_info9can_catchEPKNS_16__shim_type_infoERPv
T _ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib
T _ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib
T _ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi
T _ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi
T _ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i
T _ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi
T _ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv
T _ZNK10__cxxabiv117__pbase_type_info9can_catchEPKNS_16__shim_type_infoERPv
T _ZNK10__cxxabiv119__pointer_type_info9can_catchEPKNS_16__shim_type_infoERPv
T _ZNK10__cxxabiv120__function_type_info9can_catchEPKNS_16__shim_type_infoERPv
T _ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib
T _ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib
T _ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi
T _ZNK10__cxxabiv121__vmi_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib
T _ZNK10__cxxabiv121__vmi_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib
T _ZNK10__cxxabiv121__vmi_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi
T _ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib
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
D _ZTIN10__cxxabiv116__enum_type_infoE
D _ZTIN10__cxxabiv116__shim_type_infoE
D _ZTIN10__cxxabiv117__array_type_infoE
D _ZTIN10__cxxabiv117__class_type_infoE
D _ZTIN10__cxxabiv117__pbase_type_infoE
D _ZTIN10__cxxabiv119__pointer_type_infoE
D _ZTIN10__cxxabiv120__function_type_infoE
D _ZTIN10__cxxabiv120__si_class_type_infoE
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
D _ZTIPKDi
D _ZTIPKDn
D _ZTIPKDs
D _ZTIPKa
D _ZTIPKb
D _ZTIPKc
D _ZTIPKd
D _ZTIPKe
D _ZTIPKf
D _ZTIPKh
D _ZTIPKi
D _ZTIPKj
D _ZTIPKl
D _ZTIPKm
D _ZTIPKs
D _ZTIPKt
D _ZTIPKv
D _ZTIPKw
D _ZTIPKx
D _ZTIPKy
D _ZTIPa
D _ZTIPb
D _ZTIPc
D _ZTIPd
D _ZTIPe
D _ZTIPf
D _ZTIPh
D _ZTIPi
D _ZTIPj
D _ZTIPl
D _ZTIPm
D _ZTIPs
D _ZTIPt
D _ZTIPv
D _ZTIPw
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
D _ZTIc
D _ZTId
D _ZTIe
D _ZTIf
D _ZTIh
D _ZTIi
D _ZTIj
D _ZTIl
D _ZTIm
D _ZTIs
D _ZTIt
D _ZTIv
D _ZTIw
D _ZTIx
D _ZTIy
D _ZTSDi
D _ZTSDn
D _ZTSDs
D _ZTSN10__cxxabiv116__enum_type_infoE
D _ZTSN10__cxxabiv116__shim_type_infoE
D _ZTSN10__cxxabiv117__array_type_infoE
D _ZTSN10__cxxabiv117__class_type_infoE
D _ZTSN10__cxxabiv117__pbase_type_infoE
D _ZTSN10__cxxabiv119__pointer_type_infoE
D _ZTSN10__cxxabiv120__function_type_infoE
D _ZTSN10__cxxabiv120__si_class_type_infoE
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
D _ZTSPKDi
D _ZTSPKDn
D _ZTSPKDs
D _ZTSPKa
D _ZTSPKb
D _ZTSPKc
D _ZTSPKd
D _ZTSPKe
D _ZTSPKf
D _ZTSPKh
D _ZTSPKi
D _ZTSPKj
D _ZTSPKl
D _ZTSPKm
D _ZTSPKs
D _ZTSPKt
D _ZTSPKv
D _ZTSPKw
D _ZTSPKx
D _ZTSPKy
D _ZTSPa
D _ZTSPb
D _ZTSPc
D _ZTSPd
D _ZTSPe
D _ZTSPf
D _ZTSPh
D _ZTSPi
D _ZTSPj
D _ZTSPl
D _ZTSPm
D _ZTSPs
D _ZTSPt
D _ZTSPv
D _ZTSPw
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
D _ZTSc
D _ZTSd
D _ZTSe
D _ZTSf
D _ZTSh
D _ZTSi
D _ZTSj
D _ZTSl
D _ZTSm
D _ZTSs
D _ZTSt
D _ZTSv
D _ZTSw
D _ZTSx
D _ZTSy
D _ZTVN10__cxxabiv116__enum_type_infoE
D _ZTVN10__cxxabiv116__shim_type_infoE
D _ZTVN10__cxxabiv117__array_type_infoE
@ -10,10 +319,29 @@
D _ZTVN10__cxxabiv121__vmi_class_type_infoE
D _ZTVN10__cxxabiv123__fundamental_type_infoE
D _ZTVN10__cxxabiv129__pointer_to_member_type_infoE
D _ZTSSt9type_info
T _ZNKSt8bad_cast4whatEv
T _ZNSt8bad_castC1Ev
T _ZNSt8bad_castC2Ev
D _ZTISt8bad_cast
D _ZTSSt8bad_cast
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

Просмотреть файл

@ -398,8 +398,7 @@ if USE_EMSDK:
'-Xclang', '-isystem' + path_from_root('system', 'include', 'net'),
'-Xclang', '-isystem' + path_from_root('system', 'include', 'SDL'),
] + [
'-U__APPLE__', '-U__linux__',
'-D_LIBCPP_HAS_NO_DELETED_FUNCTIONS' # otherwise libc++ has errors with --std=c++11
'-U__APPLE__', '-U__linux__'
]
COMPILER_OPTS += EMSDK_OPTS
else: