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 <[email protected]>
> ---
>  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))

Reply via email to