Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  Makefile.vmlinux_o   Sprache: unbekannt

 
# SPDX-License-Identifier: GPL-2.0-only

PHONY := __default
__default: vmlinux.o modules.builtin.modinfo modules.builtin

include include/config/auto.conf
include $(srctree)/scripts/Kbuild.include

# for objtool
include $(srctree)/scripts/Makefile.lib

# Generate a linker script to ensure correct ordering of initcalls for Clang LTO
# ---------------------------------------------------------------------------

quiet_cmd_gen_initcalls_lds = GEN     $@
      cmd_gen_initcalls_lds = \
 $(PYTHON3) $(srctree)/scripts/jobserver-exec \
 $(PERL) $(real-prereqs) > $@

.tmp_initcalls.lds: $(srctree)/scripts/generate_initcall_order.pl \
  vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
 $(call if_changed,gen_initcalls_lds)

targets := .tmp_initcalls.lds

ifdef CONFIG_LTO_CLANG
initcalls-lds := .tmp_initcalls.lds
endif

# objtool for vmlinux.o
# ---------------------------------------------------------------------------
#
# For delay-objtool (IBT or LTO), objtool doesn't run on individual translation
# units.  Instead it runs on vmlinux.o.
#
# For !delay-objtool + CONFIG_NOINSTR_VALIDATION, it runs on both translation
# units and vmlinux.o, with the latter only used for noinstr/unret validation.

objtool-enabled := $(or $(delay-objtool),$(CONFIG_NOINSTR_VALIDATION))

ifeq ($(delay-objtool),y)
vmlinux-objtool-args-y     += $(objtool-args-y)
else
vmlinux-objtool-args-$(CONFIG_OBJTOOL_WERROR)  += --Werror
endif

vmlinux-objtool-args-$(CONFIG_NOINSTR_VALIDATION) += --noinstr \
          $(if $(or $(CONFIG_MITIGATION_UNRET_ENTRY),$(CONFIG_MITIGATION_SRSO)), --unret)

objtool-args = $(vmlinux-objtool-args-y) --link

# Link of vmlinux.o used for section mismatch analysis
# ---------------------------------------------------------------------------

vmlinux-o-ld-args-$(CONFIG_BUILTIN_MODULE_RANGES) += -Map=$@.map

quiet_cmd_ld_vmlinux.o = LD      $@
      cmd_ld_vmlinux.o = \
 $(LD) ${KBUILD_LDFLAGS} -r -o $@ \
 $(vmlinux-o-ld-args-y) \
 $(addprefix -T , $(initcalls-lds)) \
 --whole-archive vmlinux.a --no-whole-archive \
 --start-group $(KBUILD_VMLINUX_LIBS) --end-group \
 $(cmd_objtool)

define rule_ld_vmlinux.o
 $(call cmd_and_savecmd,ld_vmlinux.o)
 $(call cmd,gen_objtooldep)
endef

vmlinux.o: $(initcalls-lds) vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
 $(call if_changed_rule,ld_vmlinux.o)

targets += vmlinux.o

# modules.builtin.modinfo
# ---------------------------------------------------------------------------

# .modinfo in vmlinux.unstripped is aligned to 8 bytes for compatibility with
# tools that expect vmlinux to have sufficiently aligned sections but the
# additional bytes used for padding .modinfo to satisfy this requirement break
# certain versions of kmod with
#
#   depmod: ERROR: kmod_builtin_iter_next: unexpected string without modname prefix
#
# Strip the trailing padding bytes after extracting .modinfo to comply with
# what kmod expects to parse.
quiet_cmd_modules_builtin_modinfo = GEN     $@
      cmd_modules_builtin_modinfo = $(cmd_objcopy); \
                                    sed -i 's/\x00\+$$/\x00/g' $@

OBJCOPYFLAGS_modules.builtin.modinfo := -j .modinfo -O binary

targets += modules.builtin.modinfo
modules.builtin.modinfo: vmlinux.o FORCE
 $(call if_changed,modules_builtin_modinfo)

# modules.builtin
# ---------------------------------------------------------------------------

# The second line aids cases where multiple modules share the same object.

quiet_cmd_modules_builtin = GEN     $@
      cmd_modules_builtin = \
 tr '\0' '\n' < $< | \
 sed -n 's/^[[:alnum:]:_]*\.file=//p' | \
 tr ' ' '\n' | uniq | sed -e 's:^:kernel/:' -e 's/$$/.ko/' > $@

targets += modules.builtin
modules.builtin: modules.builtin.modinfo FORCE
 $(call if_changed,modules_builtin)

# Add FORCE to the prerequisites of a target to force it to be always rebuilt.
# ---------------------------------------------------------------------------

PHONY += FORCE
FORCE:

# Read all saved command lines and dependencies for the $(targets) we
# may be building above, using $(if_changed{,_dep}). As an
# optimization, we don't need to read them if the target does not
# exist, we will rebuild anyway in that case.

existing-targets := $(wildcard $(sort $(targets)))

-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)

.PHONY: $(PHONY)

[ Dauer der Verarbeitung: 0.7 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge