* [PATCH] include/linux/compiler*.h: add version detection to asm_volatile_goto
@ 2018-09-07 22:21 Nick Desaulniers
2018-09-09 15:16 ` Miguel Ojeda
0 siblings, 1 reply; 2+ messages in thread
From: Nick Desaulniers @ 2018-09-07 22:21 UTC (permalink / raw)
To: akpm
Cc: miguel.ojeda.sandonis, Nick Desaulniers, Kees Cook, Ingo Molnar,
Herbert Xu, Geert Uytterhoeven, Arnd Bergmann, Joe Perches,
Rasmus Villemoes, Paul Burton, Masahiro Yamada, Will Deacon,
linux-kernel
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@google.com>
---
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:
*
* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
*
@@ -179,7 +179,12 @@
*
* (asm goto is automatically volatile - the naming reflects this.)
*/
+#if GCC_VERSION < 40802
#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
+#else
+#define asm_volatile_goto(x...) asm goto(x)
+#endif
+
/*
* sparse (__CHECKER__) pretends to be gcc, but can't do constant
diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
index 3525c179698c..61449dbf30d8 100644
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -151,6 +151,10 @@ struct ftrace_likely_data {
#define __assume_aligned(a, ...)
#endif
+#ifndef asm_volatile_goto
+#define asm_volatile_goto(x...) asm goto(x)
+#endif
+
/* Are two types/vars the same type (ignoring qualifiers)? */
#define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
--
2.19.0.rc2.392.g5ba43deb5a-goog
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] include/linux/compiler*.h: add version detection to asm_volatile_goto
2018-09-07 22:21 [PATCH] include/linux/compiler*.h: add version detection to asm_volatile_goto Nick Desaulniers
@ 2018-09-09 15:16 ` Miguel Ojeda
0 siblings, 0 replies; 2+ messages in thread
From: Miguel Ojeda @ 2018-09-09 15:16 UTC (permalink / raw)
To: Nick Desaulniers
Cc: Andrew Morton, Kees Cook, Ingo Molnar, Herbert Xu,
Geert Uytterhoeven, Arnd Bergmann, Joe Perches, Rasmus Villemoes,
Paul Burton, Masahiro Yamada, Will Deacon, linux-kernel
Hi Nick,
On Sat, Sep 8, 2018 at 12:21 AM, Nick Desaulniers
<ndesaulniers@google.com> 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@google.com>
> ---
> 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@gmail.com>
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
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-09-09 15:21 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-07 22:21 [PATCH] include/linux/compiler*.h: add version detection to asm_volatile_goto Nick Desaulniers
2018-09-09 15:16 ` Miguel Ojeda
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).