diff options
author | Anton Blanchard <anton@samba.org> | 2005-08-26 21:34:07 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-08-26 22:37:11 -0400 |
commit | 32818c2eb6b83ea5065c89e0c3cf774abc4dc02b (patch) | |
tree | 909eed391340511798a80a4e693b401b61ef1e50 | |
parent | 212d6d2237f60bc28c1518f8abf9d3ed6c17574a (diff) |
[PATCH] ppc64: Fix issue with gcc 4.0 compiled kernels
I recently had a BUG_ON() go off spuriously on a gcc 4.0 compiled kernel.
It turns out gcc-4.0 was removing a sign extension while earlier gcc
versions would not. Thinking this to be a compiler bug, I submitted a
report:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23422
It turns out we need to cast the input in order to tell gcc to sign extend
it.
Thanks to Andrew Pinski for his help on this bug.
Signed-off-by: Anton Blanchard <anton@samba.org>
Cc: Paul Mackerras <paulus@samba.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | include/asm-ppc64/bug.h | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/include/asm-ppc64/bug.h b/include/asm-ppc64/bug.h index 169868fa307d..160178278861 100644 --- a/include/asm-ppc64/bug.h +++ b/include/asm-ppc64/bug.h | |||
@@ -43,8 +43,8 @@ struct bug_entry *find_bug(unsigned long bugaddr); | |||
43 | ".section __bug_table,\"a\"\n\t" \ | 43 | ".section __bug_table,\"a\"\n\t" \ |
44 | " .llong 1b,%1,%2,%3\n" \ | 44 | " .llong 1b,%1,%2,%3\n" \ |
45 | ".previous" \ | 45 | ".previous" \ |
46 | : : "r" (x), "i" (__LINE__), "i" (__FILE__), \ | 46 | : : "r" ((long long)(x)), "i" (__LINE__), \ |
47 | "i" (__FUNCTION__)); \ | 47 | "i" (__FILE__), "i" (__FUNCTION__)); \ |
48 | } while (0) | 48 | } while (0) |
49 | 49 | ||
50 | #define WARN_ON(x) do { \ | 50 | #define WARN_ON(x) do { \ |
@@ -53,7 +53,8 @@ struct bug_entry *find_bug(unsigned long bugaddr); | |||
53 | ".section __bug_table,\"a\"\n\t" \ | 53 | ".section __bug_table,\"a\"\n\t" \ |
54 | " .llong 1b,%1,%2,%3\n" \ | 54 | " .llong 1b,%1,%2,%3\n" \ |
55 | ".previous" \ | 55 | ".previous" \ |
56 | : : "r" (x), "i" (__LINE__ + BUG_WARNING_TRAP), \ | 56 | : : "r" ((long long)(x)), \ |
57 | "i" (__LINE__ + BUG_WARNING_TRAP), \ | ||
57 | "i" (__FILE__), "i" (__FUNCTION__)); \ | 58 | "i" (__FILE__), "i" (__FUNCTION__)); \ |
58 | } while (0) | 59 | } while (0) |
59 | 60 | ||