diff options
| author | Josh Poimboeuf <jpoimboe@kernel.org> | 2026-03-16 17:47:56 -0700 |
|---|---|---|
| committer | Peter Zijlstra <peterz@infradead.org> | 2026-03-18 09:38:52 +0100 |
| commit | 96f3b16a9de552538b810f773645d43f3b661b50 (patch) | |
| tree | f0ac7b3bee316c66c02fe14e357d98b696033db8 /tools/objtool | |
| parent | 51a0b7c4ede5c775e9d362e5f465ca993e076823 (diff) | |
objtool: Support Clang RAX DRAP sequence
Recent Clang can use RAX as a temporary register for the DRAP stack
alignment sequence. Add support for that.
Fixes the following warning:
vmlinux.o: error: objtool: vmw_host_printf+0xd: unknown CFA base reg 0
Closes: https://lore.kernel.org/cefefdd1-7b82-406d-8ff4-e4b167e45ee6@app.fastmail.com
Reported-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/3f33dc720b83dc6d3a2b7094f75a5c90a0b1cbc5.1773708458.git.jpoimboe@kernel.org
Diffstat (limited to 'tools/objtool')
| -rw-r--r-- | tools/objtool/arch/x86/decode.c | 3 | ||||
| -rw-r--r-- | tools/objtool/arch/x86/orc.c | 5 |
2 files changed, 8 insertions, 0 deletions
diff --git a/tools/objtool/arch/x86/decode.c b/tools/objtool/arch/x86/decode.c index 73bfea220d1b..c3a10f3c72d9 100644 --- a/tools/objtool/arch/x86/decode.c +++ b/tools/objtool/arch/x86/decode.c @@ -912,6 +912,9 @@ int arch_decode_hint_reg(u8 sp_reg, int *base) case ORC_REG_DX: *base = CFI_DX; break; + case ORC_REG_AX: + *base = CFI_AX; + break; default: return -1; } diff --git a/tools/objtool/arch/x86/orc.c b/tools/objtool/arch/x86/orc.c index 735e150ca6b7..5494bb450ab5 100644 --- a/tools/objtool/arch/x86/orc.c +++ b/tools/objtool/arch/x86/orc.c @@ -70,6 +70,9 @@ int init_orc_entry(struct orc_entry *orc, struct cfi_state *cfi, struct instruct case CFI_DX: orc->sp_reg = ORC_REG_DX; break; + case CFI_AX: + orc->sp_reg = ORC_REG_AX; + break; default: ERROR_INSN(insn, "unknown CFA base reg %d", cfi->cfa.base); return -1; @@ -138,6 +141,8 @@ static const char *reg_name(unsigned int reg) return "bp(ind)"; case ORC_REG_SP_INDIRECT: return "sp(ind)"; + case ORC_REG_AX: + return "ax"; default: return "?"; } |
