|
@@ -241,10 +241,32 @@ cmd_record_mcount = \
|
|
|
fi;
|
|
|
endif
|
|
|
|
|
|
+ifdef CONFIG_STACK_VALIDATION
|
|
|
+
|
|
|
+__objtool_obj := $(objtree)/tools/objtool/objtool
|
|
|
+
|
|
|
+objtool_args = check
|
|
|
+ifndef CONFIG_FRAME_POINTER
|
|
|
+objtool_args += --no-fp
|
|
|
+endif
|
|
|
+
|
|
|
+# 'OBJECT_FILES_NON_STANDARD := y': skip objtool checking for a directory
|
|
|
+# 'OBJECT_FILES_NON_STANDARD_foo.o := 'y': skip objtool checking for a file
|
|
|
+# 'OBJECT_FILES_NON_STANDARD_foo.o := 'n': override directory skip for a file
|
|
|
+cmd_objtool = $(if $(patsubst y%,, \
|
|
|
+ $(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \
|
|
|
+ $(__objtool_obj) $(objtool_args) "$(@)";)
|
|
|
+objtool_obj = $(if $(patsubst y%,, \
|
|
|
+ $(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \
|
|
|
+ $(__objtool_obj))
|
|
|
+
|
|
|
+endif # CONFIG_STACK_VALIDATION
|
|
|
+
|
|
|
define rule_cc_o_c
|
|
|
$(call echo-cmd,checksrc) $(cmd_checksrc) \
|
|
|
$(call echo-cmd,cc_o_c) $(cmd_cc_o_c); \
|
|
|
$(cmd_modversions) \
|
|
|
+ $(cmd_objtool) \
|
|
|
$(call echo-cmd,record_mcount) \
|
|
|
$(cmd_record_mcount) \
|
|
|
scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' > \
|
|
@@ -253,14 +275,23 @@ define rule_cc_o_c
|
|
|
mv -f $(dot-target).tmp $(dot-target).cmd
|
|
|
endef
|
|
|
|
|
|
+define rule_as_o_S
|
|
|
+ $(call echo-cmd,as_o_S) $(cmd_as_o_S); \
|
|
|
+ $(cmd_objtool) \
|
|
|
+ scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,as_o_S)' > \
|
|
|
+ $(dot-target).tmp; \
|
|
|
+ rm -f $(depfile); \
|
|
|
+ mv -f $(dot-target).tmp $(dot-target).cmd
|
|
|
+endef
|
|
|
+
|
|
|
# Built-in and composite module parts
|
|
|
-$(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE
|
|
|
+$(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_obj) FORCE
|
|
|
$(call cmd,force_checksrc)
|
|
|
$(call if_changed_rule,cc_o_c)
|
|
|
|
|
|
# Single-part modules are special since we need to mark them in $(MODVERDIR)
|
|
|
|
|
|
-$(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE
|
|
|
+$(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_obj) FORCE
|
|
|
$(call cmd,force_checksrc)
|
|
|
$(call if_changed_rule,cc_o_c)
|
|
|
@{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod)
|
|
@@ -290,8 +321,8 @@ $(obj)/%.s: $(src)/%.S FORCE
|
|
|
quiet_cmd_as_o_S = AS $(quiet_modtag) $@
|
|
|
cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
|
|
|
|
|
|
-$(obj)/%.o: $(src)/%.S FORCE
|
|
|
- $(call if_changed_dep,as_o_S)
|
|
|
+$(obj)/%.o: $(src)/%.S $(objtool_obj) FORCE
|
|
|
+ $(call if_changed_rule,as_o_S)
|
|
|
|
|
|
targets += $(real-objs-y) $(real-objs-m) $(lib-y)
|
|
|
targets += $(extra-y) $(MAKECMDGOALS) $(always)
|