Messages in this thread Patch in this message | | | Date | Mon, 18 Jan 2021 10:13:32 -0000 | From | "tip-bot2 for Julien Thierry" <> | Subject | [tip: objtool/core] objtool: Support addition to set CFA base |
| |
The following commit has been merged into the objtool/core branch of tip:
Commit-ID: 468af56a7bbaa626da5a4578bedc930d731fba13 Gitweb: https://git.kernel.org/tip/468af56a7bbaa626da5a4578bedc930d731fba13 Author: Julien Thierry <jthierry@redhat.com> AuthorDate: Wed, 14 Oct 2020 08:38:01 +01:00 Committer: Josh Poimboeuf <jpoimboe@redhat.com> CommitterDate: Wed, 13 Jan 2021 18:13:10 -06:00
objtool: Support addition to set CFA base
On arm64, the compiler can set the frame pointer either with a move operation or with and add operation like:
add (SP + constant), BP
For a simple move operation, the CFA base is changed from SP to BP. Handle also changing the CFA base when the frame pointer is set with an addition instruction.
Signed-off-by: Julien Thierry <jthierry@redhat.com> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> --- tools/objtool/check.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
diff --git a/tools/objtool/check.c b/tools/objtool/check.c index 88210b0..00d00f9 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -1960,6 +1960,17 @@ static int update_cfi_state(struct instruction *insn, struct cfi_state *cfi, break; } + if (!cfi->drap && op->src.reg == CFI_SP && + op->dest.reg == CFI_BP && cfa->base == CFI_SP && + check_reg_frame_pos(®s[CFI_BP], -cfa->offset + op->src.offset)) { + + /* lea disp(%rsp), %rbp */ + cfa->base = CFI_BP; + cfa->offset -= op->src.offset; + cfi->bp_scratch = false; + break; + } + if (op->src.reg == CFI_SP && cfa->base == CFI_SP) { /* drap: lea disp(%rsp), %drap */
| |