https://issues.dlang.org/show_bug.cgi?id=20578
Issue ID: 20578 Summary: Parallel GC causes segfault in dl Product: D Version: D2 Hardware: x86_64 OS: Linux Status: NEW Severity: regression Priority: P1 Component: druntime Assignee: nob...@puremagic.com Reporter: dlang-bugzi...@thecybershadow.net CC: r.sagita...@gmx.de I'm seeing the following problem on an Ubuntu 16.04 server: =============================================================================== GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1 Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from /tmp/gc-test/test_program...done. Starting program: /tmp/gc-test/test_program --help [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". [New Thread 0x7ffff7ff7700 (LWP 16618)] [New Thread 0x7ffff7ff3700 (LWP 16619)] [New Thread 0x7ffff7fef700 (LWP 16620)] [New Thread 0x7ffff7feb700 (LWP 16621)] [New Thread 0x7ffff7fe7700 (LWP 16622)] [New Thread 0x7ffff7fe3700 (LWP 16623)] [New Thread 0x7ffff7fd8700 (LWP 16624)] Thread 2 "test_program" received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7ffff7ff7700 (LWP 16618)] 0x00007ffff7de8981 in _dl_name_match_p (name=0x51b9b2 "libc.so.6", map=map@entry=0x7ffff7ffe168) at dl-misc.c:288 288 dl-misc.c: No such file or directory. (gdb) where #0 0x00007ffff7de8981 in _dl_name_match_p (name=0x51b9b2 "libc.so.6", map=map@entry=0x7ffff7ffe168) at dl-misc.c:288 #1 0x00007ffff7de0fe1 in do_lookup_x (undef_name=undef_name@entry=0x51bb12 "sched_yield", new_hash=new_hash@entry=3838766306, old_hash=old_hash@entry=0x7ffff7ff5160, ref=0x44bcf8, result=result@entry=0x7ffff7ff5170, scope=<optimised out>, i=<optimised out>, version=0x7ffff7fdd700, flags=5, skip=0x0, type_class=1, undef_map=0x7ffff7ffe168) at dl-lookup.c:554 #2 0x00007ffff7de1b1f in _dl_lookup_symbol_x (undef_name=0x51bb12 "sched_yield", undef_map=0x7ffff7ffe168, ref=ref@entry=0x7ffff7ff5228, symbol_scope=0x7ffff7ffe4c0, version=0x7ffff7fdd700, type_class=type_class@entry=1, flags=5, skip_map=0x0) at dl-lookup.c:829 #3 0x00007ffff7de6ac6 in _dl_fixup (l=<optimised out>, reloc_arg=<optimised out>) at ../elf/dl-runtime.c:111 #4 0x00007ffff7dee923 in _dl_runtime_resolve_avx () at ../sysdeps/x86_64/dl-trampoline.h:112 #5 0x00007ffff78e6c20 in ?? () from /lib/x86_64-linux-gnu/libpthread.so.0 #6 0x00007ffff7ff5700 in ?? () #7 0x00007ffff7dee923 in _dl_runtime_resolve_avx () at ../sysdeps/x86_64/dl-trampoline.h:112 Backtrace stopped: previous frame inner to this frame (corrupt stack?) (failed reverse-i-search)`thread': Quit (gdb) thread apply all backtrace Thread 8 (Thread 0x7ffff7fd8700 (LWP 16624)): #0 pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225 #1 0x0000000000e0cbf2 in _D4core4sync5event5Event4waitMFNbNiSQBi4time8DurationZb () #2 0x0000000000e0b395 in _D2gc4impl12conservativeQw3Gcx__T21pullFromScanStackImplVbi0ZQBcMFNbZv () #3 0x0000000000e05ce6 in _D2gc4impl12conservativeQw3Gcx14scanBackgroundMFNbZv () #4 0x0000000000e0cfff in _D4core6thread8osthread20createLowLevelThreadFNbNiDFNbZvkDFNbZvZ20thread_lowlevelEntryUNbPvZQd () #5 0x00007ffff78ec6ba in start_thread (arg=0x7ffff7fd8700) at pthread_create.c:333 #6 0x00007ffff6cf741d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109 Thread 7 (Thread 0x7ffff7fe3700 (LWP 16623)): #0 pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225 #1 0x0000000000e0cbf2 in _D4core4sync5event5Event4waitMFNbNiSQBi4time8DurationZb () #2 0x0000000000e0b395 in _D2gc4impl12conservativeQw3Gcx__T21pullFromScanStackImplVbi0ZQBcMFNbZv () #3 0x0000000000e05ce6 in _D2gc4impl12conservativeQw3Gcx14scanBackgroundMFNbZv () #4 0x0000000000e0cfff in _D4core6thread8osthread20createLowLevelThreadFNbNiDFNbZvkDFNbZvZ20thread_lowlevelEntryUNbPvZQd () #5 0x00007ffff78ec6ba in start_thread (arg=0x7ffff7fe3700) at pthread_create.c:333 #6 0x00007ffff6cf741d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109 Thread 6 (Thread 0x7ffff7fe7700 (LWP 16622)): #0 pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225 #1 0x0000000000e0cbf2 in _D4core4sync5event5Event4waitMFNbNiSQBi4time8DurationZb () #2 0x0000000000e0b395 in _D2gc4impl12conservativeQw3Gcx__T21pullFromScanStackImplVbi0ZQBcMFNbZv () #3 0x0000000000e05ce6 in _D2gc4impl12conservativeQw3Gcx14scanBackgroundMFNbZv () #4 0x0000000000e0cfff in _D4core6thread8osthread20createLowLevelThreadFNbNiDFNbZvkDFNbZvZ20thread_lowlevelEntryUNbPvZQd () #5 0x00007ffff78ec6ba in start_thread (arg=0x7ffff7fe7700) at pthread_create.c:333 #6 0x00007ffff6cf741d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109 Thread 5 (Thread 0x7ffff7feb700 (LWP 16621)): #0 pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225 #1 0x0000000000e0cbf2 in _D4core4sync5event5Event4waitMFNbNiSQBi4time8DurationZb () #2 0x0000000000e0b395 in _D2gc4impl12conservativeQw3Gcx__T21pullFromScanStackImplVbi0ZQBcMFNbZv () #3 0x0000000000e05ce6 in _D2gc4impl12conservativeQw3Gcx14scanBackgroundMFNbZv () #4 0x0000000000e0cfff in _D4core6thread8osthread20createLowLevelThreadFNbNiDFNbZvkDFNbZvZ20thread_lowlevelEntryUNbPvZQd () #5 0x00007ffff78ec6ba in start_thread (arg=0x7ffff7feb700) at pthread_create.c:333 #6 0x00007ffff6cf741d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109 Thread 4 (Thread 0x7ffff7fef700 (LWP 16620)): #0 pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225 #1 0x0000000000e0cbf2 in _D4core4sync5event5Event4waitMFNbNiSQBi4time8DurationZb () #2 0x0000000000e0b395 in _D2gc4impl12conservativeQw3Gcx__T21pullFromScanStackImplVbi0ZQBcMFNbZv () #3 0x0000000000e05ce6 in _D2gc4impl12conservativeQw3Gcx14scanBackgroundMFNbZv () #4 0x0000000000e0cfff in _D4core6thread8osthread20createLowLevelThreadFNbNiDFNbZvkDFNbZvZ20thread_lowlevelEntryUNbPvZQd () #5 0x00007ffff78ec6ba in start_thread (arg=0x7ffff7fef700) at pthread_create.c:333 #6 0x00007ffff6cf741d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109 Thread 3 (Thread 0x7ffff7ff3700 (LWP 16619)): #0 pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225 #1 0x0000000000e0cbf2 in _D4core4sync5event5Event4waitMFNbNiSQBi4time8DurationZb () #2 0x0000000000e0b395 in _D2gc4impl12conservativeQw3Gcx__T21pullFromScanStackImplVbi0ZQBcMFNbZv () #3 0x0000000000e05ce6 in _D2gc4impl12conservativeQw3Gcx14scanBackgroundMFNbZv () #4 0x0000000000e0cfff in _D4core6thread8osthread20createLowLevelThreadFNbNiDFNbZvkDFNbZvZ20thread_lowlevelEntryUNbPvZQd () #5 0x00007ffff78ec6ba in start_thread (arg=0x7ffff7ff3700) at pthread_create.c:333 #6 0x00007ffff6cf741d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109 Thread 2 (Thread 0x7ffff7ff7700 (LWP 16618)): #0 0x00007ffff7de8981 in _dl_name_match_p (name=0x51b9b2 "libc.so.6", map=map@entry=0x7ffff7ffe168) at dl-misc.c:288 #1 0x00007ffff7de0fe1 in do_lookup_x (undef_name=undef_name@entry=0x51bb12 "sched_yield", new_hash=new_hash@entry=3838766306, old_hash=old_hash@entry=0x7ffff7ff5160, ref=0x44bcf8, result=result@entry=0x7ffff7ff5170, scope=<optimised out>, i=<optimised out>, version=0x7ffff7fdd700, flags=5, skip=0x0, type_class=1, undef_map=0x7ffff7ffe168) at dl-lookup.c:554 #2 0x00007ffff7de1b1f in _dl_lookup_symbol_x (undef_name=0x51bb12 "sched_yield", undef_map=0x7ffff7ffe168, ref=ref@entry=0x7ffff7ff5228, symbol_scope=0x7ffff7ffe4c0, version=0x7ffff7fdd700, type_class=type_class@entry=1, flags=5, skip_map=0x0) at dl-lookup.c:829 #3 0x00007ffff7de6ac6 in _dl_fixup (l=<optimised out>, reloc_arg=<optimised out>) at ../elf/dl-runtime.c:111 #4 0x00007ffff7dee923 in _dl_runtime_resolve_avx () at ../sysdeps/x86_64/dl-trampoline.h:112 #5 0x00007ffff78e6c20 in ?? () from /lib/x86_64-linux-gnu/libpthread.so.0 #6 0x00007ffff7ff5700 in ?? () #7 0x00007ffff7dee923 in _dl_runtime_resolve_avx () at ../sysdeps/x86_64/dl-trampoline.h:112 Backtrace stopped: previous frame inner to this frame (corrupt stack?) Thread 1 (Thread 0x7ffff7fdae80 (LWP 16614)): #0 pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225 #1 0x0000000000e0cbf2 in _D4core4sync5event5Event4waitMFNbNiSQBi4time8DurationZb () #2 0x0000000000e0b395 in _D2gc4impl12conservativeQw3Gcx__T21pullFromScanStackImplVbi0ZQBcMFNbZv () #3 0x0000000000e0580d in _D2gc4impl12conservativeQw3Gcx12markParallelMFNbbZv () #4 0x0000000000e0500a in _D2gc4impl12conservativeQw3Gcx11fullcollectMFNbbZm () #5 0x0000000000e0334c in _D2gc4impl12conservativeQw3Gcx10smallAllocMFNbmKmkxC8TypeInfoZPv () #6 0x0000000000e08d29 in _D2gc4impl12conservativeQw14ConservativeGC__T9runLockedS_DQCeQCeQCcQCnQBs12mallocNoSyncMFNbmkKmxC8TypeInfoZPvS_DQEgQEgQEeQEp10mallocTimelS_DQFiQFiQFgQFr10numMallocslTmTkTmTxQCzZQFcMFNbKmKkKmKxQDsZQDl () #7 0x0000000000e0097e in _D2gc4impl12conservativeQw14ConservativeGC6mallocMFNbmkxC8TypeInfoZPv () #8 0x0000000000d6a103 in gc_malloc () #9 0x0000000000dc7ead in _D2rt3aaA11fakeEntryTIFKSQxQw4ImplxC8TypeInfoxQlZC15TypeInfo_Struct () #10 0x0000000000dc75d0 in _D2rt3aaA4Impl6__ctorMFNcMxC25TypeInfo_AssociativeArraymZSQCeQCeQCd () #11 0x0000000000d6a806 in _aaGetX () #12 0x0000000000d6a77d in _aaGetY () #13 0x0000000000caf605 in _D3std6getopt__T10getoptImplTAyaTPbZQuFNfKAQoKSQBtQBs13configurationKSQCqQCp12GetoptResultKCQDmQDl15GetOptExceptionHQDjAvQgQDqQDpZv (_param_7=0x7fffffffd9d0, _param_6=..., visitedShortOpts=..., visitedLongOpts=..., excep=@0x7fffffffd908: 0x0, rslt=..., cfg=..., args=...) at /home/vladimir/dlang/dmd-2.090.0/linux/bin64/../../src/phobos/std/getopt.d:727 #14 0x0000000000cb9e90 in _D3std6getopt__T10getoptImplTAyaTPbTQhTQgZQBaFNfKAQvKSQCaQBz13configurationKSQCxQCw12GetoptResultKCQDtQDs15GetOptExceptionHQDqAvQgQDxQDwQEdQEcZv (_param_9=0x7fffffffd9d0, _param_8=..., _param_7=0x7fffffffd990, _param_6=..., visitedShortOpts=..., visitedLongOpts=..., excep=@0x7fffffffd908: 0x0, rslt=..., cfg=..., args=...) at /home/vladimir/dlang/dmd-2.090.0/linux/bin64/../../src/phobos/std/getopt.d:762 #15 0x0000000000cb9899 in _D3std6getopt__T10getoptImplTEQBcQBb6configTAyaTPbTQhTQgZQBpFNfKAQvKSQCpQCo13configurationKSQDmQDl12GetoptResultKCQEiQEh15GetOptExceptionHQDqAvQgQEmQEaQDzQEgQEfZv (_param_10=0x7fffffffd9d0, _param_9=..., _param_8=0x7fffffffd990, _param_7=..., _param_6=<incomplete type>, visitedShortOpts=..., visitedLongOpts=..., excep=@0x7fffffffd908: 0x0, rslt=..., cfg=..., args=...) at /home/vladimir/dlang/dmd-2.090.0/linux/bin64/../../src/phobos/std/getopt.d:699 #16 0x0000000000cb97ed in _D3std6getopt__TQkTEQsQq6configTAyaTPbTQhTQgZQBnFNfKAQvQBkQBaQzQBfQBeZSQCrQCq12GetoptResult (rslt=0x7fffffffd9e0, _param_5=0x7fffffffd9d0, _param_4=..., _param_3=0x7fffffffd990, _param_2=..., _param_1=<incomplete type>, args=...) at /home/vladimir/dlang/dmd-2.090.0/linux/bin64/../../src/phobos/std/getopt.d:435 #17 0x0000000000cbde08 in _D2ae5utils6funopt__TQkS_DQyQxQt18__unittest_L636_C1FZ7Actions2f1FbZvVSQCrQCrQCo12FunOptConfigS1nS_DQDuQDuQDr__T14funoptDispatchTSQEyQEyQEvQEdFZQDmVQDaS1nS_DQFzQFzQFwQFeFZ8usageFunFNbNiNfAyaZvZQDdFAQlZ3funMFQuQmZ__T12descUsageFunVQBra17_506572666f726d20616374696f6e206631ZQCfFNbNfQDpZvZQKpFQDpZv (args=...) at lib/ae/utils/funopt.d:245 #18 0x0000000000cbd946 in _D2ae5utils6funopt__T14funoptDispatchTSQBlQBlQBi18__unittest_L636_C1FZ7ActionsVSQDaQDaQCx12FunOptConfigS1nS_DQEdQEdQEaQCsFZ8usageFunFNbNiNfAyaZvZQEuFAQlZ3funMFQuQmZv (__capture=0x7ffff7fd2660, actionArguments=..., action=...) at lib/ae/utils/funopt.d:594 #19 0x0000000000cc0adb in _D2ae5utils6funopt__TQkS_DQyQxQt__T14funoptDispatchTSQBzQBzQBw18__unittest_L636_C1FZ7ActionsVSQDoQDoQDl12FunOptConfigS1nS_DQErQErQEoQCsFZ8usageFunFNbNiNfAyaZvZQEuFAQlZ3funMFQuQmZvVQDjS1A1i6S_DQHiQHiQHf__TQGnTQGaVQEpS1nS_DQIlQIlQIiQGmFZQDuQDoZQHzFQDfZ10myUsageFunFQEgZvZQJyMFQEhZv (__capture=0x7ffff7fd2660, args=...) at lib/ae/utils/funopt.d:302 #20 0x0000000000cbd7c6 in _D2ae5utils6funopt__T14funoptDispatchTSQBlQBlQBi18__unittest_L636_C1FZ7ActionsVSQDaQDaQCx12FunOptConfigS1nS_DQEdQEdQEaQCsFZ8usageFunFNbNiNfAyaZvZQEuFAQlZv (args=...) at lib/ae/utils/funopt.d:608 #21 0x0000000000cab541 in ae.utils.funopt.__unittest_L636_C1() () at lib/ae/utils/funopt.d:668 #22 0x0000000000ce928f in ae.utils.funopt.__modtest() () #23 0x0000000000dc362d in core.runtime.runModuleUnitTests().__foreachbody2(object.ModuleInfo*) () #24 0x0000000000d5d3a8 in _D6object10ModuleInfo7opApplyFMDFPSQBhQBdZiZ9__lambda2MFyPSQCfQCbZi () #25 0x0000000000d71d1c in _D2rt5minfo17moduleinfos_applyFMDFyPS6object10ModuleInfoZiZ14__foreachbody2MFKSQCz19sections_elf_shared3DSOZi () #26 0x0000000000d72571 in _D2rt19sections_elf_shared3DSO7opApplyFMDFKSQBqQBqQyZiZi () #27 0x0000000000d71caa in rt.minfo.moduleinfos_apply(scope int(immutable(object.ModuleInfo*)) delegate) () #28 0x0000000000d5d37a in _D6object10ModuleInfo7opApplyFMDFPSQBhQBdZiZi () #29 0x0000000000dc346a in runModuleUnitTests () #30 0x0000000000d6c109 in _D2rt6dmain212_d_run_main2UAAamPUQgZiZ6runAllMFZv () #31 0x0000000000d6c095 in _D2rt6dmain212_d_run_main2UAAamPUQgZiZ7tryExecMFMDFZvZv () #32 0x0000000000d6bffe in _d_run_main2 () #33 0x0000000000d6bdba in _d_run_main () #34 0x0000000000d01086 in main (argc=2, argv=0x7fffffffe4b8) at /home/vladimir/dlang/dmd-2.090.0/linux/bin64/../../src/druntime/import/core/internal/entrypoint.d:34 #35 0x00007ffff6c10830 in __libc_start_main (main=0xd01064 <main>, argc=2, argv=0x7fffffffe4b8, init=<optimised out>, fini=<optimised out>, rtld_fini=<optimised out>, stack_end=0x7fffffffe4a8) at ../csu/libc-start.c:291 #36 0x00000000009f9a49 in _start () =============================================================================== The program crashes in this manner about 50% of the time on start-up. The program was compiled with DMD 2.090.0, with -g -debug -cov. The problem does not occur if parallel GC is switched off using --DRT-gcopt=parallel:0. I'm not sure why dl and the GC are running at the same time. It looks like it is trying to link sched_yield lazily? Perhaps there is a thread safety bug in (this version of) dl? --