http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50041
Bug #: 50041 Summary: Unreliable crash_signal leads to deadlock Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: other AssignedTo: unassig...@gcc.gnu.org ReportedBy: hjl.to...@gmail.com On Linux/x86, when a segfault happens in _int_malloc, crash_signal leads to deadlock: (gdb) bt #0 0x0000003881af935c in __lll_lock_wait_private () from /lib64/libc.so.6 #1 0x0000003881a7ed31 in _L_lock_10347 () from /lib64/libc.so.6 #2 0x0000003881a7caf7 in malloc () from /lib64/libc.so.6 #3 0x0000003881a33568 in _nl_make_l10nflist () from /lib64/libc.so.6 #4 0x0000003881a311e5 in _nl_find_domain () from /lib64/libc.so.6 #5 0x0000003881a30a66 in __dcigettext () from /lib64/libc.so.6 #6 0x000000000089f131 in crash_signal (signo=11) at ../../src-trunk/gcc/toplev.c:337 #7 <signal handler called> #8 0x0000003881a7a6a9 in _int_malloc () from /lib64/libc.so.6 #9 0x0000003881a7de55 in calloc () from /lib64/libc.so.6 #10 0x0000000000dd6459 in xcalloc (nelem=13, elsize=8) at ../../src-trunk/libiberty/xmalloc.c:162 #11 0x0000000000dd44d6 in htab_create_typed_alloc (size=13, hash_f= 0xcdc220 <invariant_group_base_hash(void const*)>, eq_f=0xcdc200 <invariant_group_base_eq(void const*, void const*)>, del_f=0, alloc_tab_f=<optimized out>, alloc_f=0xdd6430 <xcalloc>, free_f=0x4a6500 <free@plt>) at ../../src-trunk/libiberty/hashtab.c:369 #12 0x0000000000dd4570 in htab_create_alloc (size=<optimized out>, hash_f=<optimized out>, eq_f=<optimized out>, del_f=<optimized out>, alloc_f=<optimized out>, free_f=<optimized out>) at ../../src-trunk/libiberty/hashtab.c:294 #13 0x0000000000cdf9b7 in dse_step0 () at ../../src-trunk/gcc/dse.c:782 ---Type <return> to continue, or q <return> to quit--- #14 rest_of_handle_dse () at ../../src-trunk/gcc/dse.c:3864 #15 0x00000000007ffc98 in execute_one_pass (pass=0x1348320) at ../../src-trunk/gcc/passes.c:2063 #16 0x0000000000800005 in execute_pass_list (pass=0x1348320) at ../../src-trunk/gcc/passes.c:2118 #17 0x0000000000800017 in execute_pass_list (pass=0x1343680) at ../../src-trunk/gcc/passes.c:2119 #18 0x00000000009034ce in tree_rest_of_compilation (fndecl=0x7ffff0ab0100) at ../../src-trunk/gcc/tree-optimize.c:420 #19 0x00000000005f3446 in cgraph_expand_function (node=0x7ffff0ac9900) at ../../src-trunk/gcc/cgraphunit.c:1803 #20 0x00000000005f51cc in cgraph_expand_all_functions () at ../../src-trunk/gcc/cgraphunit.c:1862 #21 cgraph_optimize () at ../../src-trunk/gcc/cgraphunit.c:2132 #22 0x00000000005f585a in cgraph_finalize_compilation_unit () at ../../src-trunk/gcc/cgraphunit.c:1310 #23 0x00000000004e92c8 in c_write_global_declarations () at ../../src-trunk/gcc/c-decl.c:9852 #24 0x00000000008a11d2 in compile_file () at ../../src-trunk/gcc/toplev.c:564 #25 do_compile () at ../../src-trunk/gcc/toplev.c:1886 #26 toplev_main (argc=43, argv=0x7fffffffdce8) at ../../src-trunk/gcc/toplev.c:1962 #27 0x0000003881a2154d in __libc_start_main () from /lib64/libc.so.6 ---Type <return> to continue, or q <return> to quit--- #28 0x00000000004ccee9 in _start () (gdb)