From nobody Tue Apr 7 01:16:57 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 95D06179A3 for ; Tue, 17 Mar 2026 00:48:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773708483; cv=none; b=tAwp8zNlNNRi8ZGCVJqISXiRSAvkTtRbiX0DPeCkDYQhRUsoi3F5WKN7vpdZ7u7vks02SHcClHIzPVLr40yXKxCgwEJpKz/Hcu2Prm30zQuRTBVRuS0ixg4OyKVAunc42LfbJOnag+Og/JpXrUB1DmxhoFnQ1Ahj4GeQwn+VQYU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773708483; c=relaxed/simple; bh=cY5tjynfMj68HNs4a6/3A+cP2c5vnHtKFTLpNV3kZtg=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=PZ+Vjkr394o6y1N9bV/UViYVEi+STM+OM9h9fNbS1zuYncnOfXEDD1GuMDNNYSsyFG9zlxDqjks/qMxdn03mxOANgvPnts+M1uc2QdPAWm91RIWOzW3QIjQgEibwyqQvgOhTEJLG+dfRXkEN9RD1BQovnm/uuOG24mSRfaDU2c4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NGq4Y+or; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NGq4Y+or" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8C352C19421; Tue, 17 Mar 2026 00:48:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773708483; bh=cY5tjynfMj68HNs4a6/3A+cP2c5vnHtKFTLpNV3kZtg=; h=From:To:Cc:Subject:Date:From; b=NGq4Y+orz/S6y/ed7iluIwctW0OkKEXMROV+GKfulQWkh9bYmB438FuVD+LPP5e3r TCWavn/z7k67v9uXK1oRadp5bka6i4UTsqWS92rDFtkIJ7CrrwHp8/3f7SB2ryKiH7 wQO92QB9SBGF1tgXB7kRvzcGByi4Td7hwuaJMbdxxDVU+jTT9VO2WV/U2Xl3AkQ1dH COTLWirS/6ntLrkrG+2VS4+ElcfNECm4Dl+1nBu4rFelmgfR3IysXZ1UZl6obcbF8B Jc9mR0W8liV1svB6MeVU3UWBvShu1fHdWEMZQ1wH2VWrjCHfSL/GBlD5IErG65rXFR QsoLgXMwkB30g== From: Josh Poimboeuf To: x86@kernel.org Cc: linux-kernel@vger.kernel.org, Arnd Bergmann , Peter Zijlstra Subject: [PATCH] objtool: Support Clang RAX DRAP sequence Date: Mon, 16 Mar 2026 17:47:56 -0700 Message-ID: <3f33dc720b83dc6d3a2b7094f75a5c90a0b1cbc5.1773708458.git.jpoimboe@kernel.org> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 Reported-by: Arnd Bergmann Closes: https://lore.kernel.org/cefefdd1-7b82-406d-8ff4-e4b167e45ee6@app.fa= stmail.com Signed-off-by: Josh Poimboeuf Suggested-by: Peter Zijlstra --- arch/x86/include/asm/orc_types.h | 1 + arch/x86/kernel/unwind_orc.c | 8 ++++++++ tools/arch/x86/include/asm/orc_types.h | 1 + tools/objtool/arch/x86/decode.c | 3 +++ tools/objtool/arch/x86/orc.c | 5 +++++ 5 files changed, 18 insertions(+) diff --git a/arch/x86/include/asm/orc_types.h b/arch/x86/include/asm/orc_ty= pes.h index e0125afa53fb..b3cc7970fa54 100644 --- a/arch/x86/include/asm/orc_types.h +++ b/arch/x86/include/asm/orc_types.h @@ -37,6 +37,7 @@ #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 =20 #define ORC_TYPE_UNDEFINED 0 diff --git a/arch/x86/kernel/unwind_orc.c b/arch/x86/kernel/unwind_orc.c index f610fde2d5c4..32f7e918d3d9 100644 --- a/arch/x86/kernel/unwind_orc.c +++ b/arch/x86/kernel/unwind_orc.c @@ -578,6 +578,14 @@ bool unwind_next_frame(struct unwind_state *state) } break; =20 + 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); diff --git a/tools/arch/x86/include/asm/orc_types.h b/tools/arch/x86/includ= e/asm/orc_types.h index e0125afa53fb..b3cc7970fa54 100644 --- a/tools/arch/x86/include/asm/orc_types.h +++ b/tools/arch/x86/include/asm/orc_types.h @@ -37,6 +37,7 @@ #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 =20 #define ORC_TYPE_UNDEFINED 0 diff --git a/tools/objtool/arch/x86/decode.c b/tools/objtool/arch/x86/decod= e.c index c5817829cdfa..5931b2393bd8 100644 --- a/tools/objtool/arch/x86/decode.c +++ b/tools/objtool/arch/x86/decode.c @@ -896,6 +896,9 @@ int arch_decode_hint_reg(u8 sp_reg, int *base) case ORC_REG_DX: *base =3D CFI_DX; break; + case ORC_REG_AX: + *base =3D 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_stat= e *cfi, struct instruct case CFI_DX: orc->sp_reg =3D ORC_REG_DX; break; + case CFI_AX: + orc->sp_reg =3D 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 "?"; } --=20 2.53.0