https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109814
--- Comment #10 from Arsen Arsenović <arsen at gcc dot gnu.org> --- (In reply to lesto fante from comment #9) > To be fair I have no idea what would be the impact of removing freestanding, > from a quick test does not seems to have a realistic impact. > > I guess what happen here is that the freestanding option should remove as > much as possible, and the -specs=nano.specs should re-enable only the > minimum necessary. > > Seems like the proper way to do so is to just specify -specs=nano.specs, or > go full freestanding? I was hinting at the former. -ffreestanding doesn't do much (grep for flag_hosted in gcc/), so it *should* be safe to drop. (it changes __STDC_HOSTED__, and hence _GLIBCXX_HOSTED, and silences some main-related warnings) -specs=nano.specs is a newlib thing - I'm not sure how it's meant to be used (but it seems fine to keep it from a quick read) > My user case is industrial robot that have to be as reliable as possible. > > Being able to write embedded code using C++ give me RAII, constexpr, > templating, function overload, runtime and compile time polymorphism. > > Generally the manufacturer IDE disable allocation and exception, so I pretty > much avoid STL as it is a mine field. libstdc++ ought to work without those. std::allocator isn't part of the freestanding subset, but many bits of the STL work regardless of that. > In pure freestanding, I would expect smart pointer and at least parts cmath > to work; the compiler offer me only the FPU accelerated functionality, and > is up to me to implement the remaining. a good bit is, but not cmath, as a large part of it required a runtime. you should be able to use it in your configuration without -ffreestanding, probably > Unofficial AVR-gcc used the trick of making double into float, i would > prefer compilation error than those switcheroo under the hoods. arm-none-eabi-gcc seems to be built with a hosted libstdc++ configuration, so my guess is (without trying) that removing -ffreestanding should recover <cmath> I want to add more code to the freestanding subset to GCC 14, but have not had time for such experimentation yet. cmath is on that list.