From: Matt Mackall This patch eliminates all kernel BUGs, trims about 35k off the typical kernel, and makes the system slightly faster. Signed-off-by: Matt Mackall Signed-off-by: Andrew Morton --- 25-akpm/include/asm-alpha/bug.h | 3 +++ 25-akpm/include/asm-arm/bug.h | 3 +++ 25-akpm/include/asm-arm26/bug.h | 3 +++ 25-akpm/include/asm-frv/bug.h | 2 ++ 25-akpm/include/asm-generic/bug.h | 19 +++++++++++++++++++ 25-akpm/include/asm-i386/bug.h | 5 +++-- 25-akpm/include/asm-ia64/bug.h | 5 ++++- 25-akpm/include/asm-m68k/bug.h | 3 +++ 25-akpm/include/asm-mips/bug.h | 4 +++- 25-akpm/include/asm-parisc/bug.h | 2 ++ 25-akpm/include/asm-ppc/bug.h | 3 +++ 25-akpm/include/asm-ppc64/bug.h | 7 +++++-- 25-akpm/include/asm-s390/bug.h | 3 +++ 25-akpm/include/asm-sh/bug.h | 3 +++ 25-akpm/include/asm-sparc/bug.h | 3 +++ 25-akpm/include/asm-sparc64/bug.h | 3 +++ 25-akpm/include/asm-v850/bug.h | 3 +++ 25-akpm/include/asm-x86_64/bug.h | 4 +++- 25-akpm/init/Kconfig | 10 ++++++++++ 25-akpm/lib/Kconfig.debug | 1 + 20 files changed, 82 insertions(+), 7 deletions(-) diff -puN include/asm-alpha/bug.h~remove-all-kernel-bugs include/asm-alpha/bug.h --- 25/include/asm-alpha/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-alpha/bug.h Fri Apr 8 17:23:14 2005 @@ -1,6 +1,7 @@ #ifndef _ALPHA_BUG_H #define _ALPHA_BUG_H +#ifdef CONFIG_BUG #include /* ??? 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 #endif diff -puN include/asm-arm26/bug.h~remove-all-kernel-bugs include/asm-arm26/bug.h --- 25/include/asm-arm26/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-arm26/bug.h Fri Apr 8 17:23:14 2005 @@ -3,6 +3,7 @@ #include +#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 *f #endif #define HAVE_ARCH_BUG +#endif + #include #endif diff -puN include/asm-arm/bug.h~remove-all-kernel-bugs include/asm-arm/bug.h --- 25/include/asm-arm/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-arm/bug.h Fri Apr 8 17:23:14 2005 @@ -3,6 +3,7 @@ #include +#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 *f #endif #define HAVE_ARCH_BUG +#endif + #include #endif diff -puN include/asm-frv/bug.h~remove-all-kernel-bugs include/asm-frv/bug.h --- 25/include/asm-frv/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-frv/bug.h Fri Apr 8 17:23:14 2005 @@ -13,6 +13,7 @@ #include +#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 diff -puN include/asm-generic/bug.h~remove-all-kernel-bugs include/asm-generic/bug.h --- 25/include/asm-generic/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-generic/bug.h Fri Apr 8 17:23:14 2005 @@ -4,6 +4,7 @@ #include #include +#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 -puN include/asm-i386/bug.h~remove-all-kernel-bugs include/asm-i386/bug.h --- 25/include/asm-i386/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-i386/bug.h Fri Apr 8 17:23:14 2005 @@ -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 - #endif diff -puN include/asm-ia64/bug.h~remove-all-kernel-bugs include/asm-ia64/bug.h --- 25/include/asm-ia64/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-ia64/bug.h Fri Apr 8 17:23:14 2005 @@ -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 #endif diff -puN include/asm-m68k/bug.h~remove-all-kernel-bugs include/asm-m68k/bug.h --- 25/include/asm-m68k/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-m68k/bug.h Fri Apr 8 17:23:14 2005 @@ -3,6 +3,7 @@ #include +#ifdef CONFIG_BUG #ifdef CONFIG_DEBUG_BUGVERBOSE #ifndef CONFIG_SUN3 #define BUG() do { \ @@ -22,6 +23,8 @@ #endif #define HAVE_ARCH_BUG +#endif + #include #endif diff -puN include/asm-mips/bug.h~remove-all-kernel-bugs include/asm-mips/bug.h --- 25/include/asm-mips/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-mips/bug.h Fri Apr 8 17:23:14 2005 @@ -3,12 +3,14 @@ #include +#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 #endif diff -puN include/asm-parisc/bug.h~remove-all-kernel-bugs include/asm-parisc/bug.h --- 25/include/asm-parisc/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-parisc/bug.h Fri Apr 8 17:23:14 2005 @@ -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 #endif diff -puN include/asm-ppc64/bug.h~remove-all-kernel-bugs include/asm-ppc64/bug.h --- 25/include/asm-ppc64/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-ppc64/bug.h Fri Apr 8 17:23:14 2005 @@ -26,6 +26,8 @@ struct bug_entry *find_bug(unsigned long */ #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 "i" (__FILE__), "i" (__FUNCTION__)); \ } while (0) -#endif - #define HAVE_ARCH_BUG #define HAVE_ARCH_BUG_ON #define HAVE_ARCH_WARN_ON +#endif +#endif + #include #endif diff -puN include/asm-ppc/bug.h~remove-all-kernel-bugs include/asm-ppc/bug.h --- 25/include/asm-ppc/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-ppc/bug.h Fri Apr 8 17:23:14 2005 @@ -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 #endif diff -puN include/asm-s390/bug.h~remove-all-kernel-bugs include/asm-s390/bug.h --- 25/include/asm-s390/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-s390/bug.h Fri Apr 8 17:23:14 2005 @@ -3,12 +3,15 @@ #include +#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 #endif diff -puN include/asm-sh/bug.h~remove-all-kernel-bugs include/asm-sh/bug.h --- 25/include/asm-sh/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-sh/bug.h Fri Apr 8 17:23:14 2005 @@ -3,6 +3,7 @@ #include +#ifdef CONFIG_BUG /* * Tell the user there is some problem. */ @@ -12,6 +13,8 @@ } while (0) #define HAVE_ARCH_BUG +#endif + #include #endif diff -puN include/asm-sparc64/bug.h~remove-all-kernel-bugs include/asm-sparc64/bug.h --- 25/include/asm-sparc64/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-sparc64/bug.h Fri Apr 8 17:23:14 2005 @@ -1,6 +1,7 @@ #ifndef _SPARC64_BUG_H #define _SPARC64_BUG_H +#ifdef CONFIG_BUG #include #ifdef CONFIG_DEBUG_BUGVERBOSE @@ -14,6 +15,8 @@ extern void do_BUG(const char *file, int #endif #define HAVE_ARCH_BUG +#endif + #include #endif diff -puN include/asm-sparc/bug.h~remove-all-kernel-bugs include/asm-sparc/bug.h --- 25/include/asm-sparc/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-sparc/bug.h Fri Apr 8 17:23:14 2005 @@ -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 #endif #define HAVE_ARCH_BUG +#endif + #include #endif diff -puN include/asm-v850/bug.h~remove-all-kernel-bugs include/asm-v850/bug.h --- 25/include/asm-v850/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-v850/bug.h Fri Apr 8 17:23:14 2005 @@ -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 #endif /* __V850_BUG_H__ */ diff -puN include/asm-x86_64/bug.h~remove-all-kernel-bugs include/asm-x86_64/bug.h --- 25/include/asm-x86_64/bug.h~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/include/asm-x86_64/bug.h Fri Apr 8 17:23:35 2005 @@ -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 +#endif +#include #endif diff -puN init/Kconfig~remove-all-kernel-bugs init/Kconfig --- 25/init/Kconfig~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/init/Kconfig Fri Apr 8 17:23:14 2005 @@ -293,6 +293,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 -puN lib/Kconfig.debug~remove-all-kernel-bugs lib/Kconfig.debug --- 25/lib/Kconfig.debug~remove-all-kernel-bugs Fri Apr 8 17:23:14 2005 +++ 25-akpm/lib/Kconfig.debug Fri Apr 8 17:23:14 2005 @@ -127,6 +127,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 _