summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Mackall <mpm@selenic.com>2005-05-01 08:59:01 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-05-01 08:59:01 -0700
commitc8538a7aa5527d02c7191ac5da124efadf6a2827 (patch)
tree6a2fae8be308d38ed1abe1d5c7539db29238ae61
parente43379f10b42194b8a6e1de342cfb44463c0f6da (diff)
downloadlinux-3.10-c8538a7aa5527d02c7191ac5da124efadf6a2827.tar.gz
linux-3.10-c8538a7aa5527d02c7191ac5da124efadf6a2827.tar.bz2
linux-3.10-c8538a7aa5527d02c7191ac5da124efadf6a2827.zip
[PATCH] remove all kernel BUGs
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>
-rw-r--r--include/asm-alpha/bug.h3
-rw-r--r--include/asm-arm/bug.h3
-rw-r--r--include/asm-arm26/bug.h3
-rw-r--r--include/asm-frv/bug.h2
-rw-r--r--include/asm-generic/bug.h19
-rw-r--r--include/asm-i386/bug.h5
-rw-r--r--include/asm-ia64/bug.h5
-rw-r--r--include/asm-m68k/bug.h3
-rw-r--r--include/asm-mips/bug.h4
-rw-r--r--include/asm-parisc/bug.h2
-rw-r--r--include/asm-ppc/bug.h3
-rw-r--r--include/asm-ppc64/bug.h7
-rw-r--r--include/asm-s390/bug.h3
-rw-r--r--include/asm-sh/bug.h3
-rw-r--r--include/asm-sparc/bug.h3
-rw-r--r--include/asm-sparc64/bug.h3
-rw-r--r--include/asm-v850/bug.h3
-rw-r--r--include/asm-x86_64/bug.h4
-rw-r--r--init/Kconfig10
-rw-r--r--lib/Kconfig.debug1
20 files changed, 82 insertions, 7 deletions
diff --git a/include/asm-alpha/bug.h b/include/asm-alpha/bug.h
index ae1e0a5fa49..39a3e2a5017 100644
--- a/include/asm-alpha/bug.h
+++ b/include/asm-alpha/bug.h
@@ -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
diff --git a/include/asm-arm/bug.h b/include/asm-arm/bug.h
index 5e91b90a818..24d11672eb6 100644
--- a/include/asm-arm/bug.h
+++ b/include/asm-arm/bug.h
@@ -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
diff --git a/include/asm-arm26/bug.h b/include/asm-arm26/bug.h
index 920b7053336..7177c739996 100644
--- a/include/asm-arm26/bug.h
+++ b/include/asm-arm26/bug.h
@@ -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
diff --git a/include/asm-frv/bug.h b/include/asm-frv/bug.h
index 011860b2881..074c0d5770e 100644
--- a/include/asm-frv/bug.h
+++ b/include/asm-frv/bug.h
@@ -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>
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h
index e5913c3b715..6e5aaaa9a2f 100644
--- a/include/asm-generic/bug.h
+++ b/include/asm-generic/bug.h
@@ -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__); \
@@ -31,4 +32,22 @@
} 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
diff --git a/include/asm-i386/bug.h b/include/asm-i386/bug.h
index 706eb511c33..8f79de19eb9 100644
--- a/include/asm-i386/bug.h
+++ b/include/asm-i386/bug.h
@@ -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
diff --git a/include/asm-ia64/bug.h b/include/asm-ia64/bug.h
index 2c0cd51e885..3aa0a0a5474 100644
--- a/include/asm-ia64/bug.h
+++ b/include/asm-ia64/bug.h
@@ -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
diff --git a/include/asm-m68k/bug.h b/include/asm-m68k/bug.h
index 3e1d2266fa6..072ce274d53 100644
--- a/include/asm-m68k/bug.h
+++ b/include/asm-m68k/bug.h
@@ -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
diff --git a/include/asm-mips/bug.h b/include/asm-mips/bug.h
index eb94bb96cfb..3f594b440ab 100644
--- a/include/asm-mips/bug.h
+++ b/include/asm-mips/bug.h
@@ -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
diff --git a/include/asm-parisc/bug.h b/include/asm-parisc/bug.h
index e72f6e2b4b9..695588da41f 100644
--- a/include/asm-parisc/bug.h
+++ b/include/asm-parisc/bug.h
@@ -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
diff --git a/include/asm-ppc/bug.h b/include/asm-ppc/bug.h
index e99c6cb9d61..8b34fd682b0 100644
--- a/include/asm-ppc/bug.h
+++ b/include/asm-ppc/bug.h
@@ -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
diff --git a/include/asm-ppc64/bug.h b/include/asm-ppc64/bug.h
index db31dd22233..169868fa307 100644
--- a/include/asm-ppc64/bug.h
+++ b/include/asm-ppc64/bug.h
@@ -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
diff --git a/include/asm-s390/bug.h b/include/asm-s390/bug.h
index 2b8d6d4dffc..a2e7430aafa 100644
--- a/include/asm-s390/bug.h
+++ b/include/asm-s390/bug.h
@@ -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
diff --git a/include/asm-sh/bug.h b/include/asm-sh/bug.h
index 70172217140..70508a360cd 100644
--- a/include/asm-sh/bug.h
+++ b/include/asm-sh/bug.h
@@ -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
diff --git a/include/asm-sparc/bug.h b/include/asm-sparc/bug.h
index 0d30a67d87a..04151208189 100644
--- a/include/asm-sparc/bug.h
+++ b/include/asm-sparc/bug.h
@@ -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
diff --git a/include/asm-sparc64/bug.h b/include/asm-sparc64/bug.h
index 25c5b1dfe37..516bb27f3fc 100644
--- a/include/asm-sparc64/bug.h
+++ b/include/asm-sparc64/bug.h
@@ -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
diff --git a/include/asm-v850/bug.h b/include/asm-v850/bug.h
index c778916bf7f..b0ed2d35f3e 100644
--- a/include/asm-v850/bug.h
+++ b/include/asm-v850/bug.h
@@ -14,9 +14,12 @@
#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__ */
diff --git a/include/asm-x86_64/bug.h b/include/asm-x86_64/bug.h
index 19aed6e78fe..bdbf66eab6e 100644
--- a/include/asm-x86_64/bug.h
+++ b/include/asm-x86_64/bug.h
@@ -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
diff --git a/init/Kconfig b/init/Kconfig
index abe2682a6ca..42dca393b94 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -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
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 426a0cf7b11..ac23847ce0e 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -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