Eitan Adler
2018-06-29 07:59:53 UTC
This was the contents of a conversation on a different list. Figured
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. 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.
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. 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.
--
Eitan Adler
Eitan Adler