objtool: Combine UNWIND_HINT_RET_OFFSET and UNWIND_HINT_FUNC
authorJosh Poimboeuf <jpoimboe@redhat.com>
Thu, 21 Jan 2021 21:29:24 +0000 (15:29 -0600)
committerJosh Poimboeuf <jpoimboe@redhat.com>
Tue, 26 Jan 2021 17:12:00 +0000 (11:12 -0600)
commitb735bd3e68824316655252a931a3353a6ebc036f
tree24a879a66b4ce0549a05d2aca3ec81dab212b128
parent081df94301e317e84c3413686043987da2c3e39d
objtool: Combine UNWIND_HINT_RET_OFFSET and UNWIND_HINT_FUNC

The ORC metadata generated for UNWIND_HINT_FUNC isn't actually very
func-like.  With certain usages it can cause stack state mismatches
because it doesn't set the return address (CFI_RA).

Also, users of UNWIND_HINT_RET_OFFSET no longer need to set a custom
return stack offset.  Instead they just need to specify a func-like
situation, so the current ret_offset code is hacky for no good reason.

Solve both problems by simplifying the RET_OFFSET handling and
converting it into a more useful UNWIND_HINT_FUNC.

If we end up needing the old 'ret_offset' functionality again in the
future, we should be able to support it pretty easily with the addition
of a custom 'sp_offset' in UNWIND_HINT_FUNC.

Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Link: https://lore.kernel.org/r/db9d1f5d79dddfbb3725ef6d8ec3477ad199948d.1611263462.git.jpoimboe@redhat.com
arch/x86/include/asm/unwind_hints.h
arch/x86/kernel/ftrace_64.S
arch/x86/lib/retpoline.S
include/linux/objtool.h
tools/include/linux/objtool.h
tools/objtool/arch/x86/decode.c
tools/objtool/check.c
tools/objtool/include/objtool/check.h