Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 29 Jun 2018 07:14:09 -0700
From:      Eitan Adler <lists@eitanadler.com>
To:        "freebsd-arch@freebsd.org" <arch@freebsd.org>, David Chisnall <theraven@freebsd.org>,  Justin Hibbits <jhibbits@freebsd.org>, Maxim Sobolev <sobomax@freebsd.org>,  "Kenneth D. Merry" <ken@freebsd.org>
Subject:   Re: C++ in the kernel?
Message-ID:  <CAF6rxgkBrJ-0JHxE1fcodoKQohZzYxNfD0jOoEO8qfYTSO2kUA@mail.gmail.com>
In-Reply-To: <CAF6rxgnBx66EhEfvw4GTetKbCsa%2B_OEPgYWXHF_6qQPcRrbWKQ@mail.gmail.com>
References:  <CAF6rxgnBx66EhEfvw4GTetKbCsa%2B_OEPgYWXHF_6qQPcRrbWKQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 29 June 2018 at 00:59, Eitan Adler <lists@eitanadler.com> wrote:
> This was the contents of a conversation on a different list. Figured
> it was more appropriate here:
>
>>> We are experimenting with a C++ library for systems programming and are=
 interested in trying it in the FreeBSD kernel.  Has anyone managed to run =
C++ code in the kernel before and perhaps have patches to make the kernel h=
eaders somewhat less C++-hostile that they=E2=80=99d be willing to share?
>
>>> A friend gave a WIP talk at BSDCan a few years ago doing this very thin=
g.  You can find his work at https://github.com/adamlsd/libcpp.ko
>
>>> I believe few times I've seen this discussion over the years the main c=
oncerns raised were uncertainty about handling of exceptions and also lack =
of the real stable ABI for the C++. Each compiler seems to have its own con=
ventions, which might vary even between compiler revisions. https://youtu.b=
e/JPQWQfDhICA?t=3D51m55s What might be possible, however, is to have partic=
ular C++ "runtime" as a module itself, which is then would be used by the o=
ther modules that are compiled with that particular C++ compiler.
>
>>> Most kernels that use C++ require -fno-rtti -fno-exceptions, so don=E2=
=80=99t rely on a runtime.  The ABI concerns were a problem 20 years ago, b=
ut *NIX systems have kept the same C++ ABI since everyone[1] adopted the It=
anium ABI.  [1] Well, almost everyone.  AArch32 has a slightly different AB=
I, but it has also been stable for a similar length of time.
>
>>> Thanks, the include directory of that repo looks to be exactly what I n=
eed to get the subset of libc++ that I need working.

Copan used C++ in the kernel to support RAIDCore, which was a software RAID
stack.  (Written by ex-Adaptec people, I believe they were acquired by
Ciprico, which was then acquired by Dot Hill, which was acquired by
Seagate.  No idea whether the software is still active/maintained.)

RAIDCore didn't use new/delete or exceptions, so it wasn't too difficult to
get it running in the kernel on FreeBSD.  (It was originally written for
Windows and then ported to Linux, and we later ported it to FreeBSD at
Copan.)  The porting effort probably happened in the 2007-2008 timeframe.

RAIDCore was proprietary and the support code was never open sourced, so
there's nothing to share unfortunately.  I don't think there was much to
it, but my memory on that is fuzzy.

I guess the point is basic C++ in the kernel can be done without a huge
effort, and it was in a shipping product for years.


--=20
Eitan Adler



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAF6rxgkBrJ-0JHxE1fcodoKQohZzYxNfD0jOoEO8qfYTSO2kUA>