mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 02:24:24 +02:00
This fixes several typos in the filtering of compiler flags for vdso,
discovered by Chris Mason using an AI script:
1. "-fno-PIE" was written as "fno-PIE".
2. "CC_PLUGINS_FLAGS" was written as "CC_PLUGIN_FLAGS"
To the best of my knowledge, none of these actually had any real
impact on the build at this time but they are genuine bugs which could
break things at any point in the future.
Chris's script also found that "CONFIG_X86_USER_SHADOW_STACK" was
missing "CONFIG_", but it needs a different fix.
[ dhansen: remove CONFIG_X86_USER_SHADOW_STACK munging,
add mention in changelog. ]
Closes: https://lore.kernel.org/20260116035807.2307742-1-clm@meta.com
Fixes: 693c819fed ("x86/entry/vdso: Refactor the vdso build")
Reported-by: Chris Mason <clm@meta.com>
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Link: https://patch.msgid.link/20260116204057.386268-3-hpa@zytor.com
90 lines
2.8 KiB
Makefile
90 lines
2.8 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# Building vDSO images for x86.
|
|
#
|
|
|
|
# Include the generic Makefile to check the built vDSO:
|
|
include $(srctree)/lib/vdso/Makefile.include
|
|
|
|
obj-y += $(foreach x,$(vdsos-y),vdso$(x)-image.o)
|
|
|
|
targets += $(foreach x,$(vdsos-y),vdso$(x)-image.c vdso$(x).so vdso$(x).so.dbg vdso$(x).lds)
|
|
targets += $(vobjs-y)
|
|
|
|
# vobjs-y with $(obj)/ prepended
|
|
vobjs := $(addprefix $(obj)/,$(vobjs-y))
|
|
|
|
# Options for vdso*.lds
|
|
CPPFLAGS_VDSO_LDS := -P -C -I$(src)/..
|
|
$(obj)/%.lds : KBUILD_CPPFLAGS += $(CPPFLAGS_VDSO_LDS)
|
|
|
|
#
|
|
# Options from KBUILD_[AC]FLAGS that should *NOT* be kept
|
|
#
|
|
flags-remove-y += \
|
|
-D__KERNEL__ -mcmodel=kernel -mregparm=3 \
|
|
-fno-pic -fno-PIC -fno-pie -fno-PIE \
|
|
-mfentry -pg \
|
|
$(RANDSTRUCT_CFLAGS) $(GCC_PLUGINS_CFLAGS) $(KSTACK_ERASE_CFLAGS) \
|
|
$(RETPOLINE_CFLAGS) $(CC_FLAGS_LTO) $(CC_FLAGS_CFI) \
|
|
$(PADDING_CFLAGS)
|
|
|
|
#
|
|
# Don't omit frame pointers for ease of userspace debugging, but do
|
|
# optimize sibling calls.
|
|
#
|
|
flags-y += -D__DISABLE_EXPORTS
|
|
flags-y += -DDISABLE_BRANCH_PROFILING
|
|
flags-y += -DBUILD_VDSO
|
|
flags-y += -I$(src)/.. -I$(srctree)
|
|
flags-y += -O2 -fpic
|
|
flags-y += -fno-stack-protector
|
|
flags-y += -fno-omit-frame-pointer
|
|
flags-y += -foptimize-sibling-calls
|
|
flags-y += -fasynchronous-unwind-tables
|
|
|
|
# Reset cf protections enabled by compiler default
|
|
flags-y += $(call cc-option, -fcf-protection=none)
|
|
flags-$(X86_USER_SHADOW_STACK) += $(call cc-option, -fcf-protection=return)
|
|
# When user space IBT is supported, enable this.
|
|
# flags-$(CONFIG_USER_IBT) += $(call cc-option, -fcf-protection=branch)
|
|
|
|
flags-$(CONFIG_MITIGATION_RETPOLINE) += $(RETPOLINE_VDSO_CFLAGS)
|
|
|
|
# These need to be conditional on $(vobjs) as they do not apply to
|
|
# the output vdso*-image.o files which are standard kernel objects.
|
|
$(vobjs) : KBUILD_AFLAGS := \
|
|
$(filter-out $(flags-remove-y),$(KBUILD_AFLAGS)) $(flags-y)
|
|
$(vobjs) : KBUILD_CFLAGS := \
|
|
$(filter-out $(flags-remove-y),$(KBUILD_CFLAGS)) $(flags-y)
|
|
|
|
#
|
|
# The VDSO images are built using a special linker script.
|
|
#
|
|
VDSO_LDFLAGS := -shared --hash-style=both --build-id=sha1 --no-undefined \
|
|
$(call ld-option, --eh-frame-hdr) -Bsymbolic -z noexecstack
|
|
|
|
quiet_cmd_vdso = VDSO $@
|
|
cmd_vdso = $(LD) -o $@ \
|
|
$(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$*) \
|
|
-T $(filter %.lds,$^) $(filter %.o,$^)
|
|
quiet_cmd_vdso_and_check = VDSO $@
|
|
cmd_vdso_and_check = $(cmd_vdso); $(cmd_vdso_check)
|
|
|
|
$(obj)/vdso%.so.dbg: $(obj)/vdso%.lds FORCE
|
|
$(call if_changed,vdso_and_check)
|
|
|
|
$(obj)/%.so: OBJCOPYFLAGS := -S --remove-section __ex_table
|
|
$(obj)/%.so: $(obj)/%.so.dbg FORCE
|
|
$(call if_changed,objcopy)
|
|
|
|
VDSO2C = $(objtree)/arch/x86/tools/vdso2c
|
|
|
|
quiet_cmd_vdso2c = VDSO2C $@
|
|
cmd_vdso2c = $(VDSO2C) $< $(<:%.dbg=%) $@
|
|
|
|
$(obj)/%-image.c: $(obj)/%.so.dbg $(obj)/%.so $(VDSO2C) FORCE
|
|
$(call if_changed,vdso2c)
|
|
|
|
$(obj)/%-image.o: $(obj)/%-image.c
|