On Friday, 31 July 2015 at 15:58:24 UTC, Gerald Jansen wrote:
I'm not sure if this is the right place to report issues. I
downloaded dmd.2.068.0-b2.linux.zip, unzipped it and added the
bin64 directory to my path. The standard hello.d compiles fine
but segfaults immediately. Details follow. Also rdmd segfaults
with the same message. (The same process with the 2.067.1 zip
works fine on the same box.)
Details:
gjansen@gamma:~$ uname -a
Linux gamma 2.6.32-279.14.1.el6.x86_64 #1 SMP Mon Oct 15
13:44:51 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux
gjansen@gamma:~$ dmd --version
DMD64 D Compiler v2.068.0-b2
Copyright (c) 1999-2015 by Digital Mars written by Walter Bright
gjansen@gamma:~$ dmd hello.d
gjansen@gamma:~$ ./hello
Segmentation fault (core dumped)
gjansen@gamma:~$ gdb hello
<snip>
(gdb) run
Starting program: /ricerca/gjansen/hello
[Thread debugging using libthread_db enabled]
Program received signal SIGSEGV, Segmentation fault.
0x00000000004418e1 in _d_initMonoTime ()
Missing separate debuginfos, use: debuginfo-install
glibc-2.12-1.80.el6_3.6.x86_64
Hi Gerald,
MonoTime is the replacement for TickDuration and it's initialized
from the runtime initialization function (rt_init). This is
because the GC and others may need time functionality.
Unfortunately, it looks like MonoTime does not currently support
your kernel version. It needs at least Linux 2.6.39. The reason
being is that it has the CLOCK_BOOTTIME clock which was
implemented in Linux 2.6.39. Without this clock, the minimum
version would be Linux 2.6.32.
If I had to hazard a guess, I'd say the offending segfault is
coming from calling clock_getres(clockArg, &ts) (where clockArg
is essentially CLOCK_BOOTTIME) in _d_initMonoTime(). It seems to
call this for all supported Clocks for your platform.
Hopefully some code can be added to only allow CLOCK_BOOTTIME on
kernels that support it. 2.6.32 is still supported as a longterm
kernel release.
Regards,
Kelet