OSDN Git Service

x86/vdso: Fake 32bit VDSO build on 64bit compile for vgetcpu
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Tue, 7 Feb 2023 10:46:33 +0000 (11:46 +0100)
committerBorislav Petkov (AMD) <bp@alien8.de>
Tue, 7 Feb 2023 17:20:41 +0000 (18:20 +0100)
commit877cff5296faa6ef312f8002216bbf73bea006c7
treeeea8bdb0d80b396f147f917dbabc3e6e2b5ca1c7
parent5646bbd6684acf5c9b9dedb863b7d2f6f5a330fb
x86/vdso: Fake 32bit VDSO build on 64bit compile for vgetcpu

The 64bit register constrains in __arch_hweight64() cannot be
fulfilled in a 32-bit build. The function is only declared but not used
within vclock_gettime.c and gcc does not care. LLVM complains and
aborts. Reportedly because it validates extended asm even if latter
would get compiled out, see

  https://lore.kernel.org/r/Y%2BJ%2BUQ1vAKr6RHuH@dev-arch.thelio-3990X

i.e., a long standing design difference between gcc and LLVM.

Move the "fake a 32 bit kernel configuration" bits from vclock_gettime.c
into a common header file. Use this from vclock_gettime.c and vgetcpu.c.

  [ bp: Add background info from Nathan. ]

Fixes: 92d33063c081a ("x86/vdso: Provide getcpu for x86-32.")
Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/r/Y+IsCWQdXEr8d9Vy@linutronix.de
arch/x86/entry/vdso/vdso32/fake_32bit_build.h [new file with mode: 0644]
arch/x86/entry/vdso/vdso32/vclock_gettime.c
arch/x86/entry/vdso/vdso32/vgetcpu.c