Skip to content

Commit 2c80079

Browse files
authored
Restore demangling optimization (#9914)
Fixes #9905 where it was reported that we lost our localmod that prevents always including demangling support when exceptions are enabled. This restores that, and adds size testing for exceptions and exceptions + demangling support.
1 parent 98db919 commit 2c80079

8 files changed

+304
-2
lines changed

system/lib/libcxxabi/src/cxa_default_handlers.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,18 @@ static void demangling_terminate_handler()
4545
exception_header + 1;
4646
const __shim_type_info* thrown_type =
4747
static_cast<const __shim_type_info*>(exception_header->exceptionType);
48+
#ifndef __EMSCRIPTEN__
4849
// Try to get demangled name of thrown_type
4950
int status;
5051
char buf[1024];
5152
size_t len = sizeof(buf);
5253
const char* name = __cxa_demangle(thrown_type->name(), buf, &len, &status);
5354
if (status != 0)
5455
name = thrown_type->name();
56+
#else // __EMSCRIPTEN__ - we can demangle stack traces ourselves, best not to
57+
// pull in all of libcxxabi-demangle for just this file
58+
const char* name = thrown_type->name();
59+
#endif
5560
// If the uncaught exception can be caught with std::exception&
5661
const __shim_type_info* catch_type =
5762
static_cast<const __shim_type_info*>(&typeid(std::exception));
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
_ZSt18uncaught_exceptionv
2+
__cxa_can_catch
3+
__cxa_is_pointer_type
4+
__data_end
5+
__errno_location
6+
__growWasmMemory
7+
__wasm_call_ctors
8+
dynCall_diii
9+
dynCall_fiii
10+
dynCall_i
11+
dynCall_ii
12+
dynCall_iidiiii
13+
dynCall_iii
14+
dynCall_iiii
15+
dynCall_iiiii
16+
dynCall_iiiiid
17+
dynCall_iiiiii
18+
dynCall_iiiiiii
19+
dynCall_iiiiiiii
20+
dynCall_iiiiiiiii
21+
dynCall_iiiiiiiiiii
22+
dynCall_iiiiiiiiiiii
23+
dynCall_iiiiiiiiiiiii
24+
dynCall_iiiiiijj
25+
dynCall_iiiiij
26+
dynCall_iiiiijj
27+
dynCall_jiiii
28+
dynCall_jiji
29+
dynCall_v
30+
dynCall_vi
31+
dynCall_vii
32+
dynCall_viii
33+
dynCall_viiii
34+
dynCall_viiiii
35+
dynCall_viiiiii
36+
dynCall_viiiiiii
37+
dynCall_viiiiiiiiii
38+
dynCall_viiiiiiiiiiiiiii
39+
dynCall_viijii
40+
free
41+
main
42+
malloc
43+
setThrew
44+
stackAlloc
45+
stackRestore
46+
stackSave
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
__cxa_allocate_exception
2+
__cxa_begin_catch
3+
__cxa_end_catch
4+
__cxa_find_matching_catch_2
5+
__cxa_find_matching_catch_3
6+
__cxa_free_exception
7+
__cxa_rethrow
8+
__cxa_throw
9+
__cxa_uncaught_exceptions
10+
__lock
11+
__map_file
12+
__resumeException
13+
__syscall91
14+
__unlock
15+
abort
16+
emscripten_memcpy_big
17+
emscripten_resize_heap
18+
environ_get
19+
environ_sizes_get
20+
fd_close
21+
fd_read
22+
fd_seek
23+
fd_write
24+
getTempRet0
25+
invoke_diii
26+
invoke_fiii
27+
invoke_i
28+
invoke_ii
29+
invoke_iii
30+
invoke_iiii
31+
invoke_iiiii
32+
invoke_iiiiiii
33+
invoke_iiiiiiii
34+
invoke_iiiiiiiiiiii
35+
invoke_jiiii
36+
invoke_v
37+
invoke_vi
38+
invoke_vii
39+
invoke_viii
40+
invoke_viiii
41+
invoke_viiiiiii
42+
invoke_viiiiiiiiii
43+
memory
44+
setTempRet0
45+
strftime_l
46+
table
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
__cxa_allocate_exception
2+
__cxa_atexit
3+
__cxa_begin_catch
4+
__cxa_end_catch
5+
__cxa_find_matching_catch_2
6+
__cxa_find_matching_catch_3
7+
__cxa_free_exception
8+
__cxa_rethrow
9+
__cxa_throw
10+
__cxa_uncaught_exceptions
11+
__lock
12+
__map_file
13+
__resumeException
14+
__syscall91
15+
__unlock
16+
abort
17+
emscripten_get_sbrk_ptr
18+
emscripten_memcpy_big
19+
emscripten_resize_heap
20+
environ_get
21+
environ_sizes_get
22+
fd_close
23+
fd_read
24+
fd_seek
25+
fd_write
26+
getTempRet0
27+
invoke_diii
28+
invoke_fiii
29+
invoke_i
30+
invoke_ii
31+
invoke_iii
32+
invoke_iiii
33+
invoke_iiiii
34+
invoke_iiiiii
35+
invoke_iiiiiii
36+
invoke_iiiiiiii
37+
invoke_iiiiiiiiiii
38+
invoke_iiiiiiiiiiii
39+
invoke_iiiiiiiiiiiii
40+
invoke_jiiii
41+
invoke_v
42+
invoke_vi
43+
invoke_vii
44+
invoke_viii
45+
invoke_viiii
46+
invoke_viiiiiii
47+
invoke_viiiiiiiiii
48+
invoke_viiiiiiiiiiiiiii
49+
memory
50+
setTempRet0
51+
strftime_l
52+
table
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
_ZSt18uncaught_exceptionv
2+
__cxa_can_catch
3+
__cxa_demangle
4+
__cxa_is_pointer_type
5+
__data_end
6+
__errno_location
7+
__growWasmMemory
8+
__wasm_call_ctors
9+
dynCall_diii
10+
dynCall_fiii
11+
dynCall_i
12+
dynCall_ii
13+
dynCall_iidiiii
14+
dynCall_iii
15+
dynCall_iiii
16+
dynCall_iiiii
17+
dynCall_iiiiid
18+
dynCall_iiiiii
19+
dynCall_iiiiiii
20+
dynCall_iiiiiiii
21+
dynCall_iiiiiiiii
22+
dynCall_iiiiiiiiiii
23+
dynCall_iiiiiiiiiiii
24+
dynCall_iiiiiiiiiiiii
25+
dynCall_iiiiiijj
26+
dynCall_iiiiij
27+
dynCall_iiiiijj
28+
dynCall_jiiii
29+
dynCall_jiji
30+
dynCall_v
31+
dynCall_vi
32+
dynCall_vii
33+
dynCall_viii
34+
dynCall_viiii
35+
dynCall_viiiii
36+
dynCall_viiiiii
37+
dynCall_viiiiiii
38+
dynCall_viiiiiiiiii
39+
dynCall_viiiiiiiiiiiiiii
40+
dynCall_viijii
41+
free
42+
main
43+
malloc
44+
setThrew
45+
stackAlloc
46+
stackRestore
47+
stackSave
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
__cxa_allocate_exception
2+
__cxa_begin_catch
3+
__cxa_end_catch
4+
__cxa_find_matching_catch_2
5+
__cxa_find_matching_catch_3
6+
__cxa_free_exception
7+
__cxa_rethrow
8+
__cxa_throw
9+
__cxa_uncaught_exceptions
10+
__lock
11+
__map_file
12+
__resumeException
13+
__syscall91
14+
__unlock
15+
abort
16+
emscripten_memcpy_big
17+
emscripten_resize_heap
18+
environ_get
19+
environ_sizes_get
20+
fd_close
21+
fd_read
22+
fd_seek
23+
fd_write
24+
getTempRet0
25+
invoke_diii
26+
invoke_fiii
27+
invoke_i
28+
invoke_ii
29+
invoke_iii
30+
invoke_iiii
31+
invoke_iiiii
32+
invoke_iiiiiii
33+
invoke_iiiiiiii
34+
invoke_iiiiiiiiiiii
35+
invoke_jiiii
36+
invoke_v
37+
invoke_vi
38+
invoke_vii
39+
invoke_viii
40+
invoke_viiii
41+
invoke_viiiiiii
42+
invoke_viiiiiiiiii
43+
memory
44+
setTempRet0
45+
strftime_l
46+
table
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
__cxa_allocate_exception
2+
__cxa_atexit
3+
__cxa_begin_catch
4+
__cxa_end_catch
5+
__cxa_find_matching_catch_2
6+
__cxa_find_matching_catch_3
7+
__cxa_free_exception
8+
__cxa_rethrow
9+
__cxa_throw
10+
__cxa_uncaught_exceptions
11+
__lock
12+
__map_file
13+
__resumeException
14+
__syscall91
15+
__unlock
16+
abort
17+
emscripten_get_sbrk_ptr
18+
emscripten_memcpy_big
19+
emscripten_resize_heap
20+
environ_get
21+
environ_sizes_get
22+
fd_close
23+
fd_read
24+
fd_seek
25+
fd_write
26+
getTempRet0
27+
invoke_diii
28+
invoke_fiii
29+
invoke_i
30+
invoke_ii
31+
invoke_iii
32+
invoke_iiii
33+
invoke_iiiii
34+
invoke_iiiiii
35+
invoke_iiiiiii
36+
invoke_iiiiiiii
37+
invoke_iiiiiiiiiii
38+
invoke_iiiiiiiiiiii
39+
invoke_iiiiiiiiiiiii
40+
invoke_jiiii
41+
invoke_v
42+
invoke_vi
43+
invoke_vii
44+
invoke_viii
45+
invoke_viiii
46+
invoke_viiiiiii
47+
invoke_viiiiiiiiii
48+
invoke_viiiiiiiiiiiiiii
49+
memory
50+
setTempRet0
51+
strftime_l
52+
table

tests/test_other.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8169,10 +8169,18 @@ def test_metadce_minimal(self, *args):
81698169
def test_metadce_minimal_fastcomp(self, *args):
81708170
self.run_metadce_test('minimal.c', *args)
81718171

8172+
@parameterized({
8173+
'noexcept': (['-O2'], 19, [], ['waka'], 218988, 17, 33, None), # noqa
8174+
# exceptions increases code size significantly
8175+
'except': (['-O2', '-fexceptions'], 52, [], ['waka'], 279827, 46, 46, None), # noqa
8176+
# exceptions does not pull in demangling by default, which increases code size
8177+
'mangle': (['-O2', '-fexceptions',
8178+
'-s', 'DEMANGLE_SUPPORT'], 52, [], ['waka'], 408028, 46, 47, None), # noqa
8179+
})
81728180
@no_fastcomp()
8173-
def test_metadce_cxx(self):
8181+
def test_metadce_cxx(self, *args):
81748182
# test on libc++: see effects of emulated function pointers
8175-
self.run_metadce_test('hello_libcxx.cpp', ['-O2'], 19, [], ['waka'], 226582, 17, 33, None) # noqa
8183+
self.run_metadce_test('hello_libcxx.cpp', *args)
81768184

81778185
@parameterized({
81788186
'normal': (['-O2'], 40, ['abort'], ['waka'], 186423, 23, 37, 541), # noqa

0 commit comments

Comments
 (0)