x86/unwind: Add the ORC unwinder
authorJosh Poimboeuf <jpoimboe@redhat.com>
Mon, 24 Jul 2017 23:36:57 +0000 (18:36 -0500)
committerIngo Molnar <mingo@kernel.org>
Wed, 26 Jul 2017 11:18:20 +0000 (13:18 +0200)
commitee9f8fce99640811b2b8e79d0d1dbe8bab69ba67
treebe03fe86edb9ebd70b4d29ca2bc8a4d972ff6644
parent1ee6f00d1164955b7bdadd36fc0f2736754784d9
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.

Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Jiri Slaby <jslaby@suse.cz>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: live-patching@vger.kernel.org
Link: http://lkml.kernel.org/r/0a6cbfb40f8da99b7a45a1a8302dc6aef16ec812.1500938583.git.jpoimboe@redhat.com
[ Extended the changelog. ]
Signed-off-by: Ingo Molnar <mingo@kernel.org>
18 files changed:
Documentation/x86/orc-unwinder.txt [new file with mode: 0644]
arch/um/include/asm/unwind.h [new file with mode: 0644]
arch/x86/Kconfig
arch/x86/Kconfig.debug
arch/x86/include/asm/module.h
arch/x86/include/asm/orc_lookup.h [new file with mode: 0644]
arch/x86/include/asm/orc_types.h
arch/x86/include/asm/unwind.h
arch/x86/kernel/Makefile
arch/x86/kernel/module.c
arch/x86/kernel/setup.c
arch/x86/kernel/unwind_frame.c
arch/x86/kernel/unwind_guess.c
arch/x86/kernel/unwind_orc.c [new file with mode: 0644]
arch/x86/kernel/vmlinux.lds.S
include/asm-generic/vmlinux.lds.h
lib/Kconfig.debug
scripts/Makefile.build