^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) # SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) # Makefile for the Linux/Xtensa kernel.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) extra-y := head.o vmlinux.lds
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) obj-y := align.o coprocessor.o entry.o irq.o platform.o process.o \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) ptrace.o setup.o signal.o stacktrace.o syscall.o time.o traps.o \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) vectors.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) obj-$(CONFIG_MMU) += pci-dma.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) obj-$(CONFIG_PCI) += pci.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) obj-$(CONFIG_MODULES) += xtensa_ksyms.o module.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) obj-$(CONFIG_FUNCTION_TRACER) += mcount.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) obj-$(CONFIG_SMP) += smp.o mxhead.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) obj-$(CONFIG_XTENSA_VARIANT_HAVE_PERF_EVENTS) += perf_event.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) obj-$(CONFIG_S32C1I_SELFTEST) += s32c1i_selftest.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) obj-$(CONFIG_JUMP_LABEL) += jump_label.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) # In the Xtensa architecture, assembly generates literals which must always
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) # precede the L32R instruction with a relative offset less than 256 kB.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) # Therefore, the .text and .literal section must be combined in parenthesis
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) # in the linker script, such as: *(.literal .text).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) # We need to post-process the generated vmlinux.lds scripts to convert
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) # *(xxx.text) to *(xxx.literal xxx.text) for the following text sections:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) # .text .ref.text .*init.text .*exit.text .text.*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) # Replicate rules in scripts/Makefile.build
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) sed-y = -e ':a; s/\*(\([^)]*\)\.text\.unlikely/*(\1.literal.unlikely .{text}.unlikely/; ta; ' \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) -e ':b; s/\*(\([^)]*\)\.text\(\.[a-z]*\)/*(\1.{text}\2.literal .{text}\2/; tb; ' \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) -e ':c; s/\*(\([^)]*\)\(\.[a-z]*it\|\.ref\)\.text/*(\1\2.literal \2.{text}/; tc; ' \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) -e ':d; s/\*(\([^)]\+ \|\)\.text/*(\1.literal .{text}/; td; ' \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) -e 's/\.{text}/.text/g'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) quiet_cmd__cpp_lds_S = LDS $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) cmd__cpp_lds_S = $(CPP) $(cpp_flags) -P -C -Uxtensa -D__ASSEMBLY__ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) -DLINKER_SCRIPT $< | sed $(sed-y) >$@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) $(obj)/vmlinux.lds: $(src)/vmlinux.lds.S FORCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) $(call if_changed_dep,_cpp_lds_S)