History

x86/unwind: Add the ORC unwinder

Add the new ORC unwinder which is enabled by CONFIG_ORC_UNWINDER=y. It plugs into the existing x86 unwinder framework. It relies on objtool to generate the needed .orc_unwind and .orc_unwind_ip sections. For more details on why ORC is used instead of DWARF, see Documentation/x86/orc-unwinder.txt - but the short version is that it's a simplified, fundamentally more robust debugninfo data structure, which also allows up to two orders of magnitude faster lookups than the DWARF unwinder - which matters to profiling workloads like perf. Thanks to Andy Lutomirski for the performance improvement ideas: splitting the ORC unwind table into two parallel arrays and creating a fast lookup table to search a subset of the unwind table.

Josh Poimboeuf committed 9 years ago

Commit ee9f8fc1 parent 1ee6f0018 files · +977 −64Browse files

Showing the changes to scripts (1 of 18 files). Show all

Unified · Split

scripts/Makefile.build+10−4
@@ -258,7 +258,8 @@ ifneq ($(SKIP_STACK_VALIDATION),1) · 257 unmodified lines
258 258
259__objtool_obj := $(objtree)/tools/objtool/objtool259__objtool_obj := $(objtree)/tools/objtool/objtool
260 260
261objtool_args = check261objtool_args = $(if $(CONFIG_ORC_UNWINDER),orc generate,check)
262
262ifndef CONFIG_FRAME_POINTER263ifndef CONFIG_FRAME_POINTER
263objtool_args += --no-fp264objtool_args += --no-fp
264endif265endif
@@ -279,6 +280,11 @@ objtool_obj = $(if $(patsubst y%,, \ · 14 unmodified lines
279endif # SKIP_STACK_VALIDATION280endif # SKIP_STACK_VALIDATION
280endif # CONFIG_STACK_VALIDATION281endif # CONFIG_STACK_VALIDATION
281 282
283# Rebuild all objects when objtool changes, or is enabled/disabled.
284objtool_dep = $(objtool_obj) \
285 $(wildcard include/config/orc/unwinder.h \
286 include/config/stack/validation.h)
287
282define rule_cc_o_c288define rule_cc_o_c
283 $(call echo-cmd,checksrc) $(cmd_checksrc) \289 $(call echo-cmd,checksrc) $(cmd_checksrc) \
284 $(call cmd_and_fixdep,cc_o_c) \290 $(call cmd_and_fixdep,cc_o_c) \
@@ -301,13 +307,13 @@ cmd_undef_syms = echo · 16 unmodified lines
301endif307endif
302 308
303# Built-in and composite module parts309# Built-in and composite module parts
304$(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_obj) FORCE310$(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE
305 $(call cmd,force_checksrc)311 $(call cmd,force_checksrc)
306 $(call if_changed_rule,cc_o_c)312 $(call if_changed_rule,cc_o_c)
307 313
308# Single-part modules are special since we need to mark them in $(MODVERDIR)314# Single-part modules are special since we need to mark them in $(MODVERDIR)
309 315
310$(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_obj) FORCE316$(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE
311 $(call cmd,force_checksrc)317 $(call cmd,force_checksrc)
312 $(call if_changed_rule,cc_o_c)318 $(call if_changed_rule,cc_o_c)
313 @{ echo $(@:.o=.ko); echo $@; \319 @{ echo $(@:.o=.ko); echo $@; \
@@ -402,7 +408,7 @@ cmd_modversions_S = \ · 88 unmodified lines
402endif408endif
403endif409endif
404 410
405$(obj)/%.o: $(src)/%.S $(objtool_obj) FORCE411$(obj)/%.o: $(src)/%.S $(objtool_dep) FORCE
406 $(call if_changed_rule,as_o_S)412 $(call if_changed_rule,as_o_S)
407 413
408targets += $(real-objs-y) $(real-objs-m) $(lib-y)414targets += $(real-objs-y) $(real-objs-m) $(lib-y)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t