From nobody Mon Feb 9 14:32:39 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 8DE7F28A735 for ; Fri, 6 Jun 2025 15:35:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749224115; cv=none; b=fPex5TxCl2P9EleU47yARBu5ycfYMfTaE/BvHYBuKIKA20554i7vhie8yvH/xLE2XA1hG9UizdOMKfnBBR+dzcsbKcPGC87a3vFFyd99MH6r5ojpIlAEW1Nsp1GQ1+HyJSiNj/ZkyDgDFYsGcy8n48dAzet181dnhzEZbZzUgGQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749224115; c=relaxed/simple; bh=dgMNb7nu3lnJ+1jnVGA/ngCPVqkJTEXfIFpETz3HFyU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IOv7I2WI5bL0kspui8/s6matib0/6lM3YN0Goaoc8Ld38GKkdpFdgwgOSsnJHLAnVdlx0oQXdCKVXxeNM4TxPbnmaEuOHMf2oDZ08CXNpNHH/62Y9DC8TcOzmy6R1OdfIBPjeqq0qOriJI3C4ET7c7JUw3zYwH6V9koDbev4/C4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=GFo1JNNt; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="GFo1JNNt" Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5565MZft030080; Fri, 6 Jun 2025 15:35:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=wIqqo /7E2WJ8UlpKCwyClHDZQx7NjCfXE9MZI+8M53M=; b=GFo1JNNtU8DtfYiVqw71F GVJs007b+7kddzy9+pF+Igyfd7kHea+kQUpCBTuUjj88mBg3c12FBFucGiNud4Px ywthMtvLnKBvU4/IjvXGUgFP2KBtXFvgfeBkxq6XaUigxWHHa+35FF3hGZMO1P7X 9qlBab6jYvRjsb7/CroZiLn4k7IeAkA3S0ibpWIJ2saK6K3w71CyIlT5UuVrqmPw p8ygOdbmxIdocsKgmay8UhrFPyIySLYVM8qZd7/ARXK1KM07CKKecmgff4Y1cbTM Af6ZQH6AxMdOeZm66u8bKDWxdz34DmnEjCPBK8KvHzgm0TF1LAp1k4eeHolqupgC w== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 471g8e087g-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 06 Jun 2025 15:35:08 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 556Eshsx039288; Fri, 6 Jun 2025 15:35:07 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 46yr7desjb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 06 Jun 2025 15:35:07 +0000 Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 556FYh41015517; Fri, 6 Jun 2025 15:35:07 GMT Received: from laptop-dell-latitude7430.nl.oracle.com (dhcp-10-154-187-118.vpn.oracle.com [10.154.187.118]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 46yr7des15-12; Fri, 06 Jun 2025 15:35:07 +0000 From: Alexandre Chartre To: linux-kernel@vger.kernel.org, mingo@kernel.org, jpoimboe@kernel.org, peterz@infradead.org Cc: alexandre.chartre@oracle.com Subject: [RFC 11/13] objtool: Improve register reporting during function validation Date: Fri, 6 Jun 2025 17:34:38 +0200 Message-ID: <20250606153440.865808-12-alexandre.chartre@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250606153440.865808-1-alexandre.chartre@oracle.com> References: <20250606153440.865808-1-alexandre.chartre@oracle.com> 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 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-06-06_05,2025-06-05_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 bulkscore=0 suspectscore=0 phishscore=0 mlxlogscore=999 adultscore=0 malwarescore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2506060136 X-Authority-Analysis: v=2.4 cv=Va/3PEp9 c=1 sm=1 tr=0 ts=68430aac cx=c_pps a=XiAAW1AwiKB2Y8Wsi+sD2Q==:117 a=XiAAW1AwiKB2Y8Wsi+sD2Q==:17 a=6IFa9wvqVegA:10 a=yPCof4ZbAAAA:8 a=CogidulLUEdmuW3A26oA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjA2MDEzNyBTYWx0ZWRfXx4CU7yTzBV5J maLSzd0flFMTqFuNXLqsGgkZYy3K/gQnIe4/j4QQFSDiOw0TKRW++6DYa9bsDcWN1ZKsmxKI7uV RF1Y3J/zQj/0JrwN8HFuRa4kyBamXZUNnFTTzIr/Gnoj3i7wcYBniD5xnWItUHZFYL8ORMFe8DW C8moURtp9W9sAdgg7PtbhATnEQ7uyry+cOa44J4zBLdI9Bal+PTNTSx+PpWqRWqi6FZKwpR/4Vt dRJyUaM2NMmgOLIIqSbWykmHb+nGzIK8SRpIFrTtpnE3n1Ij+RF7Mw+v+Ec8oHFaXh0z62WYT1I AwFz0F3VTflDo5iIylzFDz+LYMWLVdqVefplagVRIEY9ntve0bA8elM3FC3o4BBZ/AkB2o4g2sb e2zGsCV95MCoc2DrHd/GGp/JRl9Ru3C0F3aFYKQEoSlnEO6oKrPiuSvJrU5UBV/KxRxqKbxl X-Proofpoint-ORIG-GUID: 3210MFP6L7sjBEL_xe6PHwdRWL07PmeV X-Proofpoint-GUID: 3210MFP6L7sjBEL_xe6PHwdRWL07PmeV Content-Type: text/plain; charset="utf-8" When tracing function validation, instruction state changes can report changes involving registers. These registers are reported with the name "r" (e.g. "r3"). Print the CPU specific register name instead of a generic name (e.g. print "rbx" instead of "r3" on x86). Signed-off-by: Alexandre Chartre --- tools/objtool/arch/loongarch/decode.c | 11 +++++++++++ tools/objtool/arch/powerpc/decode.c | 12 ++++++++++++ tools/objtool/arch/x86/decode.c | 8 ++++++++ tools/objtool/disas.c | 7 +++++++ tools/objtool/include/objtool/arch.h | 2 ++ 5 files changed, 40 insertions(+) diff --git a/tools/objtool/arch/loongarch/decode.c b/tools/objtool/arch/loo= ngarch/decode.c index bf5ac6750512..fbad237e54fb 100644 --- a/tools/objtool/arch/loongarch/decode.c +++ b/tools/objtool/arch/loongarch/decode.c @@ -7,6 +7,17 @@ #include #include =20 +const char *arch_reg_name[CFI_NUM_REGS] =3D { + "zero", "ra", "tp", "sp", + "a0", "a1", "a2", "a3", + "a4", "a5", "a6", "a7", + "t0", "t1", "t2", "t3", + "t4", "t5", "t6", "t7", + "t8", "u0", "fp", "s0", + "s1", "s2", "s3", "s4", + "s5", "s6", "s7", "s8" +}; + int arch_ftrace_match(char *name) { return !strcmp(name, "_mcount"); diff --git a/tools/objtool/arch/powerpc/decode.c b/tools/objtool/arch/power= pc/decode.c index c0fcab2d643c..df5bf6476b78 100644 --- a/tools/objtool/arch/powerpc/decode.c +++ b/tools/objtool/arch/powerpc/decode.c @@ -9,6 +9,18 @@ #include #include =20 +const char *arch_reg_name[CFI_NUM_REGS] =3D { + "r0", "sp", "r2", "r3", + "r4", "r5", "r6", "r7", + "r8", "r9", "r10", "r11", + "r12", "r13", "r14", "r15", + "r16", "r17", "r18", "r19", + "r20", "r21", "r22", "r23", + "r24", "r25", "r26", "r27", + "r28", "r29", "r30", "r31", + "ra" +}; + int arch_ftrace_match(char *name) { return !strcmp(name, "_mcount"); diff --git a/tools/objtool/arch/x86/decode.c b/tools/objtool/arch/x86/decod= e.c index 6c13c67ed9b9..56e2df35c9ee 100644 --- a/tools/objtool/arch/x86/decode.c +++ b/tools/objtool/arch/x86/decode.c @@ -23,6 +23,14 @@ #include #include =20 +const char *arch_reg_name[CFI_NUM_REGS] =3D { + "rax", "rcx", "rdx", "rbx", + "rsp", "rbp", "rsi", "rdi", + "r8", "r9", "r10", "r11", + "r12", "r13", "r14", "r15", + "ra" +}; + int arch_ftrace_match(char *name) { return !strcmp(name, "__fentry__"); diff --git a/tools/objtool/disas.c b/tools/objtool/disas.c index 4326c608f925..8265ad7479a3 100644 --- a/tools/objtool/disas.c +++ b/tools/objtool/disas.c @@ -38,6 +38,7 @@ struct disas_context { const char *register_name(unsigned int reg) { static char rname_buffer[REGISTER_NAME_MAXLEN]; + const char *rname; =20 switch (reg) { case CFI_UNDEFINED: @@ -50,6 +51,12 @@ const char *register_name(unsigned int reg) return "(bp)"; } =20 + if (reg < CFI_NUM_REGS) { + rname =3D arch_reg_name[reg]; + if (rname) + return rname; + } + if (snprintf(rname_buffer, REGISTER_NAME_MAXLEN, "r%d", reg) =3D=3D 1) return NULL; =20 diff --git a/tools/objtool/include/objtool/arch.h b/tools/objtool/include/o= bjtool/arch.h index aecf8fc29571..4736b08805d6 100644 --- a/tools/objtool/include/objtool/arch.h +++ b/tools/objtool/include/objtool/arch.h @@ -106,4 +106,6 @@ unsigned long arch_jump_table_sym_offset(struct reloc *= reloc, struct reloc *tabl =20 int arch_disas_info_init(struct disassemble_info *dinfo); =20 +extern const char *arch_reg_name[CFI_NUM_REGS]; + #endif /* _ARCH_H */ --=20 2.43.5