The GCC manual's documentation of -fno-trampolines was apparently written from an Ada point of view. However, when I read it I understandably mistook it to say that -fno-trampolines also works for C, C++, etc. It doesn't: it is silently ignored for these languages, and I assume for any language other than Ada.
This confusion caused me to go in the wrong direction in a Gnulib dicussion, as I mistakenly thought that entire C apps with nested functions could be compiled with -fno-trampolines and then use nested C functions in stack overflow handlers where the alternate stack is allocated via malloc. I was wrong, as this won't work on common platforms like x86-64 where malloc yields non-executable storage. gcc/ * doc/invoke.texi (Code Gen Options): * doc/tm.texi.in (Trampolines): Document that -fno-trampolines and -ftrampolines work only with Ada. --- gcc/doc/invoke.texi | 5 +++++ gcc/doc/tm.texi.in | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 5cd4e2d993c..b55bbf3e424 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -16646,6 +16646,11 @@ Moreover, code compiled with @option{-ftrampolines} and code compiled with present. This option must therefore be used on a program-wide basis and be manipulated with extreme care. +For languages other than Ada, the @code{-ftrampolines} and +@code{-fno-trampolines} options currently have no effect, and +trampolines are always generated on platforms that need them +for nested functions. + @item -fvisibility=@r{[}default@r{|}internal@r{|}hidden@r{|}protected@r{]} @opindex fvisibility Set the default ELF image symbol visibility to the specified option---all diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index d9fbbe20e6f..20501607716 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -3828,6 +3828,10 @@ addresses. Since GCC's generic function descriptors are not ABI-compliant, this option is typically used only on a per-language basis (notably by Ada) or when it can otherwise be applied to the whole program. +For languages other than Ada, the @code{-ftrampolines} and +@code{-fno-trampolines} options currently have no effect, and +trampolines are always generated on platforms that need them +for nested functions. Define the following hook if your backend either implements ABI-specified descriptor support, or can use GCC's generic descriptor implementation -- 2.31.1