summaryrefslogtreecommitdiff
path: root/tools/objtool
diff options
context:
space:
mode:
authorJosh Poimboeuf <jpoimboe@kernel.org>2026-03-16 17:47:56 -0700
committerPeter Zijlstra <peterz@infradead.org>2026-03-18 09:38:52 +0100
commit96f3b16a9de552538b810f773645d43f3b661b50 (patch)
treef0ac7b3bee316c66c02fe14e357d98b696033db8 /tools/objtool
parent51a0b7c4ede5c775e9d362e5f465ca993e076823 (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.c3
-rw-r--r--tools/objtool/arch/x86/orc.c5
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 "?";
}