Messages in this thread | | | Date | Thu, 4 Mar 2021 13:24:47 -0600 | From | Segher Boessenkool <> | Subject | Re: [PATCH v1] powerpc: Include running function as first entry in save_stack_trace() and friends |
| |
On Thu, Mar 04, 2021 at 09:54:44AM -0800, Nick Desaulniers wrote: > On Thu, Mar 4, 2021 at 9:42 AM Marco Elver <elver@google.com> wrote: > include/linux/compiler.h:246: > prevent_tail_call_optimization > > commit a9a3ed1eff36 ("x86: Fix early boot crash on gcc-10, third try")
That is much heavier than needed (an mb()). You can just put an empty inline asm after a call before a return, and that call cannot be optimised to a sibling call: (the end of a function is an implicit return:)
Instead of:
void g(void); void f(int x) if (x) g(); }
Do:
void g(void); void f(int x) if (x) g(); asm(""); }
This costs no extra instructions, and certainly not something as heavy as an mb()! It works without the "if" as well, of course, but with it it is a more interesting example of a tail call.
Segher
| |