lkml.org 
[lkml]   [2016]   [Dec]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[RFC] minimum gcc version for kernel: raise to gcc-4.3 or 4.6?
    Date
    I had some fun doing build testing with older gcc versions, building
    every release from 4.0 through 7.0 and running that on my randconfig
    setup to see what comes out.

    First of all, gcc-4.9 and higher is basically warning-free everywhere,
    although gcc-7 introduces some interesting new warnings (I have started
    doing patches for those as well). gcc-4.8 is probably good, too, and
    gcc-4.6 and 4.7 at least don't produce build failures in general, though
    the level of false-positive warnings increases (we could decide to turn
    those off for older compilers for build test purposes).

    In gcc-4.5 and below, dead code elimination is not as good as later,
    causing a couple of link errors, and some of them have no good workaround
    (see patch 1). It would be nice to declare that version too old, but
    several older distros that are still in wide use ship with compilers
    earlier than 4.6:

    RHEL6: gcc-4.4
    Debian 6: gcc-4.4
    Ubuntu 10.04: gcc-4.4
    SLES11: gcc-4.3

    With gcc-4.3, we need a couple of workaround patches beyond the problem
    mentioned above, more configuration options are unavailable and we get
    a significant number of false-positive warnings, but it's not much worse
    than gcc-4.5 otherwise.

    These are the options I had to disable to get gcc-4.3 randconfig builds
    working:

    CONFIG_HAVE_GCC_PLUGINS
    CONFIG_CC_STACKPROTECTOR_STRONG
    CONFIG_ARM_SINGLE_ARMV7M
    CONFIG_THUMB2_KERNEL
    CONFIG_KERNEL_MODE_NEON
    CONFIG_VDSO
    CONFIG_FUNCTION_TRACER (with CONFIG_FRAME_POINTER=n)

    I have not checked in detail which version is required for
    each of the above.

    Specifically on ARM, going further makes things rather useless especially
    for build testing: with gcc-4.2, we lose support for ARMv7, EABI, and
    effectively ARMv6 (as it relies on EABI for building reliably). Also,
    the number of false-positive build warnings is so high that it is useless
    for finding actual bugs from the warnings.

    See the replies to this mail for 13 patches I needed to work around
    issues for each of the releases before 4.6. I have also submitted
    some separate patches for issues that I considered actual bugs
    uncovered by the older compilers and that should be applied regardless.

    The original gcc-4.3 release was in early 2008. If we decide to still
    support that, we probably want the first 10 quirks in this series,
    while gcc-4.6 (released in 2011) requires none of them.

    Arnd

    Arnd Bergmann (13):
    [HACK] gcc-4.5: avoid link errors for unused function pointers
    KVM: arm: fix gcc-4.5 build
    ARM: div64: fix building with gcc-4.5 and lower
    vfio-pci: use 32-bit comparisons for register address for gcc-4.5
    clk: pxa: fix gcc-4.4 build
    ARM: atomic: fix gcc-4.4 build
    watchdog: kempld: fix gcc-4.3 build
    arm/arm64: xen: avoid gcc-4.4 warning
    ARM: mark cmpxchg and xchg __always_inline for gcc-4.3
    asm-generic: mark cmpxchg as __always_inline for gcc-4.3
    fs: fix unsigned enum warning with gcc-4.2
    KVM: arm: avoid binary number literals for gcc-4.2
    ARM: avoid 'Q' asm constraint for gcc-4.1 and earlier

    arch/arm/include/asm/atomic.h | 10 ++++++++--
    arch/arm/include/asm/cmpxchg.h | 12 ++++++------
    arch/arm/include/asm/div64.h | 17 +++--------------
    arch/arm/include/asm/io.h | 8 ++++++++
    arch/arm/include/asm/kvm_mmu.h | 2 +-
    arch/arm/include/asm/percpu.h | 5 ++++-
    arch/arm/mach-imx/pm-imx5.c | 20 ++++++++++++++++----
    arch/arm/mach-sa1100/pm.c | 2 ++
    arch/arm/plat-samsung/pm.c | 4 ++++
    drivers/clk/pxa/clk-pxa.c | 3 +--
    drivers/dma/ti-dma-crossbar.c | 4 ++++
    drivers/firmware/psci_checker.c | 3 +++
    drivers/iio/adc/exynos_adc.c | 3 +++
    drivers/net/ethernet/via/via-rhine.c | 6 ++++++
    drivers/vfio/pci/vfio_pci_rdwr.c | 5 ++++-
    drivers/watchdog/kempld_wdt.c | 9 ++++++++-
    include/asm-generic/cmpxchg-local.h | 7 ++++---
    include/linux/fs.h | 2 +-
    include/xen/arm/page.h | 1 +
    virt/kvm/arm/vgic/vgic-its.c | 4 ++--
    virt/kvm/arm/vgic/vgic-mmio-v3.c | 8 ++++----
    virt/kvm/arm/vgic/vgic-mmio.c | 16 ++++++++--------
    virt/kvm/arm/vgic/vgic-mmio.h | 12 ++++++------
    23 files changed, 107 insertions(+), 56 deletions(-)

    --
    2.9.0

    \
     
     \ /
      Last update: 2016-12-16 12:00    [W:4.451 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site