aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorJosh Poimboeuf <jpoimboe@redhat.com>2016-02-28 23:22:42 -0500
committerIngo Molnar <mingo@kernel.org>2016-02-29 02:35:13 -0500
commitb9ab5ebb14ec389bd80f66613f1fe3f8f65f2521 (patch)
treee7c31bac2c2bec5e8b3b2192b4f116c0204eb015 /scripts
parent442f04c34a1a467759d024a1d2c1df0f744dcb06 (diff)
objtool: Add CONFIG_STACK_VALIDATION option
Add a CONFIG_STACK_VALIDATION option which will run "objtool check" for each .o file to ensure the validity of its stack metadata. Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Andy Lutomirski <luto@kernel.org> Cc: Arnaldo Carvalho de Melo <acme@kernel.org> Cc: Bernd Petrovitsch <bernd@petrovitsch.priv.at> Cc: Borislav Petkov <bp@alien8.de> Cc: Chris J Arges <chris.j.arges@canonical.com> Cc: Jiri Slaby <jslaby@suse.cz> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Michal Marek <mmarek@suse.cz> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Pedro Alves <palves@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: live-patching@vger.kernel.org Link: http://lkml.kernel.org/r/92baab69a6bf9bc7043af0bfca9fb964a1d45546.1456719558.git.jpoimboe@redhat.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/Makefile.build39
1 files changed, 35 insertions, 4 deletions
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 2c47f9c305aa..130a452d42ee 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -241,10 +241,32 @@ cmd_record_mcount = \
241 fi; 241 fi;
242endif 242endif
243 243
244ifdef CONFIG_STACK_VALIDATION
245
246__objtool_obj := $(objtree)/tools/objtool/objtool
247
248objtool_args = check
249ifndef CONFIG_FRAME_POINTER
250objtool_args += --no-fp
251endif
252
253# 'OBJECT_FILES_NON_STANDARD := y': skip objtool checking for a directory
254# 'OBJECT_FILES_NON_STANDARD_foo.o := 'y': skip objtool checking for a file
255# 'OBJECT_FILES_NON_STANDARD_foo.o := 'n': override directory skip for a file
256cmd_objtool = $(if $(patsubst y%,, \
257 $(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \
258 $(__objtool_obj) $(objtool_args) "$(@)";)
259objtool_obj = $(if $(patsubst y%,, \
260 $(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \
261 $(__objtool_obj))
262
263endif # CONFIG_STACK_VALIDATION
264
244define rule_cc_o_c 265define rule_cc_o_c
245 $(call echo-cmd,checksrc) $(cmd_checksrc) \ 266 $(call echo-cmd,checksrc) $(cmd_checksrc) \
246 $(call echo-cmd,cc_o_c) $(cmd_cc_o_c); \ 267 $(call echo-cmd,cc_o_c) $(cmd_cc_o_c); \
247 $(cmd_modversions) \ 268 $(cmd_modversions) \
269 $(cmd_objtool) \
248 $(call echo-cmd,record_mcount) \ 270 $(call echo-cmd,record_mcount) \
249 $(cmd_record_mcount) \ 271 $(cmd_record_mcount) \
250 scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' > \ 272 scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' > \
@@ -253,14 +275,23 @@ define rule_cc_o_c
253 mv -f $(dot-target).tmp $(dot-target).cmd 275 mv -f $(dot-target).tmp $(dot-target).cmd
254endef 276endef
255 277
278define rule_as_o_S
279 $(call echo-cmd,as_o_S) $(cmd_as_o_S); \
280 $(cmd_objtool) \
281 scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,as_o_S)' > \
282 $(dot-target).tmp; \
283 rm -f $(depfile); \
284 mv -f $(dot-target).tmp $(dot-target).cmd
285endef
286
256# Built-in and composite module parts 287# Built-in and composite module parts
257$(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE 288$(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_obj) FORCE
258 $(call cmd,force_checksrc) 289 $(call cmd,force_checksrc)
259 $(call if_changed_rule,cc_o_c) 290 $(call if_changed_rule,cc_o_c)
260 291
261# Single-part modules are special since we need to mark them in $(MODVERDIR) 292# Single-part modules are special since we need to mark them in $(MODVERDIR)
262 293
263$(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE 294$(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_obj) FORCE
264 $(call cmd,force_checksrc) 295 $(call cmd,force_checksrc)
265 $(call if_changed_rule,cc_o_c) 296 $(call if_changed_rule,cc_o_c)
266 @{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod) 297 @{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod)
@@ -290,8 +321,8 @@ $(obj)/%.s: $(src)/%.S FORCE
290quiet_cmd_as_o_S = AS $(quiet_modtag) $@ 321quiet_cmd_as_o_S = AS $(quiet_modtag) $@
291cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< 322cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
292 323
293$(obj)/%.o: $(src)/%.S FORCE 324$(obj)/%.o: $(src)/%.S $(objtool_obj) FORCE
294 $(call if_changed_dep,as_o_S) 325 $(call if_changed_rule,as_o_S)
295 326
296targets += $(real-objs-y) $(real-objs-m) $(lib-y) 327targets += $(real-objs-y) $(real-objs-m) $(lib-y)
297targets += $(extra-y) $(MAKECMDGOALS) $(always) 328targets += $(extra-y) $(MAKECMDGOALS) $(always)