C++ in the kernel?

Eitan Adler lists at eitanadler.com
Fri Jun 29 14:14:42 UTC 2018


On 29 June 2018 at 00:59, Eitan Adler <lists at 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 headers somewhat less C++-hostile that they’d be willing to share?
>
>>> A friend gave a WIP talk at BSDCan a few years ago doing this very thing.  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 concerns 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 conventions, which might vary even between compiler revisions. https://youtu.be/JPQWQfDhICA?t=51m55s What might be possible, however, is to have particular C++ "runtime" as a module itself, which is then would be used by the other modules that are compiled with that particular C++ compiler.
>
>>> Most kernels that use C++ require -fno-rtti -fno-exceptions, so don’t rely on a runtime.  The ABI concerns were a problem 20 years ago, but *NIX systems have kept the same C++ ABI since everyone[1] adopted the Itanium ABI.  [1] Well, almost everyone.  AArch32 has a slightly different ABI, 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 need 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.


-- 
Eitan Adler


More information about the freebsd-arch mailing list