[PATCH] Use __builtin_trap() to indicate that BUG() never returns
From: Michael Ellerman <hidden>
Date: 2006-09-21 06:48:40
By using __builtin_trap() in BUG() we tell the compiler that we don't expect the code below to be executed, and in certain circumstances this allows the compiler to elide that code altogether. In fact it works so well that we have to put the bug section stuff before the __builtin_trap() or else it isn't generated at all. Tested on P5 LPAR, line numbers etc. all OK. Signed-off-by: Michael Ellerman <redacted> --- include/asm-powerpc/bug.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) Index: to-merge/include/asm-powerpc/bug.h ===================================================================
--- to-merge.orig/include/asm-powerpc/bug.h
+++ to-merge/include/asm-powerpc/bug.h@@ -37,12 +37,13 @@ struct bug_entry *find_bug(unsigned long */ #define BUG() do { \ - __asm__ __volatile__( \ - "1: twi 31,0,0\n" \ + __asm__ __volatile__( \ ".section __bug_table,\"a\"\n" \ - "\t"PPC_LONG" 1b,%0,%1,%2\n" \ - ".previous" \ + "\t"PPC_LONG" 1f,%0,%1,%2\n" \ + ".previous\n" \ + "1: " \ : : "i" (__LINE__), "i" (__FILE__), "i" (__FUNCTION__)); \ + __builtin_trap(); \ } while (0) #define BUG_ON(x) do { \