linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Use __builtin_trap() to indicate that BUG() never returns
@ 2006-09-21  6:48 Michael Ellerman
  0 siblings, 0 replies; only message in thread
From: Michael Ellerman @ 2006-09-21  6:48 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: linuxppc-dev, Stephen Rothwell

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 <michael@ellerman.id.au>
---

 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 {						\

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2006-09-21  6:48 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-09-21  6:48 [PATCH] Use __builtin_trap() to indicate that BUG() never returns Michael Ellerman

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).