11f09fc53SJerome Forissierlink-out-dir = $(out-dir)/core 21f09fc53SJerome Forissier 35cc9ca58SMarouene Boubakrilink-script-dummy = $(arch-dir)/kernel/link_dummy.ld 46afb8533SAndrew F. Davislink-script = $(if $(wildcard $(platform-dir)/kern.ld.S), \ 56afb8533SAndrew F. Davis $(platform-dir)/kern.ld.S, \ 65cc9ca58SMarouene Boubakri $(arch-dir)/kernel/kern.ld.S) 71f09fc53SJerome Forissierlink-script-pp = $(link-out-dir)/kern.ld 81f09fc53SJerome Forissierlink-script-dep = $(link-out-dir)/.kern.ld.d 91f09fc53SJerome Forissier 101f09fc53SJerome ForissierAWK = awk 111f09fc53SJerome Forissier 122f4d97e7SJerome Forissierlink-ldflags-common += $(call ld-option,--no-warn-rwx-segments) 132f4d97e7SJerome Forissierifeq ($(CFG_ARM32_core),y) 142f4d97e7SJerome Forissierlink-ldflags-common += $(call ld-option,--no-warn-execstack) 152f4d97e7SJerome Forissierendif 162f4d97e7SJerome Forissier 171f09fc53SJerome Forissierlink-ldflags = $(LDFLAGS) 180d928692SJens Wiklanderifeq ($(call cfg-one-enabled, CFG_CORE_ASLR CFG_CORE_PHYS_RELOCATABLE),y) 19f1fee325SJerome Forissierlink-ldflags += -pie -Bsymbolic -z norelro $(ldflag-apply-dynamic-relocs) 20f1fee325SJerome Forissierifeq ($(CFG_ARM64_core),y) 21f1fee325SJerome Forissierlink-ldflags += -z text 22f1fee325SJerome Forissierelse 23f1fee325SJerome Forissier# Suppression of relocations in read-only segments has not been done yet 24f1fee325SJerome Forissierlink-ldflags += -z notext 25f1fee325SJerome Forissierendif 26170e9084SJens Wiklanderendif 2748685b6cSJerome Forissierifeq ($(CFG_CORE_BTI),y) 2848685b6cSJerome Forissier# force-bti tells the linker to warn if some object files lack the .note.gnu.property 2948685b6cSJerome Forissier# section with the BTI flag, and to turn on the BTI flag in the output anyway. The 3048685b6cSJerome Forissier# resulting executable would likely fail at runtime so we use this flag along 3148685b6cSJerome Forissier# with the --fatal-warnings below to check and prevent this situation (with useful 3248685b6cSJerome Forissier# diagnostics). 3348685b6cSJerome Forissierlink-ldflags += $(call ld-option,-z force-bti) --fatal-warnings 3448685b6cSJerome Forissierendif 351f09fc53SJerome Forissierlink-ldflags += -T $(link-script-pp) -Map=$(link-out-dir)/tee.map 361f09fc53SJerome Forissierlink-ldflags += --sort-section=alignment 371f09fc53SJerome Forissierlink-ldflags += --fatal-warnings 3849d0f60dSJens Wiklanderlink-ldflags += --gc-sections 392f4d97e7SJerome Forissierlink-ldflags += $(link-ldflags-common) 401f09fc53SJerome Forissier 411f09fc53SJerome Forissierlink-ldadd = $(LDADD) 4260c2d1dfSJorge Ramirez-Ortizlink-ldadd += $(ldflags-external) 432b39fbe0SJens Wiklanderlink-ldadd += $(libdeps) 4466f79941SJens Wiklanderlink-objs := $(filter-out \ 4561487fe8SEtienne Carriere $(out-dir)/$(platform-dir)/link_dummies_paged.o \ 4661487fe8SEtienne Carriere $(out-dir)/$(platform-dir)/link_dummies_init.o \ 475cc9ca58SMarouene Boubakri $(out-dir)/$(arch-dir)/kernel/link_dummies_paged.o \ 485cc9ca58SMarouene Boubakri $(out-dir)/$(arch-dir)/kernel/link_dummies_init.o, \ 4966f79941SJens Wiklander $(objs)) 5066f79941SJens Wiklanderlink-objs-init := $(filter-out \ 5161487fe8SEtienne Carriere $(out-dir)/$(platform-dir)/link_dummies_init.o \ 525cc9ca58SMarouene Boubakri $(out-dir)/$(arch-dir)/kernel/link_dummies_init.o, \ 5395e4998aSJens Wiklander $(objs)) 5495e4998aSJens Wiklanderldargs-tee.elf := $(link-ldflags) $(link-objs) $(link-out-dir)/version.o \ 5545fecab0SJens Wiklander $(link-ldadd) 561f09fc53SJerome Forissier 57df7712baSJens Wiklanderlink-script-cppflags := \ 581f09fc53SJerome Forissier $(filter-out $(CPPFLAGS_REMOVE) $(cppflags-remove), \ 591f09fc53SJerome Forissier $(nostdinccore) $(CPPFLAGS) \ 601f09fc53SJerome Forissier $(addprefix -I,$(incdirscore) $(link-out-dir)) \ 611f09fc53SJerome Forissier $(cppflagscore)) 621f09fc53SJerome Forissier 635976a0a5SJens Wiklanderldargs-all_objs := -T $(link-script-dummy) --no-check-sections \ 642f4d97e7SJerome Forissier $(link-ldflags-common) \ 65*f3434bd3SJens Wiklander $(link-objs) $(link-ldadd) 669fa130bfSJens Wiklandercleanfiles += $(link-out-dir)/all_objs.o 679fa130bfSJens Wiklander$(link-out-dir)/all_objs.o: $(objs) $(libdeps) $(MAKEFILE_LIST) 689fa130bfSJens Wiklander @$(cmd-echo-silent) ' LD $@' 699fa130bfSJens Wiklander $(q)$(LDcore) $(ldargs-all_objs) -o $@ 709fa130bfSJens Wiklander 719fa130bfSJens Wiklandercleanfiles += $(link-out-dir)/unpaged_entries.txt 729fa130bfSJens Wiklander$(link-out-dir)/unpaged_entries.txt: $(link-out-dir)/all_objs.o 739fa130bfSJens Wiklander @$(cmd-echo-silent) ' GEN $@' 749fa130bfSJens Wiklander $(q)$(NMcore) $< | \ 759fa130bfSJens Wiklander $(AWK) '/ ____keep_pager/ { printf "-u%s ", $$3 }' > $@ 769fa130bfSJens Wiklander 770b8a917fSJerome Forissierunpaged-ldargs := -T $(link-script-dummy) --no-check-sections --gc-sections \ 782f4d97e7SJerome Forissier $(link-ldflags-common) 79*f3434bd3SJens Wiklanderunpaged-ldadd := $(objs) $(link-ldadd) 801f09fc53SJerome Forissiercleanfiles += $(link-out-dir)/unpaged.o 819fa130bfSJens Wiklander$(link-out-dir)/unpaged.o: $(link-out-dir)/unpaged_entries.txt 8262428631SJens Wiklander @$(cmd-echo-silent) ' LD $@' 8395e4998aSJens Wiklander $(q)$(LDcore) $(unpaged-ldargs) \ 849fa130bfSJens Wiklander `cat $(link-out-dir)/unpaged_entries.txt` \ 8595e4998aSJens Wiklander $(unpaged-ldadd) -o $@ 861f09fc53SJerome Forissier 879ac870c9SJerome Forissiercleanfiles += $(link-out-dir)/text_unpaged.ld.S 881f09fc53SJerome Forissier$(link-out-dir)/text_unpaged.ld.S: $(link-out-dir)/unpaged.o 8962428631SJens Wiklander @$(cmd-echo-silent) ' GEN $@' 905976a0a5SJens Wiklander $(q)$(READELFcore) -S -W $< | \ 91b4faf480SDick Olsson $(PYTHON3) ./scripts/gen_ld_sects.py .text. > $@ 921f09fc53SJerome Forissier 939ac870c9SJerome Forissiercleanfiles += $(link-out-dir)/rodata_unpaged.ld.S 941f09fc53SJerome Forissier$(link-out-dir)/rodata_unpaged.ld.S: $(link-out-dir)/unpaged.o 9562428631SJens Wiklander @$(cmd-echo-silent) ' GEN $@' 965976a0a5SJens Wiklander $(q)$(READELFcore) -S -W $< | \ 97b4faf480SDick Olsson $(PYTHON3) ./scripts/gen_ld_sects.py .rodata. > $@ 981f09fc53SJerome Forissier 999fa130bfSJens Wiklander 1009fa130bfSJens Wiklandercleanfiles += $(link-out-dir)/init_entries.txt 1019fa130bfSJens Wiklander$(link-out-dir)/init_entries.txt: $(link-out-dir)/all_objs.o 1029fa130bfSJens Wiklander @$(cmd-echo-silent) ' GEN $@' 1039fa130bfSJens Wiklander $(q)$(NMcore) $< | \ 1049fa130bfSJens Wiklander $(AWK) '/ ____keep_init/ { printf "-u%s ", $$3 }' > $@ 1059fa130bfSJens Wiklander 1060b8a917fSJerome Forissierinit-ldargs := -T $(link-script-dummy) --no-check-sections --gc-sections \ 1072f4d97e7SJerome Forissier $(link-ldflags-common) 108*f3434bd3SJens Wiklanderinit-ldadd := $(link-objs-init) $(link-out-dir)/version.o $(link-ldadd) 1091f09fc53SJerome Forissiercleanfiles += $(link-out-dir)/init.o 1109fa130bfSJens Wiklander$(link-out-dir)/init.o: $(link-out-dir)/init_entries.txt 111780f2a6aSJerome Forissier $(call gen-version-o) 11262428631SJens Wiklander @$(cmd-echo-silent) ' LD $@' 11395e4998aSJens Wiklander $(q)$(LDcore) $(init-ldargs) \ 1149fa130bfSJens Wiklander `cat $(link-out-dir)/init_entries.txt` \ 11595e4998aSJens Wiklander $(init-ldadd) -o $@ 1161f09fc53SJerome Forissier 1179ac870c9SJerome Forissiercleanfiles += $(link-out-dir)/text_init.ld.S 1181f09fc53SJerome Forissier$(link-out-dir)/text_init.ld.S: $(link-out-dir)/init.o 11962428631SJens Wiklander @$(cmd-echo-silent) ' GEN $@' 1205976a0a5SJens Wiklander $(q)$(READELFcore) -S -W $< | \ 121b4faf480SDick Olsson $(PYTHON3) ./scripts/gen_ld_sects.py .text. > $@ 1221f09fc53SJerome Forissier 1239ac870c9SJerome Forissiercleanfiles += $(link-out-dir)/rodata_init.ld.S 1241f09fc53SJerome Forissier$(link-out-dir)/rodata_init.ld.S: $(link-out-dir)/init.o 12562428631SJens Wiklander @$(cmd-echo-silent) ' GEN $@' 126b4faf480SDick Olsson $(q)$(READELFcore) -S -W $< | $(PYTHON3) ./scripts/gen_ld_sects.py .rodata. > $@ 1271f09fc53SJerome Forissier 1281f09fc53SJerome Forissier-include $(link-script-dep) 1291f09fc53SJerome Forissier 1301f09fc53SJerome Forissierlink-script-extra-deps += $(link-out-dir)/text_unpaged.ld.S 1311f09fc53SJerome Forissierlink-script-extra-deps += $(link-out-dir)/rodata_unpaged.ld.S 1321f09fc53SJerome Forissierlink-script-extra-deps += $(link-out-dir)/text_init.ld.S 1331f09fc53SJerome Forissierlink-script-extra-deps += $(link-out-dir)/rodata_init.ld.S 1341f09fc53SJerome Forissierlink-script-extra-deps += $(conf-file) 1351f09fc53SJerome Forissiercleanfiles += $(link-script-pp) $(link-script-dep) 1361f09fc53SJerome Forissier$(link-script-pp): $(link-script) $(link-script-extra-deps) 13762428631SJens Wiklander @$(cmd-echo-silent) ' CPP $@' 1381f09fc53SJerome Forissier @mkdir -p $(dir $@) 1390ae5ef34SThomas Bourgoin $(q)$(CPPcore) -P -MT $@ -MD -MP -MF $(link-script-dep) \ 1402f6dffbdSJerome Forissier $(link-script-cppflags) $< -o $@ 1411f09fc53SJerome Forissier 142fd1bdc6bSJerome Forissier$(link-out-dir)/version.o: 143fd1bdc6bSJerome Forissier $(call gen-version-o) 144fd1bdc6bSJerome Forissier 145bdc1a182SJerome Forissier-include $(link-out-dir)/.tee.elf.cmd 146bdc1a182SJerome Forissierdefine check-link-objs 147bdc1a182SJerome Forissier$(if $(strip $(filter-out $(link-objs), $(old-link-objs)) 148bdc1a182SJerome Forissier $(filter-out $(old-link-objs), $(link-objs))), FORCE_LINK := FORCE) 149bdc1a182SJerome Forissierendef 150bdc1a182SJerome Forissier$(eval $(call check-link-objs)) 15195e4998aSJens Wiklander 1521f09fc53SJerome Forissierall: $(link-out-dir)/tee.elf 1531f09fc53SJerome Forissiercleanfiles += $(link-out-dir)/tee.elf $(link-out-dir)/tee.map 154fd1bdc6bSJerome Forissiercleanfiles += $(link-out-dir)/version.o 155fd1bdc6bSJerome Forissiercleanfiles += $(link-out-dir)/.buildcount 156bdc1a182SJerome Forissiercleanfiles += $(link-out-dir)/.tee.elf.cmd 157bdc1a182SJerome Forissier$(link-out-dir)/tee.elf: $(link-objs) $(libdeps) $(link-script-pp) $(FORCE_LINK) 158bdc1a182SJerome Forissier @echo "old-link-objs := $(link-objs)" >$(link-out-dir)/.tee.elf.cmd 15962428631SJens Wiklander @$(cmd-echo-silent) ' LD $@' 1601f09fc53SJerome Forissier $(q)$(LDcore) $(ldargs-tee.elf) -o $@ 1611f09fc53SJerome Forissier 1621f09fc53SJerome Forissierall: $(link-out-dir)/tee.dmp 1631f09fc53SJerome Forissiercleanfiles += $(link-out-dir)/tee.dmp 1641f09fc53SJerome Forissier$(link-out-dir)/tee.dmp: $(link-out-dir)/tee.elf 16562428631SJens Wiklander @$(cmd-echo-silent) ' OBJDUMP $@' 1661f09fc53SJerome Forissier $(q)$(OBJDUMPcore) -l -x -d $< > $@ 1671f09fc53SJerome Forissier 1681f09fc53SJerome Forissiercleanfiles += $(link-out-dir)/tee-pager.bin 1691a9edabcSJens Wiklander$(link-out-dir)/tee-pager.bin: $(link-out-dir)/tee.elf scripts/gen_tee_bin.py 170b526f8f7SJens Wiklander @echo Warning: $@ is deprecated 1711a9edabcSJens Wiklander @$(cmd-echo-silent) ' GEN $@' 172b4faf480SDick Olsson $(q)$(PYTHON3) scripts/gen_tee_bin.py --input $< --out_tee_pager_bin $@ 1731f09fc53SJerome Forissier 1741f09fc53SJerome Forissiercleanfiles += $(link-out-dir)/tee-pageable.bin 1751a9edabcSJens Wiklander$(link-out-dir)/tee-pageable.bin: $(link-out-dir)/tee.elf scripts/gen_tee_bin.py 176b526f8f7SJens Wiklander @echo Warning: $@ is deprecated 1772e286522Syanyan-wrs @$(cmd-echo-silent) ' GEN $@' 178b4faf480SDick Olsson $(q)$(PYTHON3) scripts/gen_tee_bin.py --input $< --out_tee_pageable_bin $@ 1791f09fc53SJerome Forissier 180c2c16e87SAndrew F. Davisall: $(link-out-dir)/tee.bin 181ac3cc6cfSSummer Qincleanfiles += $(link-out-dir)/tee.bin 1821a9edabcSJens Wiklander$(link-out-dir)/tee.bin: $(link-out-dir)/tee.elf scripts/gen_tee_bin.py 1831a9edabcSJens Wiklander @$(cmd-echo-silent) ' GEN $@' 184b4faf480SDick Olsson $(q)$(PYTHON3) scripts/gen_tee_bin.py --input $< --out_tee_bin $@ 185ac3cc6cfSSummer Qin 186ac3cc6cfSSummer Qinall: $(link-out-dir)/tee-header_v2.bin 187ac3cc6cfSSummer Qincleanfiles += $(link-out-dir)/tee-header_v2.bin 1881a9edabcSJens Wiklander$(link-out-dir)/tee-header_v2.bin: $(link-out-dir)/tee.elf \ 1891a9edabcSJens Wiklander scripts/gen_tee_bin.py 1901a9edabcSJens Wiklander @$(cmd-echo-silent) ' GEN $@' 191b4faf480SDick Olsson $(q)$(PYTHON3) scripts/gen_tee_bin.py --input $< --out_header_v2 $@ 192ac3cc6cfSSummer Qin 193ac3cc6cfSSummer Qinall: $(link-out-dir)/tee-pager_v2.bin 194ac3cc6cfSSummer Qincleanfiles += $(link-out-dir)/tee-pager_v2.bin 1951a9edabcSJens Wiklander$(link-out-dir)/tee-pager_v2.bin: $(link-out-dir)/tee.elf scripts/gen_tee_bin.py 1961a9edabcSJens Wiklander @$(cmd-echo-silent) ' GEN $@' 197b4faf480SDick Olsson $(q)$(PYTHON3) scripts/gen_tee_bin.py --input $< --out_pager_v2 $@ 198ac3cc6cfSSummer Qin 199ac3cc6cfSSummer Qinall: $(link-out-dir)/tee-pageable_v2.bin 200ac3cc6cfSSummer Qincleanfiles += $(link-out-dir)/tee-pageable_v2.bin 2011a9edabcSJens Wiklander$(link-out-dir)/tee-pageable_v2.bin: $(link-out-dir)/tee.elf \ 2021a9edabcSJens Wiklander scripts/gen_tee_bin.py 2031a9edabcSJens Wiklander @$(cmd-echo-silent) ' GEN $@' 204b4faf480SDick Olsson $(q)$(PYTHON3) scripts/gen_tee_bin.py --input $< --out_pageable_v2 $@ 2051f09fc53SJerome Forissier 2061f09fc53SJerome Forissierall: $(link-out-dir)/tee.symb_sizes 2071f09fc53SJerome Forissiercleanfiles += $(link-out-dir)/tee.symb_sizes 2081f09fc53SJerome Forissier$(link-out-dir)/tee.symb_sizes: $(link-out-dir)/tee.elf 20962428631SJens Wiklander @$(cmd-echo-silent) ' GEN $@' 2101f09fc53SJerome Forissier $(q)$(NMcore) --print-size --reverse-sort --size-sort $< > $@ 2111f09fc53SJerome Forissier 2121f09fc53SJerome Forissiercleanfiles += $(link-out-dir)/tee.mem_usage 2131f09fc53SJerome Forissierifneq ($(filter mem_usage,$(MAKECMDGOALS)),) 2141f09fc53SJerome Forissiermem_usage: $(link-out-dir)/tee.mem_usage 2151f09fc53SJerome Forissier 2161f09fc53SJerome Forissier$(link-out-dir)/tee.mem_usage: $(link-out-dir)/tee.elf 21762428631SJens Wiklander @$(cmd-echo-silent) ' GEN $@' 218b4faf480SDick Olsson $(q)$(PYTHON3) ./scripts/mem_usage.py $< > $@ 2191f09fc53SJerome Forissierendif 2205ae0290fSLad Prabhakar 221376cb124SJens Wiklanderall: $(link-out-dir)/tee-raw.bin 2225ae0290fSLad Prabhakarcleanfiles += $(link-out-dir)/tee-raw.bin 2235ae0290fSLad Prabhakar$(link-out-dir)/tee-raw.bin: $(link-out-dir)/tee.elf scripts/gen_tee_bin.py 2245ae0290fSLad Prabhakar @$(cmd-echo-silent) ' GEN $@' 2255ae0290fSLad Prabhakar $(q)scripts/gen_tee_bin.py --input $< --out_tee_raw_bin $@ 2265ae0290fSLad Prabhakar 2275ae0290fSLad Prabhakarcleanfiles += $(link-out-dir)/tee.srec 2285ae0290fSLad Prabhakar$(link-out-dir)/tee.srec: $(link-out-dir)/tee-raw.bin 2295ae0290fSLad Prabhakar @$(cmd-echo-silent) ' SREC $@' 2307b701d1bSVolodymyr Babchuk $(q)$(OBJCOPYcore) -I binary -O srec $(SRECFLAGS) $< $@ 231