[Issue 17596] dmd d 2.073.2 and 2.074.1 interim generated dmd segfaults on FreeBSD 12-CURRENT

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Wed Jul 19 13:06:21 PDT 2017


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

--- Comment #8 from Cy Schubert <cy at FreeBSD.org> ---
Sorry for not replying sooner, way too many projects on the go here.

Here is how kib supported older apps prior to inode64:

https://svnweb.freebsd.org/base?view=revision&revision=318736

Forward compatibility:

https://svnweb.freebsd.org/base?view=revision&revision=320278

Stat.c, below, relies on versioned symbols (see
https://svnweb.freebsd.org/base/head/lib/libprocstat/Symbol.map?r1=318736&r2=318735&pathrev=318736)

int
stat(const char *path, struct stat *sb)
{
        struct freebsd11_stat stat11;
        int rv;

        if (__getosreldate() >= INO64_FIRST)
                return (__sys_fstatat(AT_FDCWD, path, sb, 0));
        rv = syscall(SYS_freebsd11_stat, path, &stat11);
        if (rv == 0)
                __stat11_to_stat(&stat11, sb);
        return (rv);
}

IMO implementing it in this way would require architectural changes to D's
implementation of some syscalls, similar to how Perl might interface with the
O/S. Discussing this with the maintainer of the ldc port, the short term
solution might be for he and I to patch the ports, however that would be a
fragile solution as depending on the options used at FreeBSD build time, stat_t
and dirent_t may vary.

--


More information about the Digitalmars-d-bugs mailing list