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
#define ORC_REG_R13 7
#define ORC_REG_BP_INDIRECT 8
#define ORC_REG_SP_INDIRECT 9
+#define ORC_REG_AX 10
#define ORC_REG_MAX 15
#define ORC_TYPE_UNDEFINED 0
}
break;
+ case ORC_REG_AX:
+ if (!get_reg(state, offsetof(struct pt_regs, ax), &sp)) {
+ orc_warn_current("missing AX value at %pB\n",
+ (void *)state->ip);
+ goto err;
+ }
+ break;
+
default:
orc_warn("unknown SP base reg %d at %pB\n",
orc->sp_reg, (void *)state->ip);
#define ORC_REG_R13 7
#define ORC_REG_BP_INDIRECT 8
#define ORC_REG_SP_INDIRECT 9
+#define ORC_REG_AX 10
#define ORC_REG_MAX 15
#define ORC_TYPE_UNDEFINED 0
case ORC_REG_DX:
*base = CFI_DX;
break;
+ case ORC_REG_AX:
+ *base = CFI_AX;
+ break;
default:
return -1;
}
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;
return "bp(ind)";
case ORC_REG_SP_INDIRECT:
return "sp(ind)";
+ case ORC_REG_AX:
+ return "ax";
default:
return "?";
}