# Makefile for the linux kernel.
 #
 
-extra-y                := vmlinux.lds
+always-$(KBUILD_BUILTIN)       := vmlinux.lds
 asflags-y      := $(KBUILD_CFLAGS)
 ccflags-y      := -Wno-sign-compare
 
 
 CFLAGS_fpu.o   += -mdpfp
 endif
 
-extra-y := vmlinux.lds
+always-$(KBUILD_BUILTIN) := vmlinux.lds
 
 
 obj-$(CONFIG_GENERIC_CPU_VULNERABILITIES) += spectre.o
 
-extra-y := vmlinux.lds
+always-$(KBUILD_BUILTIN) := vmlinux.lds
 
 
 obj-y                                  += probes/
 obj-y                                  += head.o
-extra-y                                        += vmlinux.lds
+always-$(KBUILD_BUILTIN)               += vmlinux.lds
 
 ifeq ($(CONFIG_DEBUG_EFI),y)
 AFLAGS_head.o += -DVMLINUX_PATH="\"$(realpath $(objtree)/vmlinux)\""
 
 # SPDX-License-Identifier: GPL-2.0-only
-extra-y := vmlinux.lds
+always-$(KBUILD_BUILTIN) := vmlinux.lds
 
 obj-y += head.o entry.o atomic.o signal.o traps.o irq.o time.o vdso.o vdso/
 obj-y += power.o syscall.o syscall_table.o setup.o
 
 # SPDX-License-Identifier: GPL-2.0
-extra-y := vmlinux.lds
+always-$(KBUILD_BUILTIN) := vmlinux.lds
 
 obj-y += head.o
 obj-$(CONFIG_SMP) += smp.o
 
 
 OBJECT_FILES_NON_STANDARD_head.o := y
 
-extra-y                := vmlinux.lds
+always-$(KBUILD_BUILTIN)       := vmlinux.lds
 
 obj-y          += head.o cpu-probe.o cacheinfo.o env.o setup.o entry.o genex.o \
                   traps.o irq.o idle.o process.o dma.o mem.o reset.o switch.o \
 
 # Makefile for the linux kernel.
 #
 
-extra-y                        += vmlinux.lds
+always-$(KBUILD_BUILTIN)       += vmlinux.lds
 
 obj-$(CONFIG_MMU_MOTOROLA)     := head.o
 obj-$(CONFIG_SUN3)             := sun3-head.o
 
 CFLAGS_REMOVE_process.o = -pg
 endif
 
-extra-y := vmlinux.lds
+always-$(KBUILD_BUILTIN) := vmlinux.lds
 
 obj-y += head.o dma.o exceptions.o \
        hw_exception_handler.o irq.o \
 
 # Makefile for the Linux/MIPS kernel.
 #
 
-extra-y                := vmlinux.lds
+always-$(KBUILD_BUILTIN)       := vmlinux.lds
 
 obj-y          += head.o branch.o cmpxchg.o elf.o entry.o genex.o idle.o irq.o \
                   process.o prom.o ptrace.o reset.o setup.o signal.o \
 
 # Makefile for the nios2 linux kernel.
 #
 
-extra-y        += vmlinux.lds
+always-$(KBUILD_BUILTIN)       += vmlinux.lds
 
 obj-y  += head.o
 obj-y  += cpuinfo.o
 
 # Makefile for the linux kernel.
 #
 
-extra-y        := vmlinux.lds
+always-$(KBUILD_BUILTIN)       := vmlinux.lds
 
 obj-y  := head.o setup.o or32_ksyms.o process.o dma.o \
           traps.o time.o irq.o entry.o ptrace.o signal.o \
 
 # Makefile for arch/parisc/kernel
 #
 
-extra-y                := vmlinux.lds
+always-$(KBUILD_BUILTIN)               := vmlinux.lds
 
 obj-y          := head.o cache.o pacache.o setup.o pdt.o traps.o time.o irq.o \
                   syscall.o entry.o sys_parisc.o firmware.o \
 
 obj-$(CONFIG_44x)              += head_44x.o
 obj-$(CONFIG_PPC_8xx)          += head_8xx.o
 obj-$(CONFIG_PPC_85xx)         += head_85xx.o
-extra-y                                += vmlinux.lds
+always-$(KBUILD_BUILTIN)       += vmlinux.lds
 
 obj-$(CONFIG_RELOCATABLE)      += reloc_$(BITS).o
 
 
 endif
 endif
 
-extra-y += vmlinux.lds
+always-$(KBUILD_BUILTIN) += vmlinux.lds
 
 obj-y  += head.o
 obj-y  += soc.o
 
 obj-y  += smp.o text_amode31.o stacktrace.o abs_lowcore.o facility.o uv.o wti.o
 obj-y  += diag/
 
-extra-y                                += vmlinux.lds
+always-$(KBUILD_BUILTIN)       += vmlinux.lds
 
 obj-$(CONFIG_SYSFS)            += nospec-sysfs.o
 CFLAGS_REMOVE_nospec-branch.o  += $(CC_FLAGS_EXPOLINE)
 
 # Makefile for the Linux/SuperH kernel.
 #
 
-extra-y        := vmlinux.lds
+always-$(KBUILD_BUILTIN)       := vmlinux.lds
 
 ifdef CONFIG_FUNCTION_TRACER
 # Do not profile debug and lowlevel utilities
 
 # Undefine sparc when processing vmlinux.lds - it is used
 # And teach CPP we are doing $(BITS) builds (for this case)
 CPPFLAGS_vmlinux.lds := -Usparc -m$(BITS)
-extra-y              += vmlinux.lds
+always-$(KBUILD_BUILTIN) += vmlinux.lds
 
 ifdef CONFIG_FUNCTION_TRACER
 # Do not profile debug and lowlevel utilities
 
                         -DELF_ARCH=$(LDS_ELF_ARCH)     \
                         -DELF_FORMAT=$(LDS_ELF_FORMAT) \
                        $(LDS_EXTRA)
-extra-y := vmlinux.lds
+always-$(KBUILD_BUILTIN) := vmlinux.lds
 
 obj-y = config.o exec.o exitcode.o irq.o ksyms.o mem.o \
        physmem.o process.o ptrace.o reboot.o sigio.o \
 
 # Makefile for the linux kernel.
 #
 
-extra-y        += vmlinux.lds
+always-$(KBUILD_BUILTIN)       += vmlinux.lds
 
 CPPFLAGS_vmlinux.lds += -U$(UTS_MACHINE)
 
 
 # Makefile for the Linux/Xtensa kernel.
 #
 
-extra-y := vmlinux.lds
+always-$(KBUILD_BUILTIN) := vmlinux.lds
 
 obj-y := head.o align.o coprocessor.o entry.o irq.o platform.o process.o \
         ptrace.o setup.o signal.o stacktrace.o syscall.o time.o traps.o \