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
This commit is contained in:
parent
5646bbd668
commit
877cff5296
25
arch/x86/entry/vdso/vdso32/fake_32bit_build.h
Normal file
25
arch/x86/entry/vdso/vdso32/fake_32bit_build.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
#ifdef CONFIG_X86_64
|
||||||
|
|
||||||
|
/*
|
||||||
|
* in case of a 32 bit VDSO for a 64 bit kernel fake a 32 bit kernel
|
||||||
|
* configuration
|
||||||
|
*/
|
||||||
|
#undef CONFIG_64BIT
|
||||||
|
#undef CONFIG_X86_64
|
||||||
|
#undef CONFIG_COMPAT
|
||||||
|
#undef CONFIG_PGTABLE_LEVELS
|
||||||
|
#undef CONFIG_ILLEGAL_POINTER_VALUE
|
||||||
|
#undef CONFIG_SPARSEMEM_VMEMMAP
|
||||||
|
#undef CONFIG_NR_CPUS
|
||||||
|
#undef CONFIG_PARAVIRT_XXL
|
||||||
|
|
||||||
|
#define CONFIG_X86_32 1
|
||||||
|
#define CONFIG_PGTABLE_LEVELS 2
|
||||||
|
#define CONFIG_PAGE_OFFSET 0
|
||||||
|
#define CONFIG_ILLEGAL_POINTER_VALUE 0
|
||||||
|
#define CONFIG_NR_CPUS 1
|
||||||
|
|
||||||
|
#define BUILD_VDSO32_64
|
||||||
|
|
||||||
|
#endif
|
@ -1,29 +1,4 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
#define BUILD_VDSO32
|
#define BUILD_VDSO32
|
||||||
|
#include "fake_32bit_build.h"
|
||||||
#ifdef CONFIG_X86_64
|
|
||||||
|
|
||||||
/*
|
|
||||||
* in case of a 32 bit VDSO for a 64 bit kernel fake a 32 bit kernel
|
|
||||||
* configuration
|
|
||||||
*/
|
|
||||||
#undef CONFIG_64BIT
|
|
||||||
#undef CONFIG_X86_64
|
|
||||||
#undef CONFIG_COMPAT
|
|
||||||
#undef CONFIG_PGTABLE_LEVELS
|
|
||||||
#undef CONFIG_ILLEGAL_POINTER_VALUE
|
|
||||||
#undef CONFIG_SPARSEMEM_VMEMMAP
|
|
||||||
#undef CONFIG_NR_CPUS
|
|
||||||
#undef CONFIG_PARAVIRT_XXL
|
|
||||||
|
|
||||||
#define CONFIG_X86_32 1
|
|
||||||
#define CONFIG_PGTABLE_LEVELS 2
|
|
||||||
#define CONFIG_PAGE_OFFSET 0
|
|
||||||
#define CONFIG_ILLEGAL_POINTER_VALUE 0
|
|
||||||
#define CONFIG_NR_CPUS 1
|
|
||||||
|
|
||||||
#define BUILD_VDSO32_64
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "../vclock_gettime.c"
|
#include "../vclock_gettime.c"
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
|
#include "fake_32bit_build.h"
|
||||||
#include "../vgetcpu.c"
|
#include "../vgetcpu.c"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user