Skip to content
  • Daniel Borkmann's avatar
    x86/retpolines: Disable switch jump tables when retpolines are enabled · a9d57ef1
    Daniel Borkmann authored
    Commit ce02ef06 ("x86, retpolines: Raise limit for generating indirect
    calls from switch-case") raised the limit under retpolines to 20 switch
    cases where gcc would only then start to emit jump tables, and therefore
    effectively disabling the emission of slow indirect calls in this area.
    
    After this has been brought to attention to gcc folks [0], Martin Liska
    has then fixed gcc to align with clang by avoiding to generate switch jump
    tables entirely under retpolines. This is taking effect in gcc starting
    from stable version 8.4.0. Given kernel supports compilation with older
    versions of gcc where the fix is not being available or backported anymore,
    we need to keep the extra KBUILD_CFLAGS around for some time and generally
    set the -fno-jump-tables to align with what more recent gcc is doing
    automatically today.
    
    More than 20 switch cases are not expected to be fast-path critical, but
    it would still be good to align with gcc behavior for versions < 8.4.0 in
    order to have consistency across supported gcc versions. vmlinux size is
    slightly growing by 0.27% for older gcc. This flag is only set to work
    around affected gcc, no change for clang.
    
      [0] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86952
    
    
    
    Suggested-by: default avatarMartin Liska <mliska@suse.cz>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: David Woodhouse <dwmw2@infradead.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Jesper Dangaard Brouer <brouer@redhat.com>
    Cc: Björn Töpel<bjorn.topel@intel.com>
    Cc: Magnus Karlsson <magnus.karlsson@intel.com>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: H.J. Lu <hjl.tools@gmail.com>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: David S. Miller <davem@davemloft.net>
    Link: https://lkml.kernel.org/r/20190325135620.14882-1-daniel@iogearbox.net
    a9d57ef1