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 <ndesaulni...@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