Re: [PATCH 10/12] s390: avoid __builtin_return_address(n) on clang

From: Martin Schwidefsky
Date: Wed Apr 10 2019 - 12:04:16 EST


On Mon, 8 Apr 2019 23:26:23 +0200
Arnd Bergmann <arnd@xxxxxxxx> wrote:

> llvm on s390 has problems with __builtin_return_address(n), with n>0,
> this results in a somewhat cryptic error message:
>
> fatal error: error in backend: Unsupported stack frame traversal count
>
> To work around it, use the direct return address directly. This
> is probably not ideal here, but gets things to compile and should
> only lead to inferior reporting, not to misbehavior of the generated
> code.
>
> Link: https://bugs.llvm.org/show_bug.cgi?id=41424
> Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx>
> ---
> arch/s390/include/asm/ftrace.h | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/arch/s390/include/asm/ftrace.h b/arch/s390/include/asm/ftrace.h
> index 5a3c95b11952..7923c63946fb 100644
> --- a/arch/s390/include/asm/ftrace.h
> +++ b/arch/s390/include/asm/ftrace.h
> @@ -13,7 +13,12 @@
>
> #ifndef __ASSEMBLY__
>
> +#ifdef CONFIG_CC_IS_CLANG
> +/* https://bugs.llvm.org/show_bug.cgi?id=41424 */
> +#define ftrace_return_address(n) __builtin_return_address(0)
> +#else
> #define ftrace_return_address(n) __builtin_return_address(n)
> +#endif
>
> void _mcount(void);
> void ftrace_caller(void);

I can say I like this one. If the compiler can not do __builtin_return_address(n)
it feels wrong to just use __builtin_return_address(0).

--
blue skies,
Martin.

"Reality continues to ruin my life." - Calvin.