[Issue 16856] D does not work on FreeBSD current (what will eventually be 12) due to libunwind

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Sun Dec 4 15:16:08 PST 2016


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

Jonathan M Davis <issues.dlang at jmdavisProg.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|D is borked on FreeBSD      |D does not work on FreeBSD
                   |current (what will          |current (what will
                   |eventually be 12)           |eventually be 12) due to
                   |                            |libunwind

--- Comment #1 from Jonathan M Davis <issues.dlang at jmdavisProg.com> ---
Okay. I've confirmed that this is a problem with FreeBSD current in general and
not just TrueOS, and I've narrowed down commit in the FreeBSD source tree which
broke us. Specifically, it's this one


commit d20793840b5b74acebe80ec710522f7386b452cf
Author: emaste <emaste at FreeBSD.org>
Date:   Wed Jul 27 16:01:44 2016 +0000

    Enable LLVM libunwind by default on amd64 and i386

    It is a maintained and updated runtime exception stack unwinder that
    should be a drop-in replacement.

    It can be disabled by setting WITHOUT_LLVM_LIBUNWIND in src.conf.

    PR:             206039 [exp-run]
    Sponsored by:   The FreeBSD Foundation

and if I rebuild the OS with WITHOUT_LLVM_LIBUNWIND=1, then everything works
again. So, clearly, the problem is that FreeBSD changed to using libunwind from
whatever they were using before, and whatever we do with dmd and druntime is
not compatible with that. The commit message implies that libunwind _should_ be
compatible with what was there before, but in our case, it clearly isn't. I
don't know if that's a problem with FreeBSD and it truly not being a drop-in
replacement, or if we're doing something wrong that happened to work before but
doesn't with libunwind, or what. Unfortunately, I know almost nothing about
libunwind - just that it has to do with dealing with throwing exceptions, so I
really have no idea what the problem could be or what the correct solution is
(I don't even know if this involves dmd or just druntime). I'd guess though
that we need to do something to become compatible with libunwind.

Since libunwind is not specifically a FreeBSD thing, this may affect something
in Linux land. I don't know. But we clearly don't work with FreeBSD 12-to-be
right now because of this.

--


More information about the Digitalmars-d-bugs mailing list