[PATCH] remove all kernel BUGs
authorMatt Mackall <mpm@selenic.com>
Sun, 1 May 2005 15:59:01 +0000 (08:59 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sun, 1 May 2005 15:59:01 +0000 (08:59 -0700)
This patch eliminates all kernel BUGs, trims about 35k off the typical
kernel, and makes the system slightly faster.

Signed-off-by: Matt Mackall <mpm@selenic.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
20 files changed:
include/asm-alpha/bug.h
include/asm-arm/bug.h
include/asm-arm26/bug.h
include/asm-frv/bug.h
include/asm-generic/bug.h
include/asm-i386/bug.h
include/asm-ia64/bug.h
include/asm-m68k/bug.h
include/asm-mips/bug.h
include/asm-parisc/bug.h
include/asm-ppc/bug.h
include/asm-ppc64/bug.h
include/asm-s390/bug.h
include/asm-sh/bug.h
include/asm-sparc/bug.h
include/asm-sparc64/bug.h
include/asm-v850/bug.h
include/asm-x86_64/bug.h
init/Kconfig
lib/Kconfig.debug

index ae1e0a5fa492c9ff8bc8769c8637da392eb2a417..39a3e2a5017dba4dcd89e094a48ccbb94e065294 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef _ALPHA_BUG_H
 #define _ALPHA_BUG_H
 
+#ifdef CONFIG_BUG
 #include <asm/pal.h>
 
 /* ??? Would be nice to use .gprel32 here, but we can't be sure that the
@@ -10,6 +11,8 @@
                       : : "i" (PAL_bugchk), "i"(__LINE__), "i"(__FILE__))
 
 #define HAVE_ARCH_BUG
+#endif
+
 #include <asm-generic/bug.h>
 
 #endif
index 5e91b90a8181cb8a9b7e858757792d14d3a22896..24d11672eb601979d2ca64e3adf60dc923dfe22a 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <linux/config.h>
 
+#ifdef CONFIG_BUG
 #ifdef CONFIG_DEBUG_BUGVERBOSE
 extern volatile void __bug(const char *file, int line, void *data);
 
@@ -17,6 +18,8 @@ extern volatile void __bug(const char *file, int line, void *data);
 #endif
 
 #define HAVE_ARCH_BUG
+#endif
+
 #include <asm-generic/bug.h>
 
 #endif
index 920b7053336801e0e172dd804572e967918bb4cc..7177c7399967028cb891fdd7b8382fe810eadbde 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <linux/config.h>
 
+#ifdef CONFIG_BUG
 #ifdef CONFIG_DEBUG_BUGVERBOSE
 extern volatile void __bug(const char *file, int line, void *data);
 /* give file/line information */
@@ -12,6 +13,8 @@ extern volatile void __bug(const char *file, int line, void *data);
 #endif
 
 #define HAVE_ARCH_BUG
+#endif
+
 #include <asm-generic/bug.h>
 
 #endif
index 011860b288187de259001451400eed7e0b1c4437..074c0d5770ebd4cb6f5f4f64645323da6bd812fc 100644 (file)
@@ -13,6 +13,7 @@
 
 #include <linux/config.h>
 
+#ifdef CONFIG_BUG
 /*
  * Tell the user there is some problem.
  */
@@ -45,6 +46,7 @@ do {                                          \
 #define HAVE_ARCH_KGDB_BAD_PAGE
 #define kgdb_bad_page(page) do { kgdb_raise(SIGABRT); } while(0)
 #endif
+#endif
 
 #include <asm-generic/bug.h>
 
index e5913c3b715a01a8a778ddefeb0023ad42296042..6e5aaaa9a2fb8d89710c357201dd83bcc69757b2 100644 (file)
@@ -4,6 +4,7 @@
 #include <linux/compiler.h>
 #include <linux/config.h>
 
+#ifdef CONFIG_BUG
 #ifndef HAVE_ARCH_BUG
 #define BUG() do { \
        printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
 } while (0)
 #endif
 
+#else /* !CONFIG_BUG */
+#ifndef HAVE_ARCH_BUG
+#define BUG()
+#endif
+
+#ifndef HAVE_ARCH_PAGE_BUG
+#define PAGE_BUG(page) do { if (page) ; } while (0)
+#endif
+
+#ifndef HAVE_ARCH_BUG_ON
+#define BUG_ON(condition) do { if (condition) ; } while(0)
+#endif
+
+#ifndef HAVE_ARCH_WARN_ON
+#define WARN_ON(condition) do { if (condition) ; } while(0)
+#endif
+#endif
+
 #endif
index 706eb511c3307de744e0242d5250a54d1a55a4cb..8f79de19eb9405f67cd19389da24ebdac1ad25dc 100644 (file)
@@ -9,6 +9,8 @@
  * undefined" opcode for parsing in the trap handler.
  */
 
+#ifdef CONFIG_BUG
+#define HAVE_ARCH_BUG
 #ifdef CONFIG_DEBUG_BUGVERBOSE
 #define BUG()                          \
  __asm__ __volatile__( "ud2\n"         \
@@ -18,8 +20,7 @@
 #else
 #define BUG() __asm__ __volatile__("ud2\n")
 #endif
+#endif
 
-#define HAVE_ARCH_BUG
 #include <asm-generic/bug.h>
-
 #endif
index 2c0cd51e88561f69bb5859e012bbcce83745fb45..3aa0a0a5474bd20f7898995bf45cc13da5986bac 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef _ASM_IA64_BUG_H
 #define _ASM_IA64_BUG_H
 
+#ifdef CONFIG_BUG
 #if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
 # define ia64_abort()  __builtin_trap()
 #else
@@ -8,8 +9,10 @@
 #endif
 #define BUG() do { printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); ia64_abort(); } while (0)
 
-/* should this BUG should be made generic? */
+/* should this BUG be made generic? */
 #define HAVE_ARCH_BUG
+#endif
+
 #include <asm-generic/bug.h>
 
 #endif
index 3e1d2266fa69eed49ccbcf544946d592671562d8..072ce274d53751d3ecbff96f0b2dca93b8056e97 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <linux/config.h>
 
+#ifdef CONFIG_BUG
 #ifdef CONFIG_DEBUG_BUGVERBOSE
 #ifndef CONFIG_SUN3
 #define BUG() do { \
@@ -22,6 +23,8 @@
 #endif
 
 #define HAVE_ARCH_BUG
+#endif
+
 #include <asm-generic/bug.h>
 
 #endif
index eb94bb96cfbcbcc2389d3a846b774f6b075b6734..3f594b440abcdb65151dc4fe90b466d4e998ac14 100644 (file)
@@ -3,12 +3,14 @@
 
 #include <asm/break.h>
 
+#ifdef CONFIG_BUG
+#define HAVE_ARCH_BUG
 #define BUG()                                                          \
 do {                                                                   \
        __asm__ __volatile__("break %0" : : "i" (BRK_BUG));             \
 } while (0)
+#endif
 
-#define HAVE_ARCH_BUG
 #include <asm-generic/bug.h>
 
 #endif
index e72f6e2b4b9fc6c6d75e1b219dd61bfea55ba74d..695588da41f8a73bb31d3fbeb7c686bf0fdfa751 100644 (file)
@@ -1,12 +1,14 @@
 #ifndef _PARISC_BUG_H
 #define _PARISC_BUG_H
 
+#ifdef CONFIG_BUG
 #define HAVE_ARCH_BUG
 #define BUG() do { \
        printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
        dump_stack(); \
        panic("BUG!"); \
 } while (0)
+#endif
 
 #include <asm-generic/bug.h>
 #endif
index e99c6cb9d61896dcafa3a859d2c9ab1767c213be..8b34fd682b0dae9776fa29316cb58278a603a954 100644 (file)
@@ -14,6 +14,7 @@ struct bug_entry {
  */
 #define BUG_WARNING_TRAP       0x1000000
 
+#ifdef CONFIG_BUG
 #define BUG() do {                                                      \
        __asm__ __volatile__(                                            \
                "1:     twi 31,0,0\n"                                    \
@@ -50,6 +51,8 @@ struct bug_entry {
 #define HAVE_ARCH_BUG
 #define HAVE_ARCH_BUG_ON
 #define HAVE_ARCH_WARN_ON
+#endif
+
 #include <asm-generic/bug.h>
 
 #endif
index db31dd22233c6927f0f6dd8bb9682784d9b0f47e..169868fa307defa30c7782cea4b96b2ab278ac54 100644 (file)
@@ -26,6 +26,8 @@ struct bug_entry *find_bug(unsigned long bugaddr);
  */
 #define BUG_WARNING_TRAP       0x1000000
 
+#ifdef CONFIG_BUG
+
 #define BUG() do {                                                      \
        __asm__ __volatile__(                                            \
                "1:     twi 31,0,0\n"                                    \
@@ -55,11 +57,12 @@ struct bug_entry *find_bug(unsigned long bugaddr);
                    "i" (__FILE__), "i" (__FUNCTION__));        \
 } while (0)
 
-#endif
-
 #define HAVE_ARCH_BUG
 #define HAVE_ARCH_BUG_ON
 #define HAVE_ARCH_WARN_ON
+#endif
+#endif
+
 #include <asm-generic/bug.h>
 
 #endif
index 2b8d6d4dffcfdc6a696cd41877a94ba0af262dca..a2e7430aafa625b53cc889a998b4ad972f876763 100644 (file)
@@ -3,12 +3,15 @@
 
 #include <linux/kernel.h>
 
+#ifdef CONFIG_BUG
 #define BUG() do { \
         printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
         __asm__ __volatile__(".long 0"); \
 } while (0)
 
 #define HAVE_ARCH_BUG
+#endif
+
 #include <asm-generic/bug.h>
 
 #endif
index 70172217140f4cdf6c81e913bf10bf4a8a9d33f0..70508a360cd669b84ade8a09ab29f570d6dcf8de 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <linux/config.h>
 
+#ifdef CONFIG_BUG
 /*
  * Tell the user there is some problem.
  */
@@ -12,6 +13,8 @@
 } while (0)
 
 #define HAVE_ARCH_BUG
+#endif
+
 #include <asm-generic/bug.h>
 
 #endif
index 0d30a67d87a37f14278b2a50b17fda1925591df4..04151208189f6b3b00e29a9ad5071537170810f4 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef _SPARC_BUG_H
 #define _SPARC_BUG_H
 
+#ifdef CONFIG_BUG
 /* Only use the inline asm until a gcc release that can handle __builtin_trap
  * -rob 2003-06-25
  *
@@ -26,6 +27,8 @@ extern void do_BUG(const char *file, int line);
 #endif
 
 #define HAVE_ARCH_BUG
+#endif
+
 #include <asm-generic/bug.h>
 
 #endif
index 25c5b1dfe37834ebcf0743887f56eca16fce2b3b..516bb27f3fc4e5a0bb32f8581f37901d56f213f7 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef _SPARC64_BUG_H
 #define _SPARC64_BUG_H
 
+#ifdef CONFIG_BUG
 #include <linux/compiler.h>
 
 #ifdef CONFIG_DEBUG_BUGVERBOSE
@@ -14,6 +15,8 @@ extern void do_BUG(const char *file, int line);
 #endif
 
 #define HAVE_ARCH_BUG
+#endif
+
 #include <asm-generic/bug.h>
 
 #endif
index c778916bf7f2c1410c02387e5b27a3d81f24333f..b0ed2d35f3e830293f56de96d1fd8a82e5ea0f95 100644 (file)
 #ifndef __V850_BUG_H__
 #define __V850_BUG_H__
 
+#ifdef CONFIG_BUG
 extern void __bug (void) __attribute__ ((noreturn));
 #define BUG()          __bug()
 #define HAVE_ARCH_BUG
+#endif
+
 #include <asm-generic/bug.h>
 
 #endif /* __V850_BUG_H__ */
index 19aed6e78fecc7e86ad5d54d4bb170e09df44069..bdbf66eab6eebb310193f7368361460ee731552b 100644 (file)
@@ -15,11 +15,13 @@ struct bug_frame {
        unsigned short line;
 } __attribute__((packed));
 
+#ifdef CONFIG_BUG
 #define HAVE_ARCH_BUG
 #define BUG() \
        asm volatile("ud2 ; .quad %c1 ; .short %c0" :: \
                     "i"(__LINE__), "i" (__stringify(__FILE__)))
 void out_of_line_bug(void);
-#include <asm-generic/bug.h>
+#endif
 
+#include <asm-generic/bug.h>
 #endif
index abe2682a6ca688b28a9aa70dd2bb1f0aaa737f8b..42dca393b94e568f878123be9d8f7c05d91c0296 100644 (file)
@@ -275,6 +275,16 @@ config KALLSYMS_EXTRA_PASS
           reported.  KALLSYMS_EXTRA_PASS is only a temporary workaround while
           you wait for kallsyms to be fixed.
 
+config BUG
+       bool "BUG() support" if EMBEDDED
+       default y
+       help
+          Disabling this option eliminates support for BUG and WARN, reducing
+          the size of your kernel image and potentially quietly ignoring
+          numerous fatal conditions. You should only consider disabling this
+          option for embedded systems with no facilities for reporting errors.
+          Just say Y.
+
 config BASE_FULL
        default y
        bool "Enable full-sized data structures for core" if EMBEDDED
index 426a0cf7b11c6ee539e94136e277171893f0b3a5..ac23847ce0e3cbcb3f006805dbd6d65a3966d399 100644 (file)
@@ -108,6 +108,7 @@ config DEBUG_HIGHMEM
 
 config DEBUG_BUGVERBOSE
        bool "Verbose BUG() reporting (adds 70K)" if DEBUG_KERNEL && EMBEDDED
+       depends on BUG
        depends on ARM || ARM26 || M32R || M68K || SPARC32 || SPARC64 || (X86 && !X86_64) || FRV
        default !EMBEDDED
        help