1. 29 Nov, 2022 1 commit
    • Uros Bizjak's avatar
      x86/boot: Remove x86_32 PIC using %ebx workaround · 60253f10
      Uros Bizjak authored
      The currently supported minimum gcc version is 5.1. Before that, the
      PIC register, when generating Position Independent Code, was considered
      "fixed" in the sense that it wasn't in the set of registers available to
      the compiler's register allocator. Which, on x86-32, is already a very
      small set.
      
      What is more, the register allocator was unable to satisfy extended asm
      "=b" constraints. (Yes, PIC code uses %ebx on 32-bit as the base reg.)
      
      With gcc 5.1:
      
      "Reuse of the PIC hard register, instead of using a fixed register,
      was implemented on x86/x86-64 targets. This improves generated PIC
      code performance as more hard registers can be used. Shared libraries
      can significantly benefit from this optimization. Currently it is
      switched on only for x86/x86-64 targets. As RA infrastructure is already
      implemented for PIC register reuse, other targets might follow this in
      the future."
      
        (from: https://gcc.gnu.org/gcc-5/changes.html)
      
      which basically means that the register allocator has a higher degree
      of freedom when handling %ebx, including reloading it with the correct
      value before a PIC access.
      
      Furthermore:
      
        arch/x86/Makefile:
                # Never want PIC in a 32-bit kernel, prevent breakage with GCC built
                # with nonstandard options
                KBUILD_CFLAGS += -fno-pic
      
        $ gcc -Wp,-MMD,arch/x86/boot/.cpuflags.o.d ... -fno-pic ... -D__KBUILD_MODNAME=kmod_cpuflags -c -o arch/x86/boot/cpuflags.o arch/x86/boot/cpuflags.c
      
      so the 32-bit workaround in cpuid_count() is fixing exactly nothing
      because 32-bit configs don't even allow PIC builds.
      
      As to 64-bit builds: they're done using -mcmodel=kernel which produces
      RIP-relative addressing for PIC builds and thus does not apply here
      either.
      
      So get rid of the thing and make cpuid_count() nice and simple.
      
      There should be no functional changes resulting from this.
      
        [ bp: Expand commit message. ]
      Signed-off-by: default avatarUros Bizjak <ubizjak@gmail.com>
      Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
      Link: https://lore.kernel.org/r/20221104124546.196077-1-ubizjak@gmail.com
      60253f10
  2. 25 Nov, 2022 1 commit
  3. 24 Nov, 2022 11 commits
  4. 22 Nov, 2022 6 commits
  5. 21 Nov, 2022 1 commit
  6. 20 Nov, 2022 8 commits
  7. 19 Nov, 2022 8 commits
  8. 18 Nov, 2022 4 commits