• Michael Ellerman's avatar
    powerpc/vdso: Don't pass 64-bit ABI cflags to 32-bit VDSO · 107521e8
    Michael Ellerman authored
    When building the 32-bit VDSO, we are building 32-bit code as part of
    a 64-bit kernel build. That requires us to tweak the cflags to trick
    the compiler into building 32-bit code for us. The main way we do that
    is by passing -m32, but there are other options that affect code
    generation and ABI selection.
    
    In particular when building vgettimeofday.c, we end up passing
    -mcall-aixdesc because it's in KBUILD_CFLAGS, which causes the
    compiler to generate function descriptors, and dot symbols, eg:
    
      $ nm arch/powerpc/kernel/vdso32/vgettimeofday.o
      000005d0 T .__c_kernel_clock_getres
      00000024 D __c_kernel_clock_getres
      ...
    
    We get away with that at the moment because we also use the DOTSYM
    macro, and that is also incorrectly prepending a '.' in 32-bit VDSO
    code due to a separate bug.
    
    But we shouldn't be generating function descriptors for this file,
    there's no 32-bit ABI that includes function descriptors, so the
    resulting object file is some frankenstein and it's surprising that it
    even links.
    
    So filter out all the ABI-related options we add to CFLAGS for 64-bit
    builds, so that they're not used when building 32-bit code. With that
    we only see regular text symbols:
    
      $ nm arch/powerpc/kernel/vdso32/vgettimeofday.o                                                                                                                                     michael@alpine1-p1
      000005d0 T __c_kernel_clock_getres
      00000000 T __c_kernel_clock_gettime
      00000200 T __c_kernel_clock_gettime64
      00000410 T __c_kernel_gettimeofday
      00000650 T __c_kernel_time
    
    Fixes: ab037dd8 ("powerpc/vdso: Switch VDSO to generic C implementation.")
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20201218111619.1206391-2-mpe@ellerman.id.au
    107521e8
Makefile 2.54 KB