Message ID | 161399212333.20312.15799180882369631665.tip-bot2@tip-bot2 |
---|---|
State | Accepted |
Commit | 724c8a23d589d8a002d2e39633c2f9a5a429616f |
Headers | show |
Series |
|
Related | show |
diff --git a/tools/objtool/check.c b/tools/objtool/check.c index 62cd211..d7f1496 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -1983,6 +1983,20 @@ static int update_cfi_state(struct instruction *insn, struct cfi_state *cfi, } } + else if (op->dest.reg == CFI_SP && + cfi->vals[op->src.reg].base == CFI_SP_INDIRECT && + cfi->vals[op->src.reg].offset == cfa->offset) { + + /* + * The same stack swizzle case 2) as above. But + * because we can't change cfa->base, case 3) + * will become a regular POP. Pretend we're a + * PUSH so things don't go unbalanced. + */ + cfi->stack_size += 8; + } + + break; case OP_SRC_ADD: