https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68065

--- Comment #25 from Daniel Micay <danielmicay at gmail dot com> ---
> Just as GCC on Windows...

Sure. I'm pointing out that Windows has had safety here for years, while Linux
doesn't. It should. It really shouldn't be possible to exploit well-defined
code. Running out of resources and aborting isn't ideal but that's at least
sane and doing better doesn't seem possible for C.

> Figures please, otherwise that's just FUD as usual.

... pointing out that something isn't implemented ideally is FUD now? If it had
no significant performance hit (which should be the case for optimized C,
because it shouldn't need to reserve a register), then it would surely be
enabled by default.

We tried enabling it in Arch Linux but it had to be backed out due to
performance concerns. Some compatibility issues came up (due to inline
assembly) and then investigation into it demonstrated that it wasn't really
causing a negligible performance hit, especially on i686. Among other things,
it causes a significant performance hit (over 5% slower in a malloc
micro-benchmark on x86_64, more on i686) for jemalloc which has large enough
stack frames to trigger it and essentially all of the code is inlined. It's
usually pretty small... but a lot more than it should be.

Anyway, I was just trying to be helpful. I'm only really interested in Android
these days so GCC isn't really something I care about... I just happened to
have thoughts about this stuff because I worked on similar issues in the Rust
compiler / standard libraries (Rust is why LLVM is getting proper stack
checking at all, Clang implements -fstack-check as a no-op right now for
'compatibility') and recently Bionic.

Reply via email to