2017-02-09 09:16:29 +08:00
|
|
|
GEN_ISR_TABLE := $(srctree)/arch/common/gen_isr_tables.py
|
|
|
|
OUTPUT_SRC := isr_tables.c
|
|
|
|
OUTPUT_OBJ := isr_tables.o
|
|
|
|
|
|
|
|
ifeq ($(ARCH),arm)
|
|
|
|
OUTPUT_FORMAT := elf32-littlearm
|
|
|
|
OUTPUT_ARCH := arm
|
2017-02-10 06:37:32 +08:00
|
|
|
else ifeq ($(ARCH),nios2)
|
|
|
|
OUTPUT_FORMAT := elf32-littlenios2
|
|
|
|
OUTPUT_ARCH := nios2
|
2017-02-09 09:16:29 +08:00
|
|
|
else
|
|
|
|
$(error Output formats not defined for this architecture)
|
|
|
|
endif
|
|
|
|
|
|
|
|
GEN_ISR_TABLE_EXTRA_ARGS :=
|
|
|
|
|
|
|
|
ifeq ($(KBUILD_VERBOSE),1)
|
|
|
|
GEN_ISR_TABLE_EXTRA_ARGS += --debug
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_GEN_SW_ISR_TABLE),y)
|
|
|
|
GEN_ISR_TABLE_EXTRA_ARGS += --sw-isr-table
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_GEN_IRQ_VECTOR_TABLE),y)
|
|
|
|
GEN_ISR_TABLE_EXTRA_ARGS += --vector-table
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Rule to extract the .intList section from the $(PREBUILT_KERNEL) binary
|
|
|
|
# and create the source file $(OUTPUT_SRC). This is a C file which contains
|
|
|
|
# the interrupt tables.
|
|
|
|
quiet_cmd_gen_irq = IRQ $@
|
|
|
|
cmd_gen_irq = \
|
|
|
|
( \
|
|
|
|
$(OBJCOPY) -I $(OUTPUT_FORMAT) -O binary --only-section=.intList \
|
|
|
|
$< isrList.bin && \
|
|
|
|
$(GEN_ISR_TABLE) --output-source $@ \
|
|
|
|
--intlist isrList.bin $(GEN_ISR_TABLE_EXTRA_ARGS) \
|
|
|
|
)
|
|
|
|
|
|
|
|
$(OUTPUT_SRC): $(PREBUILT_KERNEL) $(GEN_ISR_TABLE)
|
|
|
|
$(call cmd,gen_irq)
|
|
|
|
|
|
|
|
# Build system pattern rules will handle building $(OUTPUT_OBJ) from
|
|
|
|
# $(OUTPUT_SRC), nothing we need to do here explicitly for its compilation.
|
|
|
|
|
|
|
|
# Now link the kernel again, this time with the compiled interrupt tables
|
|
|
|
# included, replacing the dummy tables defined in arch/common/isr_tables.c
|
|
|
|
#
|
|
|
|
# On x86, we just strip out the intList with objcopy -j. However this is not
|
|
|
|
# very portable; for instance on ARM this results in a zero-sized program
|
|
|
|
# header segment which produces a linker warning and gives QEMU fits.
|
|
|
|
# Set to NOLOAD instead, now that we have extracted the information we need
|
|
|
|
# from it.
|
|
|
|
quiet_cmd_lnk_elf = LINK $@
|
|
|
|
cmd_lnk_elf = \
|
|
|
|
( \
|
|
|
|
$(CC) -T linker.cmd $(OUTPUT_OBJ) @$(KERNEL_NAME).lnk \
|
|
|
|
-o elf.tmp && \
|
|
|
|
$(OBJCOPY) -I $(OUTPUT_FORMAT) -O $(OUTPUT_FORMAT) \
|
|
|
|
--set-section-flags .intList=noload \
|
|
|
|
elf.tmp $@ && \
|
|
|
|
rm -f elf.tmp; \
|
|
|
|
)
|
|
|
|
|
|
|
|
$(KERNEL_ELF_NAME): $(OUTPUT_OBJ) linker.cmd
|
|
|
|
$(call cmd,lnk_elf)
|
|
|
|
@$(srctree)/scripts/check_link_map.py $(KERNEL_NAME).map
|
|
|
|
@$(WARN_ABOUT_ASSERT)
|
|
|
|
@$(WARN_ABOUT_DEPRECATION)
|
|
|
|
|