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

Reply via email to