Re: [PATCH] include/linux/compiler*.h: add version detection to asm_volatile_goto

From: Miguel Ojeda
Date: Sun Sep 09 2018 - 11:21:30 EST


Hi Nick,

On Sat, Sep 8, 2018 at 12:21 AM, Nick Desaulniers
<ndesaulniers@xxxxxxxxxx> wrote:
> The comment above asm_volatile_goto mentions working around a GCC bug,
> and links to a bug report that claims this has been fixed in newer
> versions of GCC. Testing shows that this was resolved in GCC 4.8.2.
> asm_volatile_goto should also be defined for other compilers that
> support asm goto.
>
> Signed-off-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx>
> ---
> include/linux/compiler-gcc.h | 7 ++++++-
> include/linux/compiler_types.h | 4 ++++
> 2 files changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
> index 763bbad1e258..149f411b4366 100644
> --- a/include/linux/compiler-gcc.h
> +++ b/include/linux/compiler-gcc.h
> @@ -171,7 +171,7 @@
> #endif
>
> /*
> - * GCC 'asm goto' miscompiles certain code sequences:
> + * GCC < 4.8.2 'asm goto' miscompiles certain code sequences:
> *

Nice catch. Indeed, it seems broken since 4.5.3 and fixed in every
version after 4.8.1 (at least the ones in godbolt).

Reviewed-by: Miguel Ojeda <miguel.ojeda.sandonis@xxxxxxxxx>

By the way, arch/arm64/include/asm/jump_label.h is the only place in
the kernel using "asm goto" directly (e.g. the arm64 one isn't). Even
if old gcc doesn't trigger the bug in that case, we should use the
same everywhere for consistency, unless there is a special reason not
to (not documented). I will send a patch.

Cheers,
Miguel