• Andrew Morton's avatar
    [PATCH] Add CONFIG for -mregparm=3 · e852f318
    Andrew Morton authored
    From: Andi Kleen <ak@muc.de>, me.
    
    Using -mregparm=3 shrinks the kernel further:
    
    (compiled with gcc 3.4, without -funit-at-a-time, using the later and
    together with -Os shrinks .text even more, making over 700KB difference)
    
    4129346  708629  207240 5045215  4cfbdf vmlinux
    3892905  708629  207240 4808774  496046 vmlinux-regparm
    
    This one helps even more, >236KB .text difference. Clearly worth
    the effort.
    
    This patch adds an option to use -mregparm=3 while compiling the kernel.  I
    did an LTP run and it showed no additional failures over an non regparm
    kernel.
    
    According to some gcc developers it should be safe to use in all gccs that
    are still supports (2.95 and up)
    
    I didn't make it the default because it will break all binary only modules
    (although they can be fixed by adding a wrapper that calls them with
    "asmlinkage").  Actually it may be a good idea to make this default with
    2.7.1 or somesuch.
    
    We add new kbuild infrastructure: the command
    
    	scripts/gcc-version.sh $(CC)
    
    will print out the version of gcc in a canonical 4-digit form suitable for
    performing numerical tests against.
    DESC
    arch/i386/Makefile,scripts/gcc-version.sh,Makefile small fixes
    EDESC
    From: Serge Belyshev <33554432@mtu-net.ru>
    
    arch/i386/Makefile:
    *  omitted $(KBUILD_SRC)/ in script call.
    
    scripts/gcc-version.sh:
    *  GNU tail no longer supports 'tail -1' syntax.
    
    We should consider adding -fweb option:
    
       vanilla:
       $ size vmlinux
          text    data     bss     dec     hex filename
       3056270  526780  386056 3969106  3c9052 vmlinux
    
       with -fweb:
       $ size vmlinux
          text    data     bss     dec     hex filename
       3049523  526780  386056 3962359  3c75f7 vmlinux
    
       Also note 0.1 ... 1.0% speedup in various benchmarks.
       This option is not enabled by default at -O2 because it
       (like -fomit-frame-pointer) makes debugging impossible.
    e852f318
gcc-version.sh 338 Bytes