From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Daney Subject: [PATCH 00/10] Add support for GCC's __builtin_unreachable() and use it in BUG. Date: Thu, 10 Sep 2009 16:54:41 -0700 Message-ID: <4AA991C1.1050800@caviumnetworks.com> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Return-path: Sender: linux-alpha-owner@vger.kernel.org List-ID: Content-Type: text/plain; charset="us-ascii"; format="flowed" To: Linus Torvalds , Andrew Morton Cc: Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, ralf@linux-mips.org, linux-mips@linux-mips.org, Martin Schwidefsky , Heiko Carstens , linux390@de.ibm.com, linux-s390@vger.kernel.org, David Howells , Koichi Yasutake , linux-am33-list@redhat.com, Kyle McMartin , Helge Deller , linux-parisc@vger.kernel.org, Benjamin Herrenschmidt , Paul Mackerras , linuxppc-dev@ozlabs.org, Richard Henderson , Ivan Kokshaysky , linux-alpha@vger.kernel.org, Haavard Skinnemoen , Mike Frysinger , uclinux-dist-devel@blackfin.uclinux.org Starting with version 4.5, GCC has a new built-in function called __builtin_unreachable(). The function tells the compiler that control flow will never reach that point. Currently we trick the compiler by putting in for(;;); but this has the disadvantage that extra code is emitted for an endless loop. For an i386 kernel using __builtin_unreachable() results in an allyesconfig that is nearly 4000 bytes smaller. This patch set adds support to compiler.h creating a new macro usable in the kernel called unreachable(). If the compiler lacks __builtin_unreachable(), it just expands to for(;;). The x86 and MIPS patches I actually tested with a GCC-4.5 snapshot. Lacking the ability to test the rest of the architectures, I just did what seemed right without even trying to compile the kernel. 01/10 adds the compiler.h support, the rest of the patches retrofit the various architecture BUG macros to use it instead of for(;;) or while(1) loops. I will reply with the 10 patches. The architecture specific patches I will send to a smaller set of people. David Daney (10): Add support for GCC-4.5's __builtin_unreachable() to compiler.h x86: Convert BUG() to use unreachable() MIPS: Convert BUG() to use unreachable() s390: Convert BUG() to use unreachable() mn10300: Convert BUG() to use unreachable() parisc: Convert BUG() to use unreachable() powerpc: Convert BUG() to use unreachable() alpha: Convert BUG() to use unreachable() avr32: Convert BUG() to use unreachable() blackfin: Convert BUG() to use unreachable() arch/alpha/include/asm/bug.h | 2 +- arch/avr32/include/asm/bug.h | 2 +- arch/blackfin/include/asm/bug.h | 2 +- arch/mips/include/asm/bug.h | 4 +--- arch/mn10300/include/asm/bug.h | 3 ++- arch/parisc/include/asm/bug.h | 4 ++-- arch/powerpc/include/asm/bug.h | 2 +- arch/s390/include/asm/bug.h | 2 +- arch/x86/include/asm/bug.h | 4 ++-- include/linux/compiler-gcc4.h | 14 ++++++++++++++ include/linux/compiler.h | 5 +++++ 11 files changed, 31 insertions(+), 13 deletions(-) From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ozlabs.org (ozlabs.org [203.10.76.45]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mx.ozlabs.org", Issuer "CA Cert Signing Authority" (verified OK)) by bilbo.ozlabs.org (Postfix) with ESMTPS id D45E4B6F1E for ; Fri, 11 Sep 2009 10:10:56 +1000 (EST) Received: from mail3.caviumnetworks.com (mail3.caviumnetworks.com [12.108.191.235]) by ozlabs.org (Postfix) with ESMTP id 6E81CDDD04 for ; Fri, 11 Sep 2009 10:10:56 +1000 (EST) Message-ID: <4AA991C1.1050800@caviumnetworks.com> Date: Thu, 10 Sep 2009 16:54:41 -0700 From: David Daney MIME-Version: 1.0 To: Linus Torvalds , Andrew Morton Subject: [PATCH 00/10] Add support for GCC's __builtin_unreachable() and use it in BUG. Content-Type: text/plain; charset=ISO-8859-1; format=flowed Cc: linux-mips@linux-mips.org, Heiko Carstens , linuxppc-dev@ozlabs.org, Paul Mackerras , "H. Peter Anvin" , linux-s390@vger.kernel.org, linux-am33-list@redhat.com, Helge Deller , x86@kernel.org, Ingo Molnar , Mike Frysinger , Ivan Kokshaysky , uclinux-dist-devel@blackfin.uclinux.org, Thomas Gleixner , Richard Henderson , Haavard Skinnemoen , linux-parisc@vger.kernel.org, ralf@linux-mips.org, Kyle McMartin , linux-alpha@vger.kernel.org, Martin Schwidefsky , linux390@de.ibm.com, Koichi Yasutake List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Starting with version 4.5, GCC has a new built-in function called __builtin_unreachable(). The function tells the compiler that control flow will never reach that point. Currently we trick the compiler by putting in for(;;); but this has the disadvantage that extra code is emitted for an endless loop. For an i386 kernel using __builtin_unreachable() results in an allyesconfig that is nearly 4000 bytes smaller. This patch set adds support to compiler.h creating a new macro usable in the kernel called unreachable(). If the compiler lacks __builtin_unreachable(), it just expands to for(;;). The x86 and MIPS patches I actually tested with a GCC-4.5 snapshot. Lacking the ability to test the rest of the architectures, I just did what seemed right without even trying to compile the kernel. 01/10 adds the compiler.h support, the rest of the patches retrofit the various architecture BUG macros to use it instead of for(;;) or while(1) loops. I will reply with the 10 patches. The architecture specific patches I will send to a smaller set of people. David Daney (10): Add support for GCC-4.5's __builtin_unreachable() to compiler.h x86: Convert BUG() to use unreachable() MIPS: Convert BUG() to use unreachable() s390: Convert BUG() to use unreachable() mn10300: Convert BUG() to use unreachable() parisc: Convert BUG() to use unreachable() powerpc: Convert BUG() to use unreachable() alpha: Convert BUG() to use unreachable() avr32: Convert BUG() to use unreachable() blackfin: Convert BUG() to use unreachable() arch/alpha/include/asm/bug.h | 2 +- arch/avr32/include/asm/bug.h | 2 +- arch/blackfin/include/asm/bug.h | 2 +- arch/mips/include/asm/bug.h | 4 +--- arch/mn10300/include/asm/bug.h | 3 ++- arch/parisc/include/asm/bug.h | 4 ++-- arch/powerpc/include/asm/bug.h | 2 +- arch/s390/include/asm/bug.h | 2 +- arch/x86/include/asm/bug.h | 4 ++-- include/linux/compiler-gcc4.h | 14 ++++++++++++++ include/linux/compiler.h | 5 +++++ 11 files changed, 31 insertions(+), 13 deletions(-)