Skip to contentSkip to conversation

compiler/gcc5: Remove quirk for asm_volatile_goto()

PATCH In review Martin Liška 2 participants 3 messages Apr 14, 2015 – Apr 15, 2015 Sparse checker

lore
Share & tools
lore
#0 lore raw

PATCH 1/2 compiler/gcc5: Remove quirk for asm_volatile_goto()

Remove comments related to GCC 4.x branch and workaround for asm_volatile_goto which is fixed in GCC 5 release.

---
 include/linux/compiler-gcc5.h | 16 ++--------------
 1 file changed, 2 insertions(+), 14 deletions(-)
include/linux/compiler-gcc5.h +2 -14
index efee493..1ded0a0 100644
@@ -12,10 +12,6 @@
    like BUG(), printk(), panic() etc. [but let's keep them for now for
    older compilers]
 
-   Early snapshots of gcc 4.3 don't support this and we can't detect this
-   in the preprocessor, but we can live with this because they're unreleased.
-   Maketime probing would be overkill here.
-
    gcc also has a __attribute__((__hot__)) to move hot functions into
    a special section, but I don't see any sense in this right now in
    the kernel context */
@@ -32,10 +28,6 @@
  * Mark a position in code as unreachable.  This can be used to
  * suppress control flow warnings after asm blocks that transfer
  * control elsewhere.
- *
- * Early snapshots of gcc 4.5 don't support this and we can't detect
- * this in the preprocessor, but we can live with this because they're
- * unreleased.  Really, we need to have autoconf for the kernel.
  */
 #define unreachable() __builtin_unreachable()
 
@@ -48,15 +40,11 @@
 #define __visible __attribute__((externally_visible))
 
 /*
- * GCC 'asm goto' miscompiles certain code sequences:
+ * 'asm goto' miscompilation is fixed in GCC 5.x version:
  *
  *   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
- *
- * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
- *
- * (asm goto is automatically volatile - the naming reflects this.)
  */
-#define asm_volatile_goto(x...)	do { asm goto(x); asm (""); } while (0)
+#define asm_volatile_goto(x...)	do { asm goto(x); } while (0)
 
 #ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
 #define __HAVE_BUILTIN_BSWAP32__
Signature · 1 line
2.1.4
#1 lore raw
Quoted 2 lines · Martin Liška

Remove comments related to GCC 4.x branch and workaround for asm_volatile_goto which is fixed in GCC 5 release.

How sure are you that it is *really* fixed? Because it wasn't, last we saw.

It was originally claimed to be fixed in 4.8.2, but that turned out to be wrong. See commit 5631b8fba640 ("compiler/gcc4+: Remove inaccurate comment about 'asm goto' miscompiles"), and

    https://lkml.org/lkml/2014/2/12/817

which shows that the bugzilla you reference is at the very least unreliable. Apparently the gcc test-case didn't catch all the problems.

IOW, just leave the workaround. It has no actual cost, and the gcc bug wasn't obviously fully fixed. There are apparently very few users of "asm goto" (probably partly because of the limitations of it, particularly the "no outputs").

Linus
--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#2 lore raw
Quoted 16 lines · Linus Torvalds
Quoted 2 lines · Martin Liška

Remove comments related to GCC 4.x branch and workaround for asm_volatile_goto which is fixed in GCC 5 release.

How sure are you that it is *really* fixed? Because it wasn't, last we saw.

It was originally claimed to be fixed in 4.8.2, but that turned out to be wrong. See commit 5631b8fba640 ("compiler/gcc4+: Remove inaccurate comment about 'asm goto' miscompiles"), and

     https://lkml.org/lkml/2014/2/12/817

which shows that the bugzilla you reference is at the very least unreliable. Apparently the gcc test-case didn't catch all the problems.

Quoted 7 lines

IOW, just leave the workaround. It has no actual cost, and the gcc bug wasn't obviously fully fixed. There are apparently very few users of "asm goto" (probably partly because of the limitations of it, particularly the "no outputs").

Linus

Hello Linus.

Agree with you that a bit more defensive approach is reasonable, mainly because of the actual cost.

Thus, I send updated version of the patch which just removes unrelated GCC 4.x branch comments.

Thanks,
Martin

From 9db00c78af98a26685d3e0034d26962167441070 Mon Sep 17 00:00:00 2001
From: mliska <[email protected]>
Date: Wed, 15 Apr 2015 10:55:14 +0200
Subject: [PATCH 1/2] compiler/gcc5: Remove comments related to GCC 4.x branch.

---
 include/linux/compiler-gcc5.h | 8 --------
 1 file changed, 8 deletions(-)
include/linux/compiler-gcc5.h +0 -3
index efee493..abb03b8 100644
@@ -12,10 +12,6 @@
    like BUG(), printk(), panic() etc. [but let's keep them for now for
    older compilers]
 
-   Early snapshots of gcc 4.3 don't support this and we can't detect this
-   in the preprocessor, but we can live with this because they're unreleased.
-   Maketime probing would be overkill here.