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.

Reply via email to