https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90063
Bug ID: 90063
Summary: druntime DSO first assertion fails on Solaris/SPARC
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: d
Assignee: ibuclaw at gdcproject dot org
Reporter: ro at gcc dot gnu.org
Target Milestone: ---
Target: sparc*-sun-solaris2.11
The next issue with Solaris 11/SPARC execution tests is
FAIL: libphobos.druntime_shared/core/internal/hash.d execution test
Thread 2 received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1 (LWP 1)]
0xffffffff5e858a5c in gc_malloc (sz=80, ba=0,
ti=0xffffffff5e988de0 <ClassInfo for core.exception.AssertError>)
at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/gc/proxy.d:117
117 return instance.malloc(sz, ba, ti);
(gdb) where
#0 0xffffffff5e858a5c in gc_malloc (sz=80, ba=0,
ti=0xffffffff5e988de0 <ClassInfo for core.exception.AssertError>)
at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/gc/proxy.d:117
#1 0xffffffff5e7cc74c in core.memory.GC.malloc(ulong, uint, const(TypeInfo)) (
sz=80, ba=0,
ti=0xffffffff5e988de0 <ClassInfo for core.exception.AssertError>)
at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/core/memory.d:380
#2 0xffffffff5e803b60 in _d_newclass (
ci=0xffffffff5e988de0 <ClassInfo for core.exception.AssertError>)
at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/lifetime.d:96
#3 0xffffffff5e7c9df8 in onAssertError (file=..., line=398)
at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/core/exception.d:441
#4 0xffffffff5e7ca444 in _d_assert (file=..., line=398)
at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/core/exception.d:641
#5 0xffffffff5e815684 in _d_dso_registry (data=0xffffffff7fffcfa0)
at
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/sections_elf_shared.d:398
#6 0x00000001000037cc in gdc.dso_ctor () at <no_file>:1
#7 0x0000000100002db8 in global constructors keyed to 4core8internal4hash ()
at
/vol/gcc/src/hg/trunk/solaris/libphobos/testsuite/../libdruntime/core/internal/hash.d:1
#8 0xffffffff7f3253f0 in call_array () from /usr/lib/sparcv9/ld.so.1
#9 0xffffffff7f325590 in call_init () from /usr/lib/sparcv9/ld.so.1
#10 0xffffffff7f335524 in elf_bndr () from /usr/lib/sparcv9/ld.so.1
#11 0xffffffff7f316488 in elf_rtbndr () from /usr/lib/sparcv9/ld.so.1
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
#5 0xffffffff5e815684 in _d_dso_registry (data=0xffffffff7fffcfa0)
at
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/sections_elf_shared.d:398
398 assert(handleForAddr(data._slot) ==
handleForAddr(&rt_get_bss_start));
(gdb) p data
$2 = (rt.sections_elf_shared.CompilerDSOData *) 0xffffffff7fffcfa0
(gdb) p *data
$3 = {_version = 1, _slot = 0x1001043d8 <gdc.dso_slot>,
_minfo_beg = 0x1001043b0 <__start_minfo>, _minfo_end = 0x1001043c8}
I haven't dug further yet why this fails on Solaris/SPARC, but not on
Solaris/x86.
For the moment, I've just disabled the assert.