www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 16856] New: D is borked on FreeBSD current (what will

https://issues.dlang.org/show_bug.cgi?id=16856

          Issue ID: 16856
           Summary: D is borked on FreeBSD current (what will eventually
                    be 12)
           Product: D
           Version: D2
          Hardware: x86_64
                OS: FreeBSD
            Status: NEW
          Severity: critical
          Priority: P1
         Component: druntime
          Assignee: nobody puremagic.com
          Reporter: issues.dlang jmdavisProg.com

I know that this is a problem on TrueOS (which is based on FreeBSD current with
some additional patches applied), so I'm pretty sure that this happens on
FreeBSD current in general, but I still need to verify that. In any case, on
FreeBSD current, many programs result in bus errors when they run. I know that
it happens when an exception is thrown. I don't know why else (but enough
programs fail, that I don't _think_ that it's just because of exceptions). For
instance, running druntime's unit tests for 2.071.2, results in this:

../dmd/src/dmd -conf= -Isrc -Iimport -w -dip25 -m64  -g -debug
-ofgenerated/freebsd/debug/64/unittest/test_runner src/test_runner.d
-Lgenerated/freebsd/debug/64/unittest/libdruntime-ut.so -debuglib= -defaultlib=
generated/freebsd/debug/64/unittest/test_runner object
0x800b2b622
<_D4core7runtime18runModuleUnitTestsUZ19unittestSegvHandlerUNbiPS4core3sys5posix6signal9siginfo_tPvZv+58>
at generated/freebsd/debug/64/unittest/libdruntime-ut.so
0x800ea984d <pthread_sigmask+1293> at /lib/libthr.so.3
0x800ea8e1f <pthread_getspecific+3743> at /lib/libthr.so.3
0x7ffffffff003 <???+0> at ???
0x800bdfe70 <_d_throwdwarf+72> at
generated/freebsd/debug/64/unittest/libdruntime-ut.so
0x800b0bd58 <_D6object18__unittestL2628_28FZ5Inner10__postblitMFNfZv+184> at
generated/freebsd/debug/64/unittest/libdruntime-ut.so
0x800b0c091 <_D6object18__unittestL2628_28FZ5Outer15__fieldPostblitMFNeZv+33>
at generated/freebsd/debug/64/unittest/libdruntime-ut.so
0x800b0c15d <_D6object18__unittestL2628_28FZ5Outer14__aggrPostblitMFNeZv+21> at
generated/freebsd/debug/64/unittest/libdruntime-ut.so
0x800b116b5
<_D6object59__T16_postblitRecurseTS6object18__unittestL2628_28FZ5OuterZ16_postblitRecurseFNfKS6object18__unittestL2628_28FZ5OuterZv+21>
at generated/freebsd/debug/64/unittest/libdruntime-ut.so
0x800b0b7fa <_D6object18__unittestL2628_28FZv+66> at
generated/freebsd/debug/64/unittest/libdruntime-ut.so
0x800b1410b <_D6object9__modtestFZv+139> at
generated/freebsd/debug/64/unittest/libdruntime-ut.so
0x401758 <???+0> at
/usr/home/jmdavis/Programming/github/druntime/generated/freebsd/debug/64/unittest/test_runner
0x800b2b574 <runModuleUnitTests+172> at
generated/freebsd/debug/64/unittest/libdruntime-ut.so
0x800bdf81e <_D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZv+30> at
generated/freebsd/debug/64/unittest/libdruntime-ut.so
0x800bdf7ac <_D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ7tryExecMFMDFZvZv+52> at
generated/freebsd/debug/64/unittest/libdruntime-ut.so
0x800bdf718 <_d_run_main+808> at
generated/freebsd/debug/64/unittest/libdruntime-ut.so
0x401a6c
<_D4core4time48__T7convertVAyaa6_686e73656373VAyaa5_6d73656373Z7convertFNaNbNiNflZl+208>
at
/usr/home/jmdavis/Programming/github/druntime/generated/freebsd/debug/64/unittest/test_runner
0x40138f <???+0> at
/usr/home/jmdavis/Programming/github/druntime/generated/freebsd/debug/64/unittest/test_runner
gmake[1]: *** [posix.mak:243: generated/freebsd/debug/64/unittest/object] Bus
error
gmake[1]: *** Deleting file 'generated/freebsd/debug/64/unittest/object'
gmake[1]: Leaving directory '/usr/home/jmdavis/Programming/github/druntime'
gmake: *** [posix.mak:200: unittest-debug] Error 2

and running the dmd test suite results in

Creating output directory: test_results
Building d_do_test tool
OS: freebsd
0x478926 <???+0> at /var/tmp//dmd_runqjmU8P
0x80092584d <pthread_sigmask+1293> at /lib/libthr.so.3
0x800924e1f <pthread_getspecific+3743> at /lib/libthr.so.3
0x7ffffffff003 <???+0> at ???
0x459900 <???+0> at /var/tmp//dmd_runqjmU8P
0x40b32e <???+0> at /var/tmp//dmd_runqjmU8P
0x4523f9 <???+0> at /var/tmp//dmd_runqjmU8P
0x408606 <???+0> at /var/tmp//dmd_runqjmU8P
0x4526a1 <???+0> at /var/tmp//dmd_runqjmU8P
0x408570 <???+0> at /var/tmp//dmd_runqjmU8P
0x454c7a <???+0> at /var/tmp//dmd_runqjmU8P
0x47896d <???+0> at /var/tmp//dmd_runqjmU8P
0x457388 <???+0> at /var/tmp//dmd_runqjmU8P
0x45dfc3 <???+0> at /var/tmp//dmd_runqjmU8P
0x45e052 <???+0> at /var/tmp//dmd_runqjmU8P
0x45df54 <???+0> at /var/tmp//dmd_runqjmU8P
0x457364 <???+0> at /var/tmp//dmd_runqjmU8P
0x478867 <???+0> at /var/tmp//dmd_runqjmU8P
0x45973b <???+0> at /var/tmp//dmd_runqjmU8P
0x4596dd <???+0> at /var/tmp//dmd_runqjmU8P
0x45964e <???+0> at /var/tmp//dmd_runqjmU8P
0x45503a <???+0> at /var/tmp//dmd_runqjmU8P
0x4031cf <???+0> at /var/tmp//dmd_runqjmU8P
--- killed by signal 10
gmake: *** [Makefile:194: test_results/d_do_test] Error 1

Some simple programs do run successfully (like hello world), but many do not. I
have verified that FreeBSD 11 passes the druntime and Phobos unit tests as well
as the dmd test suite, and every version of dmd that I've tried has had this
problem. So, I think that it's clear that whatever broke things was a change in
FreeBSD current after FreeBSD 11 was forked off of it. What is not clear is
whether this is a bug in FreeBSD or a bug in our stuff. Based on the stack
traces, I'm _guessing_ that we're doing something wrong with pthreads, but I
don't know. Either way, as it stands, D programs don't work currently on
FreeBSD current.

When I have time, I'm going to try and at least narrow down the commit in
FreeBSD which broke things, which will hopefully give better insight into the
problem. I have no idea whether this problem is specific to 64-bit or not,
since that's all I'm running. I would guess that it's not, but I'm also
guessing that this is a druntime bug. More research is required to know for
sure.

--
Nov 29 2016