summaryrefslogtreecommitdiffstats
path: root/tools/objtool/check.c
diff options
context:
space:
mode:
authorJulien Thierry <jthierry@redhat.com>2020-09-04 16:30:28 +0100
committerJosh Poimboeuf <jpoimboe@redhat.com>2020-09-10 10:43:13 -0500
commitedea9e6bcbeaa41718b022a8b99ffddef2330bbc (patch)
tree750c5adeb0cf00da380faefea8cc4551bcc202ba /tools/objtool/check.c
parentee819aedf34a8f35cd54ee3967c7beb4d1d4a635 (diff)
downloadlinux-stable-edea9e6bcbeaa41718b022a8b99ffddef2330bbc.tar.gz
linux-stable-edea9e6bcbeaa41718b022a8b99ffddef2330bbc.tar.bz2
linux-stable-edea9e6bcbeaa41718b022a8b99ffddef2330bbc.zip
objtool: Decode unwind hint register depending on architecture
The set of registers that can be included in an unwind hint and their encoding will depend on the architecture. Have arch specific code to decode that register. Signed-off-by: Julien Thierry <jthierry@redhat.com> Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Diffstat (limited to 'tools/objtool/check.c')
-rw-r--r--tools/objtool/check.c27
1 files changed, 1 insertions, 26 deletions
diff --git a/tools/objtool/check.c b/tools/objtool/check.c
index 95c6e0d31c0a..4e2f703b6a25 100644
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -1367,32 +1367,7 @@ static int read_unwind_hints(struct objtool_file *file)
insn->hint = true;
- switch (hint->sp_reg) {
- case ORC_REG_UNDEFINED:
- cfa->base = CFI_UNDEFINED;
- break;
- case ORC_REG_SP:
- cfa->base = CFI_SP;
- break;
- case ORC_REG_BP:
- cfa->base = CFI_BP;
- break;
- case ORC_REG_SP_INDIRECT:
- cfa->base = CFI_SP_INDIRECT;
- break;
- case ORC_REG_R10:
- cfa->base = CFI_R10;
- break;
- case ORC_REG_R13:
- cfa->base = CFI_R13;
- break;
- case ORC_REG_DI:
- cfa->base = CFI_DI;
- break;
- case ORC_REG_DX:
- cfa->base = CFI_DX;
- break;
- default:
+ if (arch_decode_hint_reg(insn, hint->sp_reg)) {
WARN_FUNC("unsupported unwind_hint sp base reg %d",
insn->sec, insn->offset, hint->sp_reg);
return -1;