Messages in this thread Patch in this message | | | Date | Mon, 1 Jun 2020 11:53:28 -0300 | From | Arnaldo Carvalho de Melo <> | Subject | Re: [PATCH 1/3] tools compiler.h: Add attribute to disable tail calls |
| |
Em Sat, May 30, 2020 at 01:20:13AM -0700, Ian Rogers escreveu: > Tail call optimizations can remove stack frames that are used in > unwinding tests. Add an attribute that can be used to disable the tail > call optimization. Tested on clang and GCC. > > Signed-off-by: Ian Rogers <irogers@google.com> > --- > tools/include/linux/compiler-gcc.h | 8 ++++++++ > tools/include/linux/compiler.h | 3 +++ > 2 files changed, 11 insertions(+) > > diff --git a/tools/include/linux/compiler-gcc.h b/tools/include/linux/compiler-gcc.h > index 95c072b70d0e..cda555b47d3d 100644 > --- a/tools/include/linux/compiler-gcc.h > +++ b/tools/include/linux/compiler-gcc.h > @@ -27,6 +27,14 @@ > #define __pure __attribute__((pure)) > #endif > #define noinline __attribute__((noinline)) > +#ifdef __has_attribute > +#if __has_attribute(disable_tail_calls) > +#define __no_tail_call __attribute__((disable_tail_calls)) > +#endif > +#endif > +#ifndef __no_tail_call > +#define __no_tail_call __attribute__((optimize("no-optimize-sibling-calls"))) > +#endif
Added this for some retro-computing old distros when building with old clang versions :-)
- Arnaldo
diff --git a/tools/include/linux/compiler-gcc.h b/tools/include/linux/compiler-gcc.h index cda555b47d3d..dea7378ad646 100644 --- a/tools/include/linux/compiler-gcc.h +++ b/tools/include/linux/compiler-gcc.h @@ -33,7 +33,10 @@ #endif #endif #ifndef __no_tail_call +#if GCC_VERSION > 40201 #define __no_tail_call __attribute__((optimize("no-optimize-sibling-calls"))) +#else +#define __no_tail_call #endif #ifndef __packed #define __packed __attribute__((packed))
| |