@@ -364,6 +364,7 @@ KERNEL_ELF_NAME = $(KERNEL_NAME).elf
364364KERNEL_BIN_NAME = $(KERNEL_NAME ) .bin
365365KERNEL_HEX_NAME = $(KERNEL_NAME ) .hex
366366KERNEL_STAT_NAME = $(KERNEL_NAME ) .stat
367+ PREBUILT_KERNEL = $(KERNEL_NAME ) _prebuilt.elf
367368
368369export SOC_FAMILY SOC_SERIES SOC_PATH SOC_NAME BOARD_NAME
369370export ARCH KERNEL_NAME KERNEL_ELF_NAME KERNEL_BIN_NAME KERNEL_HEX_NAME
@@ -852,13 +853,14 @@ $(KERNEL_NAME).lnk: $(zephyr-deps)
852853
853854linker.cmd : $(zephyr-deps )
854855 $(Q )$(CC ) -x assembler-with-cpp -nostdinc -undef -E -P \
855- $(LDFLAG_LINKERCMD ) $(LD_TOOLCHAIN ) -I$(srctree ) /include \
856- -I$(SOURCE_DIR ) \
857- -I$(objtree ) /include/generated $(EXTRA_LINKER_CMD_OPT ) $(KBUILD_LDS ) -o $@
856+ $(LDFLAG_LINKERCMD ) $(LD_TOOLCHAIN ) \
857+ -I$(srctree ) /include -I$(SOURCE_DIR ) \
858+ -I$(objtree ) /include/generated \
859+ $(EXTRA_LINKER_CMD_OPT ) $(KBUILD_LDS ) -o $@
858860
859- PREBUILT_KERNEL = $(KERNEL_NAME ) _prebuilt.elf
860861
861- $(PREBUILT_KERNEL ) : $(zephyr-deps ) libzephyr.a $(KBUILD_ZEPHYR_APP ) $(app-y ) linker.cmd $(KERNEL_NAME ) .lnk
862+ $(PREBUILT_KERNEL ) : $(zephyr-deps ) libzephyr.a $(KBUILD_ZEPHYR_APP ) $(app-y ) \
863+ linker.cmd $(KERNEL_NAME ) .lnk
862864 $(Q )$(CC ) -T linker.cmd @$(KERNEL_NAME ) .lnk -o $@
863865
864866ASSERT_WARNING_STR := \
@@ -878,15 +880,39 @@ WARN_ABOUT_DEPRECATION := $(if $(CONFIG_BOARD_DEPRECATED),echo -e \
878880 -n $(DEPRECATION_WARNING_STR ) ,true)
879881
880882ifeq ($(ARCH ) ,x86)
881- # X86 with its IDT has very special handling for interrupt tables
882883include $(srctree ) /arch/x86/Makefile.idt
883- else ifeq ($(CONFIG_GEN_ISR_TABLES),y)
884- # Logic for interrupt tables created by scripts/gen_isr_tables.py
884+ endif
885+
886+ ifeq ($(CONFIG_GEN_ISR_TABLES ) ,y)
885887include $(srctree ) /arch/common/Makefile.gen_isr_tables
886- else
888+ endif
889+
890+ ifneq ($(GENERATED_KERNEL_OBJECT_FILES ) ,)
891+
892+ # Identical rule to linker.cmd, but we also define preprocessor LINKER_PASS2.
893+ # For arches that place special metadata in $(PREBUILT_KERNEL) not intended
894+ # for the final binary, it can be #ifndef'd around this.
895+ linker-pass2.cmd : $(zephyr-deps )
896+ $(Q )$(CC ) -x assembler-with-cpp -nostdinc -undef -E -P \
897+ -DLINKER_PASS2 \
898+ $(LDFLAG_LINKERCMD ) $(LD_TOOLCHAIN ) \
899+ -I$(srctree ) /include -I$(SOURCE_DIR ) \
900+ -I$(objtree ) /include/generated \
901+ $(EXTRA_LINKER_CMD_OPT ) $(KBUILD_LDS ) -o $@
902+
903+ $(KERNEL_ELF_NAME ) : $(GENERATED_KERNEL_OBJECT_FILES ) linker-pass2.cmd
904+ $(Q )$(CC ) -T linker-pass2.cmd $(GENERATED_KERNEL_OBJECT_FILES ) \
905+ @$(KERNEL_NAME ) .lnk -o $@
906+ $(Q )$(srctree ) /scripts/check_link_map.py $(KERNEL_NAME ) .map
907+ @$(WARN_ABOUT_ASSERT )
908+ @$(WARN_ABOUT_DEPRECATION )
909+
910+ else # GENERATED_KERNEL_OBJECT_FILES
911+
887912# Otherwise, nothing to do, prebuilt kernel is the real one
888913$(KERNEL_ELF_NAME ) : $(PREBUILT_KERNEL )
889- @cp $(PREBUILT_KERNEL ) $(KERNEL_ELF_NAME )
914+ $(Q ) cp $(PREBUILT_KERNEL ) $(KERNEL_ELF_NAME )
915+ $(Q )$(srctree ) /scripts/check_link_map.py $(KERNEL_NAME ) .map
890916 @$(WARN_ABOUT_ASSERT )
891917 @$(WARN_ABOUT_DEPRECATION )
892918endif
@@ -1066,7 +1092,8 @@ CLEAN_DIRS += $(MODVERDIR)
10661092CLEAN_FILES += include/generated/generated_dts_board.h \
10671093 .old_version .tmp_System.map .tmp_version \
10681094 .tmp_* System.map *.lnk *.map *.elf *.lst \
1069- *.bin *.hex *.stat *.strip staticIdt.o linker.cmd
1095+ *.bin *.hex *.stat *.strip staticIdt.o linker.cmd \
1096+ linker-pass2.cmd
10701097
10711098# Directories & files removed with 'make mrproper'
10721099MRPROPER_DIRS += bin include/config usr/include include/generated \
0 commit comments