Skip to content

Commit d8dd25a

Browse files
jpoimboeIngo Molnar
authored andcommitted
objtool: Fix stack offset tracking for indirect CFAs
When the current frame address (CFA) is stored on the stack (i.e., cfa->base == CFI_SP_INDIRECT), objtool neglects to adjust the stack offset when there are subsequent pushes or pops. This results in bad ORC data at the end of the ENTER_IRQ_STACK macro, when it puts the previous stack pointer on the stack and does a subsequent push. This fixes the following unwinder warning: WARNING: can't dereference registers at 00000000f0a6bdba for ip interrupt_entry+0x9f/0xa0 Fixes: 627fce1 ("objtool: Add ORC unwind table generation") Reported-by: Vince Weaver <[email protected]> Reported-by: Dave Jones <[email protected]> Reported-by: Steven Rostedt <[email protected]> Reported-by: Vegard Nossum <[email protected]> Reported-by: Joe Mario <[email protected]> Reviewed-by: Miroslav Benes <[email protected]> Signed-off-by: Josh Poimboeuf <[email protected]> Signed-off-by: Ingo Molnar <[email protected]> Cc: Andy Lutomirski <[email protected]> Cc: Jann Horn <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Thomas Gleixner <[email protected]> Link: https://lore.kernel.org/r/853d5d691b29e250333332f09b8e27410b2d9924.1587808742.git.jpoimboe@redhat.com
1 parent ab51cac commit d8dd25a

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

tools/objtool/check.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1449,7 +1449,7 @@ static int update_insn_state_regs(struct instruction *insn, struct insn_state *s
14491449
struct cfi_reg *cfa = &state->cfa;
14501450
struct stack_op *op = &insn->stack_op;
14511451

1452-
if (cfa->base != CFI_SP)
1452+
if (cfa->base != CFI_SP && cfa->base != CFI_SP_INDIRECT)
14531453
return 0;
14541454

14551455
/* push */

0 commit comments

Comments
 (0)