On Sat 17 Feb 2024 14:55:03 GMT, Masahiro Yamada wrote: > Commit 54b8ae66ae1a ("kbuild: change *FLAGS_<basetarget>.o to take the > path relative to $(obj)") changed the syntax of per-file compiler flags. > > The situation is the same for the following variables: > > OBJECT_FILES_NON_STANDARD_<basetarget>.o > GCOV_PROFILE_<basetarget>.o > KASAN_SANITIZE_<basetarget>.o > KMSAN_SANITIZE_<basetarget>.o > KMSAN_ENABLE_CHECKS_<basetarget>.o > UBSAN_SANITIZE_<basetarget>.o > KCOV_INSTRUMENT_<basetarget>.o > KCSAN_SANITIZE_<basetarget>.o > KCSAN_INSTRUMENT_BARRIERS_<basetarget>.o > > The <basetarget> is the filename of the target with its directory and > suffix stripped. > > This syntax comes into a trouble when two files with the same basename > appear in one Makefile, for example: > > obj-y += dir1/foo.o > obj-y += dir2/foo.o > OBJECT_FILES_NON_STANDARD_foo.o := y > > OBJECT_FILES_NON_STANDARD_foo.o is applied to both dir1/foo.o and > dir2/foo.o. This syntax is not flexbile enough to handle cases where > one of them is a standard object, but the other is not. > > It is more sensible to use the relative path to the Makefile, like this: > > obj-y += dir1/foo.o > OBJECT_FILES_NON_STANDARD_dir1/foo.o := y > obj-y += dir2/foo.o > OBJECT_FILES_NON_STANDARD_dir2/foo.o := y > > To maintain the current behavior, I made adjustments to two Makefiles: > > - arch/x86/entry/vdso/Makefile, which compiles vclock_gettime.o and > vdso32/vclock_gettime.o > > - arch/x86/kvm/Makefile, which compiles vmx/vmenter.o and svm/vmenter.o > > Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx> > --- > > arch/x86/entry/vdso/Makefile | 2 ++ > arch/x86/kvm/Makefile | 3 ++- > scripts/Makefile.build | 2 +- > scripts/Makefile.lib | 16 ++++++++-------- > 4 files changed, 13 insertions(+), 10 deletions(-) > > diff --git a/arch/x86/entry/vdso/Makefile b/arch/x86/entry/vdso/Makefile > index 7a97b17f28b7..148adfdb2325 100644 > --- a/arch/x86/entry/vdso/Makefile > +++ b/arch/x86/entry/vdso/Makefile > @@ -9,7 +9,9 @@ include $(srctree)/lib/vdso/Makefile > # Sanitizer runtimes are unavailable and cannot be linked here. > KASAN_SANITIZE := n > KMSAN_SANITIZE_vclock_gettime.o := n > +KMSAN_SANITIZE_vdso32/vclock_gettime.o := n > KMSAN_SANITIZE_vgetcpu.o := n > +KMSAN_SANITIZE_vdso32/vgetcpu.o := n > > UBSAN_SANITIZE := n > KCSAN_SANITIZE := n > diff --git a/arch/x86/kvm/Makefile b/arch/x86/kvm/Makefile > index 475b5fa917a6..a88bb14266b6 100644 > --- a/arch/x86/kvm/Makefile > +++ b/arch/x86/kvm/Makefile > @@ -4,7 +4,8 @@ ccflags-y += -I $(srctree)/arch/x86/kvm > ccflags-$(CONFIG_KVM_WERROR) += -Werror > > ifeq ($(CONFIG_FRAME_POINTER),y) > -OBJECT_FILES_NON_STANDARD_vmenter.o := y > +OBJECT_FILES_NON_STANDARD_vmx/vmenter.o := y > +OBJECT_FILES_NON_STANDARD_svm/vmenter.o := y > endif > > include $(srctree)/virt/kvm/Makefile.kvm > diff --git a/scripts/Makefile.build b/scripts/Makefile.build > index 4971f54c855e..256db2a0e984 100644 > --- a/scripts/Makefile.build > +++ b/scripts/Makefile.build > @@ -214,7 +214,7 @@ endif # CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT > # 'OBJECT_FILES_NON_STANDARD_foo.o := 'y': skip objtool checking for a file > # 'OBJECT_FILES_NON_STANDARD_foo.o := 'n': override directory skip for a file > > -is-standard-object = $(if $(filter-out y%, $(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n),y) > +is-standard-object = $(if $(filter-out y%, $(OBJECT_FILES_NON_STANDARD_$(target-stem).o)$(OBJECT_FILES_NON_STANDARD)n),y) > > $(obj)/%.o: objtool-enabled = $(if $(is-standard-object),$(if $(delay-objtool),$(is-single-obj-m),y)) > > diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib > index b35d39022a30..328c0d77ed48 100644 > --- a/scripts/Makefile.lib > +++ b/scripts/Makefile.lib > @@ -154,7 +154,7 @@ _cpp_flags = $(KBUILD_CPPFLAGS) $(cppflags-y) $(CPPFLAGS_$(target-stem).lds) > # > ifeq ($(CONFIG_GCOV_KERNEL),y) > _c_flags += $(if $(patsubst n%,, \ > - $(GCOV_PROFILE_$(basetarget).o)$(GCOV_PROFILE)$(CONFIG_GCOV_PROFILE_ALL)), \ > + $(GCOV_PROFILE_$(target-stem).o)$(GCOV_PROFILE)$(CONFIG_GCOV_PROFILE_ALL)), \ > $(CFLAGS_GCOV)) > endif > > @@ -165,29 +165,29 @@ endif > ifeq ($(CONFIG_KASAN),y) > ifneq ($(CONFIG_KASAN_HW_TAGS),y) > _c_flags += $(if $(patsubst n%,, \ > - $(KASAN_SANITIZE_$(basetarget).o)$(KASAN_SANITIZE)y), \ > + $(KASAN_SANITIZE_$(target-stem).o)$(KASAN_SANITIZE)y), \ > $(CFLAGS_KASAN), $(CFLAGS_KASAN_NOSANITIZE)) > endif > endif > > ifeq ($(CONFIG_KMSAN),y) > _c_flags += $(if $(patsubst n%,, \ > - $(KMSAN_SANITIZE_$(basetarget).o)$(KMSAN_SANITIZE)y), \ > + $(KMSAN_SANITIZE_$(target-stem).o)$(KMSAN_SANITIZE)y), \ > $(CFLAGS_KMSAN)) > _c_flags += $(if $(patsubst n%,, \ > - $(KMSAN_ENABLE_CHECKS_$(basetarget).o)$(KMSAN_ENABLE_CHECKS)y), \ > + $(KMSAN_ENABLE_CHECKS_$(target-stem).o)$(KMSAN_ENABLE_CHECKS)y), \ > , -mllvm -msan-disable-checks=1) > endif > > ifeq ($(CONFIG_UBSAN),y) > _c_flags += $(if $(patsubst n%,, \ > - $(UBSAN_SANITIZE_$(basetarget).o)$(UBSAN_SANITIZE)$(CONFIG_UBSAN_SANITIZE_ALL)), \ > + $(UBSAN_SANITIZE_$(target-stem).o)$(UBSAN_SANITIZE)$(CONFIG_UBSAN_SANITIZE_ALL)), \ > $(CFLAGS_UBSAN)) > endif > > ifeq ($(CONFIG_KCOV),y) > _c_flags += $(if $(patsubst n%,, \ > - $(KCOV_INSTRUMENT_$(basetarget).o)$(KCOV_INSTRUMENT)$(CONFIG_KCOV_INSTRUMENT_ALL)), \ > + $(KCOV_INSTRUMENT_$(target-stem).o)$(KCOV_INSTRUMENT)$(CONFIG_KCOV_INSTRUMENT_ALL)), \ > $(CFLAGS_KCOV)) > endif > > @@ -197,12 +197,12 @@ endif > # > ifeq ($(CONFIG_KCSAN),y) > _c_flags += $(if $(patsubst n%,, \ > - $(KCSAN_SANITIZE_$(basetarget).o)$(KCSAN_SANITIZE)y), \ > + $(KCSAN_SANITIZE_$(target-stem).o)$(KCSAN_SANITIZE)y), \ > $(CFLAGS_KCSAN)) > # Some uninstrumented files provide implied barriers required to avoid false > # positives: set KCSAN_INSTRUMENT_BARRIERS for barrier instrumentation only. > _c_flags += $(if $(patsubst n%,, \ > - $(KCSAN_INSTRUMENT_BARRIERS_$(basetarget).o)$(KCSAN_INSTRUMENT_BARRIERS)n), \ > + $(KCSAN_INSTRUMENT_BARRIERS_$(target-stem).o)$(KCSAN_INSTRUMENT_BARRIERS)n), \ > -D__KCSAN_INSTRUMENT_BARRIERS__) > endif > > -- > 2.40.1 > Looks good to me! Reviewed-by: Nicolas Schier <nicolas@xxxxxxxxx>
Attachment:
signature.asc
Description: PGP signature