From nobody Mon Sep 28 12:33:11 2026 Received: from LO0P265CU003.outbound.protection.outlook.com (mail-uksouthazon11022077.outbound.protection.outlook.com [52.101.96.77]) (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 69E9636A36E; Fri, 21 Aug 2026 20:49:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.96.77 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787345381; cv=fail; b=IvOBNWKNtKmRsn6FIGbatjhpXnAwsEdnmwSSo0ngWPYhnJ5x/1jaYn93i/B8RMthS1jYLASzq3i1Nl1zPWZi6wHjRw+MQgocKd3PHykIi7I5TZR6phnOkUrycIeeFzu/7KABf5S/2NAOrX6NOQTyz3506FZTIoWrVuOvoUmoXYY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787345381; c=relaxed/simple; bh=/dT15EN5BtXqC/Kc+JIYw1DdFsMy6ur+RmiE+0tyCcI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=HtqlwyIk9TWigF/xacdJCQiG/daQMJP+wuKmf8zIdeULVm49hDi2ACl64D+Mx4YpQw0Z05SW8Q1QHLaz0lNspdYUETvz8W1JTLP2SHDlj7RTYMKH2vA6NeGZDvzAkSf4O1RnZqUKFUadKIYROwFaH8/YBvuhHfoPRhcCWUyhm6Y= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com; spf=pass smtp.mailfrom=atomlin.com; arc=fail smtp.client-ip=52.101.96.77 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=atomlin.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FRa18nCxcZ8XSZ8lgDdN2goF65ZOK4BXyw8y97CSysDnSNSHvWSq4TT9Lq0iErbFmW/DszGgMH6FotIy1l6ZAi/sokOfv5reRToUWbdbDCkMGsaWrzIYDSNbO98gh/lH5/X6ro20/VP7iotZxsEOpOKBB6WC1mnceg7OMzKBRYHfIzgzlc3lxvhrf9IqHDJxtQJkhv3ejizuyLOj6X1Q5mb5QjjgRFnh+bveiSfSvHxuAwOfG6L9e8p7RHzd0LRtmCU2UJFe8/H81XhDAkk9Fb+CitYyvn952X0SiU0dhAeGcw4EZaORsdh0m3JyO8WWnP1LFY4WzHaIaB5bfNPoRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:MIME-Version; bh=+LY40U8azJZOZVX5dkyDjbVu9cZgdNS5hWk4U+zDsEQ=; b=k+xH5m0UdGK9bQzIj/NSTeyJBhKYqbHQyLiI7ElG3RVU+FCMc7//YsmVVDZeMrdaoLjWp7VNwVY6v8HGgQNLVFBo5dbLLN0VVZExocYShKxOV8jdO+b65Mc9ydz61FYNOtdvGSHWhGAn1ESYHZ/VaVekvnul8SujSKlg01fMsZWn6y/Xb6d7L8BrAvhA6LfluVoiJZtWB2j6H8IE4ypMDy8mSv44HiBkpRRt3PKjZ5qICUbIht7UTRbvtdJpgQiMwNp2GnIvG1bwAHafBRg32OozDAtqJ7nJa7zQceS7wDx1679eQYU7kGRA2wr9PoNTsR4JtDD7vGU6ds4/y4VX/g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=atomlin.com; dmarc=pass action=none header.from=atomlin.com; dkim=pass header.d=atomlin.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=atomlin.com; Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) by LO2P123MB6104.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:25b::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.10; Fri, 21 Aug 2026 20:49:39 +0000 Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230]) by CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230%4]) with mapi id 15.21.0339.010; Fri, 21 Aug 2026 20:49:38 +0000 From: Aaron Tomlin To: peterz@infradead.org, mingo@redhat.com, acme@kernel.org, namhyung@kernel.org Cc: mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, james.clark@linaro.org, howardchu95@gmail.com, atomlin@atomlin.com, neelx@suse.com, chjohnst@mail.com, sean@ashe.io, steve@abita.co, rishil1999@outlook.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH perf-tools-next v4 1/4] perf trace: Introduce kernel symbol beautifier for virtual addresses Date: Fri, 21 Aug 2026 16:49:27 -0400 Message-ID: <20260821204930.679027-2-atomlin@atomlin.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260821204930.679027-1-atomlin@atomlin.com> References: <20260821204930.679027-1-atomlin@atomlin.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN9PR03CA0053.namprd03.prod.outlook.com (2603:10b6:408:fb::28) To CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CWLP123MB6607:EE_|LO2P123MB6104:EE_ X-MS-Office365-Filtering-Correlation-Id: 54de1ddf-b9e9-486a-40bf-08deffc5b74e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|366016|7416014|376014|1800799024|56012099006|10067099003|6133799003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: cIvb3GjC8p735GZ2Ams5JPen5aHC+ahyiKhZlU9+W0CwLiO4B/DiYqevOwUJeRowHmTriEnW99egVC1T+PzPhgvdBG6Bvi2Gu7e/EU3rPIOVYpgQ+3IdaMQIMXj6R+w8tAA8cJuR84rJCDqYpdKdgDT00Sq6HWYa7v5jMAts9TKbmr4nG3fXbYkuseKKeGXhweSVMduWrDEVn9CHvdcabnFSgaEAReG4637RStY446gxj87QQaxejP9lgIETSXxomLq8HrSo+t2ZHThxpgqyq9KuaOZFtyFg83myaXGZAMG2afEEH8J8rbyta+UafT+0PqZ/nHJbjEgs/ZdvYW7ynbGDOu2ytFRAwHWfYwc2Yu08jQ4S10XRVCv+URr/ujrWHm907bN7k9iZrCLl20ex+fsv7XvpcduLSQqwUKc4OJ47kh08bzGFwNjaRgSxgB+Di8mP7ZvD404Q/+7RD1RwySnyn3vxv6BxstKs5E7/7UtC35HlcgO/UNI1y/Mj4jMX88Qf32zROvawEO9ZgIt7YD3iXsIsXouJch93gynpRyulwG/U/vI9B9nPP1Ay1nTCja4rFLsPGeA88G8aKq2TWN5Y0Mz9BM7Y7lckHyRovTmvdd5HvP+xmrnp777Au7Evo/DkLJYaMrA7+//z25b5pQYjlGYfHCONgPb9JDBdvCI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(366016)(7416014)(376014)(1800799024)(56012099006)(10067099003)(6133799003)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?v3QGe59/nNiNPkHQLAcOaGh7gfwSVouuBYZreaxKZY6ZGhQ7BmxNPPZbRs3s?= =?us-ascii?Q?B+vWTJ+pL4OS48Aq+hcO4XfsMUVOWY+QOCJyjLQd3JEzd+pniRpcgYYU19tZ?= =?us-ascii?Q?lqbp2oEk7IQzTU2AQvMBmrBHD1RcB0DUeTDxtNHoS9uUxhONQdhL1SL7Vk/J?= =?us-ascii?Q?COCd1+pZCt8vMops0zAkTekT5v/qGJWrUBIecnVxQe7uibFj3GtPodLpg0yf?= =?us-ascii?Q?yjjFR3m42+1JkdbiyzqpMr7Och0NoJIkc+bd1sas8OerjaCuukIpCixNVOle?= =?us-ascii?Q?KNetM27TM2prWqV8JBtLR8lF/fKAbrDd6EAHqrYcvCbRdYO9sAkZ+YRkxFBh?= =?us-ascii?Q?LzSOKdE7eLLnhjMCqpRZvE/3bCGAN5D006Aoxp8iNhT6y3NJWpquGyzrfQ/M?= =?us-ascii?Q?PirfS0rKFayVLiaWphG7ksuINobl8Ahj+T1UbjH/B9Paxa4BL/rIXoM3mghh?= =?us-ascii?Q?O49fVU9gYdML2KpnyhDeutV6LJIpRaY/sYOLW+XnHKQawbnO4+2csCpCaZPD?= =?us-ascii?Q?+A85ovo6KaaKp8QzfMkvSmJFKPJiy8SvPGuX/fI7CLSP25lNPw3+VT3jpxIS?= =?us-ascii?Q?9ZNgZenf6u3gPTnv/ITMWq8JNtmarP9rkoIsVA2smIDepDt20kgLU3J7bkpU?= =?us-ascii?Q?FKUcP8MLzhy4/cg/6+PN33PBJ7UJ7KYWCXGHYFW2w1A8CApAai5X68AMt/on?= =?us-ascii?Q?lI5ytXmECj9TlcLNOiJf8/yEeg/HRHaJ8JXkdEtfP8wz++C14mlD3+ZagUdh?= =?us-ascii?Q?t3yPA6jCDZ/S952Nxq9jUVKu/bSnJ7LqpBY712PFldBRYN6DF6HFKpS2Th/G?= =?us-ascii?Q?vOAQaFbPfq81f41Y3sAaVfz7R35vh55gQdUgL63hkYh0HArrXWGcTLDfYJdL?= =?us-ascii?Q?5IwooGiPWTBk+ODqF1C5mDUBd6ogYIwARUw9F75zAlytkEVmFEwcaktU70Ml?= =?us-ascii?Q?hbYOYBlqEKAqgAT8/ocggnZKdi/e3qgPY9+pFSI5MLUGZnEQ8maRIkqOdJ/L?= =?us-ascii?Q?VsNxisleCIDRY1BOcfQ2aRXGt4HPGgdiecPOu3Wfd+iNSusjRB4cU3TM+Wg0?= =?us-ascii?Q?3OMn9e+r227l11A1zJfBPe3xQXk4TGYS+27ibTQe17WxIhueoFma8oBtbptC?= =?us-ascii?Q?LNM6vf5ouwPuKqxsETYPTSbjMVarsmSMOOwdaTzhIsap61izEZqWE6SgTxZz?= =?us-ascii?Q?vjxRZUF0tJQbahcOoCQZpyDtdA6YPu+7hxO/VtUTspW9LxIlWb6AwnPYD0HU?= =?us-ascii?Q?ATFNQsjLTiyvnKgFbCRtItzGEgxPd+MjHQO5CxQV6ZHBnnXQIn0I1YMPaHL3?= =?us-ascii?Q?LKJjqLRoni7Vb5B8cW6yDjDwOYYBkzTXTwulOhsigq9ojYCyySU7D+f/OtrV?= =?us-ascii?Q?JZy6pUDzQTL2rii9E/j0T8e/5D6NAcocBxp8SJmhGjBuP1tp2gEcuvm0HD9S?= =?us-ascii?Q?7k8G1/osgKH7O1W9ChWi5xcSwT4aPB60QeCs3WiCCZ9NG2FqkLjLNptVBAVX?= =?us-ascii?Q?VMPfDeambq0cdn3tnonjLlKFIZUwH3aw9jlzzrAcWoVUP9WJ62otTHE8tZux?= =?us-ascii?Q?6AbPaUluM+Zva1Yxw+hXutLYRLbR1lzXmbTZUDGgFhI1J4Dv7sheb1NWgSS0?= =?us-ascii?Q?sft/7MPUwtBbEqUfkTm3FEyi4oszyIzwgxL3CjATvmoB34lAHSFJEhykShys?= =?us-ascii?Q?4xUziANt+hD3D6T0l4TXqXMeOlZ3e5b7EdPeUSnNkS498VEoK+MRW8WIRI/Q?= =?us-ascii?Q?vxLGEEzLlg=3D=3D?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: 54de1ddf-b9e9-486a-40bf-08deffc5b74e X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Aug 2026 20:49:38.4652 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e6a32402-7d7b-4830-9a2b-76945bbbcb57 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: F9/ODIaA1M94NN2KdCrB8VacT7kgjo7pVRAViJ52PuZu/4YllOz1nOJQDr9lCiVMcEWigx49YhztRgnIkZ+tEQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO2P123MB6104 Content-Type: text/plain; charset="utf-8" Currently, when 'perf trace' formats tracepoint payloads or system call arguments containing raw kernel virtual addresses (e.g., a work item function pointer work_func_t in workqueue:workqueue_execute_start), it prints them as raw hexadecimal values (e.g., 0xffffffff81234567). This impairs readability when tracing kernel execution flows. Introduce a dedicated kernel symbol beautifier, syscall_arg__scnprintf_ksym (i.e., SCA_KSYM), to resolve kernel virtual addresses to human-readable symbol names and offsets (e.g., "flush_to_ldisc"). The beautifier looks up the virtual address in the machine kernel maps via machine__find_kernel_symbol(). If a valid kernel symbol is found, the symbol name and offset are printed without requiring --libtraceevent; if the address is zero, "NULL" is rendered; otherwise, it gracefully falls back to hexadecimal formatting. Signed-off-by: Aaron Tomlin --- tools/perf/builtin-trace.c | 29 +++++++++++++++++++++++++++++ tools/perf/trace/beauty/beauty.h | 3 +++ 2 files changed, 32 insertions(+) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index c3c7f1f85c53..003048946503 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -750,6 +750,35 @@ size_t syscall_arg__scnprintf_ptr(char *bf, size_t siz= e, struct syscall_arg *arg return syscall_arg__scnprintf_hex(bf, size, arg); } =20 +size_t syscall_arg__scnprintf_ksym(char *bf, size_t size, struct syscall_a= rg *arg) +{ + if (arg->val =3D=3D 0) + return scnprintf(bf, size, "NULL"); + + if (arg->trace && arg->trace->host) { + struct map *map =3D NULL; + struct symbol *sym =3D machine__find_kernel_symbol(arg->trace->host, + arg->val, &map); + + if (sym) { + u64 start =3D map__unmap_ip(map, sym->start); + u64 offset =3D arg->val - start; + size_t printed; + + if (offset =3D=3D 0) + printed =3D scnprintf(bf, size, "%s", sym->name); + else + printed =3D scnprintf(bf, size, "%s+0x%" PRIx64, + sym->name, offset); + map__put(map); + return printed; + } + map__put(map); + } + + return syscall_arg__scnprintf_hex(bf, size, arg); +} + size_t syscall_arg__scnprintf_int(char *bf, size_t size, struct syscall_ar= g *arg) { return scnprintf(bf, size, "%d", arg->val); diff --git a/tools/perf/trace/beauty/beauty.h b/tools/perf/trace/beauty/bea= uty.h index 58a3206481ae..0f4801c61a5b 100644 --- a/tools/perf/trace/beauty/beauty.h +++ b/tools/perf/trace/beauty/beauty.h @@ -160,6 +160,9 @@ size_t syscall_arg__scnprintf_hex(char *bf, size_t size= , struct syscall_arg *arg size_t syscall_arg__scnprintf_ptr(char *bf, size_t size, struct syscall_ar= g *arg); #define SCA_PTR syscall_arg__scnprintf_ptr =20 +size_t syscall_arg__scnprintf_ksym(char *bf, size_t size, struct syscall_a= rg *arg); +#define SCA_KSYM syscall_arg__scnprintf_ksym + size_t syscall_arg__scnprintf_int(char *bf, size_t size, struct syscall_ar= g *arg); #define SCA_INT syscall_arg__scnprintf_int =20 --=20 2.55.0 From nobody Mon Sep 28 12:33:11 2026 Received: from LO2P265CU024.outbound.protection.outlook.com (mail-uksouthazon11021122.outbound.protection.outlook.com [52.101.95.122]) (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 C17CC363C55; Fri, 21 Aug 2026 20:49:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.95.122 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787345386; cv=fail; b=lUKl7FXwYJu2bwxsaoKs+HXNa76I90LUoLMClKgb3k4blwFfBpzDBTdk0Cb5nEpKUPRwMP8Rl5sWqbPukiSixMy6A31cEj7fLohiuhxNJcWlFAvcy256/YgkLpxsh2XUq071K+z92WjqYGhGs7zBqtlQjYNlPHLF5g+ca+8yDLs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787345386; c=relaxed/simple; bh=q/hPSQpXVEv0i+bHYsOP0/kZFL/Kt6va6NGsLuBchzo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=EE6jk8maAdoSK5aykWMIr6TWNeFEis/G8L3vSJiO8ZVlqYo6t6Agg4PU3bhancTGStTqPVdnSyHg+Y7VBK2c+IeURvy3Ri5RHJFI5b2yyVIvTXXBKc/EE72fHtRLcKosAF8SmjJdT6Ap0mefErgpqtzj4iONDYiqD3x2izvzij8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com; spf=pass smtp.mailfrom=atomlin.com; arc=fail smtp.client-ip=52.101.95.122 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=atomlin.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ufOq7grWw0WZ0J/FLGc3CT3/GXG1DqO8R/HS+fea7/ok+gm0Q4blc0lYXnqVuarIBWh5vv2QDFoRg4Lpxk/zAxZBZ58ww/YjaXRDv+fleLfoP0F+M/U45E7JH5sJqTu+MkNtBCVH5IrNVU2B2V+j95AnkPjSWAZJsqgkVOSty9tc82zgvXrMnT93eedEVpcluU4SR51a5DGj4Ucp+ZtNyZeHshugvbGWxdtqigz7OAM8tIYKq80rHA5rZ3ZTEmDTA3KDopNk3Hg+LxxhwyWzvPF7zQgm3NATrUFKFg7VhihEj+8vJr6PpeB4xKx3LkXQU+q8QkkxOZyex7xTXFy8gQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:MIME-Version; bh=dIyEvbqshp8w3bL7xeNT4mypxCQtnRx7F4ZVfeNClVY=; b=tzrpyZ/1IEHXTAABph4NxtF8NKhyz/z5sIB5BmUcK7uMIsSshtqSZKKFxXw9GzYw+USrozeOyPxX5D+AAeMuO24DcW5JtC3njWyGwvuE+wCgFotzjAtlkxRhXdWKeIAhhBse1mo295S+BSpH6tA8CLSmcbvd47toS3GCXP6YGjy3fRx1cnJQEAFKLB6Cn7umAahD+m7QT81yx0hX9v9nMK9iD4Mq+LMzN65QyGieCiHOqCszp2eOlvSeQJglyeE7QCzYSRVLUbxBaMmb3QWnFJgvZboHOwodVCGaQdR1GksXMSSS83je/yPHvzJcTj18JfiVAX56//aRDq+FU6Tudg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=atomlin.com; dmarc=pass action=none header.from=atomlin.com; dkim=pass header.d=atomlin.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=atomlin.com; Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) by LO2P123MB6104.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:25b::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.10; Fri, 21 Aug 2026 20:49:42 +0000 Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230]) by CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230%4]) with mapi id 15.21.0339.010; Fri, 21 Aug 2026 20:49:42 +0000 From: Aaron Tomlin To: peterz@infradead.org, mingo@redhat.com, acme@kernel.org, namhyung@kernel.org Cc: mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, james.clark@linaro.org, howardchu95@gmail.com, atomlin@atomlin.com, neelx@suse.com, chjohnst@mail.com, sean@ashe.io, steve@abita.co, rishil1999@outlook.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH perf-tools-next v4 2/4] perf trace: Auto-assign kernel symbol beautifier to function pointer fields Date: Fri, 21 Aug 2026 16:49:28 -0400 Message-ID: <20260821204930.679027-3-atomlin@atomlin.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260821204930.679027-1-atomlin@atomlin.com> References: <20260821204930.679027-1-atomlin@atomlin.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN9PR03CA0804.namprd03.prod.outlook.com (2603:10b6:408:13f::29) To CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CWLP123MB6607:EE_|LO2P123MB6104:EE_ X-MS-Office365-Filtering-Correlation-Id: 69bd983e-4f4a-4c29-e33d-08deffc5b996 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|366016|7416014|376014|1800799024|56012099006|10067099003|3023799007|6133799003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: 8ve4huT0GnBfigkJbYEYQPj2W+IUVGThIoYaonRV98bnvW68SCH8laaOBwBFzfEdfJQqCgEWAYjSP/XXblhrNG8gOSvGHcWHFxiuT7yE6q8cRluD4zPJjy9C6hE6KYRlZEEgsGtxUy+dRNS858V6JYGl+hQBpdVtXagX96BsszaKYuDUbrYWpoL8Q2Y2YPJtaIb/Ulm5ZUj0aZrhX+7OfDD8MzPMGry2LO2yvxY+upzoueWPWptXtZX6TQ0VTUtMkS/Exx5Enj0i2+FjWwfecaZswjSi2w1Y5S6nLhpVXoi6+XYffBUi9m3IUIGiYqQABF9YT+2kSGwED4wPqOFFFAxadCT6E3ZfvhnkCYLkS134j6SK35AdpeBwvVBheAkJ3EJOwOoR7zPbW3xM/9Ql6Mw/FjbCctuVOH/LPqiNsu8M93pa3RkGozg25qtH1xWjQ9sr1BI5zFO0RA73ASBy22J6GoMhjWeQTNwfTqCHGQsEmcl2t22HIqCHQNjKk/wh0PKe3JfpGbQhshRd3dKIMhOVTwuVirqxF48eo47nR/HC/uvYfCEtyrXpza1z90c+A08r70c91BTFWldwKvUrxirLuW5pztD8eBC+4x1h1SiEOc2ZraZouiIVQy4QvRHte+t5uTxG/Lev21+KsB5Xe6XQGbs3QU5j1D6cc4wDJYo= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(366016)(7416014)(376014)(1800799024)(56012099006)(10067099003)(3023799007)(6133799003)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eVRoc3lxczZ6ZFgxcUIvTnY2VXhGWDQwcndWVnFEdUR6Y0JLb3ZJQkJzODA2?= =?utf-8?B?a2ZaZGgySzJMQjJGQVpOcVdtYlpIcCtNdW9LZVdDSXFPblNGanNUSi9TbGFF?= =?utf-8?B?Vjl2aGdmOFV3WlVlMTdiQUFrZ1ZvbUpDb1NIclpaTFhLbGdhVUtnQTFEZEdU?= =?utf-8?B?LzdSdmYvWmZnVGx6dWhNWm9rRndXcGpXcFJGM21jNDY5eXFPcGptYjR3TnRQ?= =?utf-8?B?ZFBZRlNTejJjSWVDZHNNaGhPMFdLQThsLzh4R0h2MGZnVG42NDlPT0tETXM3?= =?utf-8?B?Q0Z3VEdnNHNQRjVnbm9lWUppc3ZzNm83bG1nSHAwS0RlQ1VGazdKU1VpZDcw?= =?utf-8?B?b2JNa0FFYnFBVnRPcXhMS3g2RlhtblJTczBrZG5ldnR2MXpaWGsyVmlDbDdV?= =?utf-8?B?ak90bHVXOGlEK0h5Y0IySUF3eEw3QlJ1MEJVQjJSMEM1dHpkMzlLQS85d3Ny?= =?utf-8?B?YVBPb0R2ZGJTaVg2VHFaN2cyMng2NTFFcWI3L3NNY3k5Sng1QTVtNVdSTlFv?= =?utf-8?B?bWZ0dlJ4WXh5WlJHQkNFQmpBNHJxMVlRWUhucEJ0V0tVWnNZYWp3bmlvQ25E?= =?utf-8?B?TlBoNmpqeFJwL3MrcjhZSmo4MUtVRVlEZkVSOVJYQ1JqdGwvRlhhcVFMbG45?= =?utf-8?B?S3VBKzVIZ0dPRG5XcndOZktHS2swZGxRazNaK2pQK0s2b0FSVTRwci82SmFx?= =?utf-8?B?d1M1ZUZIRzhwRUc2eDcvQ1plMHIyeWRlKzVRSW5pbU1NWlFFdUJFTW1pTmho?= =?utf-8?B?dVY4eUFPZlR0Ry9lSlNRMHpUSEliblVMa1ZKdjZhdEpBOWV2KzRydERoRFBu?= =?utf-8?B?cngzU3JxQ1ppT25NeFFNU0NCQmJYaVoxU1ZFUkdVby9pbXEvMVZvZW5yOTQ0?= =?utf-8?B?QURKYUpkUGZGRXp5ZWVxTkk1dHBTblJMOTIrSDdvclpDbmw4Vlg2UG5Fb2Fo?= =?utf-8?B?Vzhsa012b21xbm9IZVE0cUJBeWZIZExTVGQ4SGtqaUo4NktKY25RWmdGcFVK?= =?utf-8?B?WUZHcUlTZ1B2c0pTaFFwbHowNERpMmdoR3J4VWttMTVDU0Y5ZGxGUG9zUWl6?= =?utf-8?B?alA1Q21PUzhmNnYzbm1SUHA4N29YVkt4OEZpVXdzWnRGZW56TFo1VVE2eFNj?= =?utf-8?B?Vzc0eWdpMGdVazBLQTRmQVJsTVdpQTlOQVBodjIyYThXVll0NGRpZlAydmps?= =?utf-8?B?UThBdlUzVWxYb245aEJoS1B1WnVGVlN0NkFIYVRZZEVqZjVZREhOa1BZbkxU?= =?utf-8?B?M21HWDhEeVdPU0o2WmpRZTV4VC9zRmtoNktHVDc4cGlUamZDQmtmd3plaHNw?= =?utf-8?B?K2RVRlN5ZElnM29tQnQ4K1pIUU9wVmRKcFBrd3crVWlSTzYvS3BjeHIvcFV2?= =?utf-8?B?dnFNQWR3ZUpTL2RzQkZPR3U4Mnd1WHFSQ0o2QU95NU90SnZiSzI5NVdJUGlR?= =?utf-8?B?ZENxVWJQY3lUamRseGF6ajJLdGdkcVVOa2hXQmJidlVZY0oxM0F6SGZyclRw?= =?utf-8?B?bEJUK1B2RWVuQ1llbDNZZHFqVXd5Y1crVVhvWnh2Q3hPbmVZc1Q0NFRiRUgz?= =?utf-8?B?YWo4OVJEekI2YXZpOFMxZ3phUWFrR2drUEd0ZlNUMS9sMDZDZ01JL2xrV3RI?= =?utf-8?B?SHJ5S3BWVk5jS2xZMlpiYk5OL0JybWhqM0hPam4wUXNYbkZ6OUo3ZmJFTW56?= =?utf-8?B?OHBhckpWR0RVZ1JRRm8vc3JjL3VsQlNTM0pJNUEyY0ZBZWZEdUZnM3NNRkhI?= =?utf-8?B?b1J5TjZqY1hVQ0U1dXdFU1VwYXZoT2xKNXNCVnI0M1BhR1ZtWDNmMUlOczEy?= =?utf-8?B?dEZCeU0vTU56RzRIYkpta3dvWmxVMzV6K3Z0VG4vTzVUUmlaMHhQZ3l6WDR5?= =?utf-8?B?TkdkK3JnaXI3aktDYWFYQmc4MGNnK0RoQThqOWFQSy9rS2svV1UrcnpwRjl6?= =?utf-8?B?SzBFamQ5Qy9HcllJWEp2aUcweTFpUmxlSXRsdzFQOG12cGFUaUZHTTFIUVRz?= =?utf-8?B?NGhTaG9VOGlQY1FPQkpBQjV6dU1nVlZlbEJZNFZmRUczSnNCWFZTWC9wWWhs?= =?utf-8?B?dS83M3FWYVFnSlppRlR3ZThYVUpkVzJMbTBpUTJPdDlpeWQ0dXJvdG1jZkt5?= =?utf-8?B?OXdSM3QwOEZQQ3FxMGlYWmxHM0VIUlUyTk1KSG0wNmNBWFB6Y3BQamJObmNW?= =?utf-8?B?eEJkays4NzRtYjBGb0xCcDBxazdUM0RlL2s2b0pEeHUzcWdEVUNmMk1RUmdr?= =?utf-8?B?TXk3Z0JQZzkxeGxBZGJzNVNLcVpJZVRmd0FRL3M3TTNVZW5McThrd1ptb2tF?= =?utf-8?B?TWltMUN0MlF1NWRudXFJUlRLTFROTUtjTUpEa2krMG54Y1ZpdFVOQT09?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: 69bd983e-4f4a-4c29-e33d-08deffc5b996 X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Aug 2026 20:49:42.2405 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e6a32402-7d7b-4830-9a2b-76945bbbcb57 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: QEh3lKzyrsOSvWMx3WXAjufJibIG1Jko/YLhxouB1PuwEOOH8BLoU5eTAZfCSCl8MxQj8jsOKaL62Flr9ypv4w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO2P123MB6104 Tracepoint fields that convey kernel function pointers, callbacks, and call sites, such as "function", "func", "fn", "callback", "action", "handler", "caller", "caller_ip", "location", "callsite", and "call_site" are currently formatted as generic hexadecimal pointers by default. Enhance syscall_arg_fmt__init_array() to automatically detect function pointer fields by type signature (e.g., typedefs ending with "_func_t" or "_fn", or C function pointer types containing "(*)") and assign SCA_KSYM as their default beautifier. Additionally, register common function pointer and callback field names within the sorted syscall_arg_fmts__by_name lookup table. To prevent misclassifying dynamic string arrays or non-pointer integers sharing generic names, guard SCA_KSYM assignment to pointer fields and pointer-sized non-array scalars. This ensures tracepoint arguments such as workqueue:workqueue_execute_start.function, csd:csd_function.func, and xfs:xfs_bunmapi.caller_ip are symbolised automatically without requiring explicit per-event configuration. For example: =E2=9D=AF sudo tools/perf/perf trace --event workqueue:workqueue_execut= e_end --max-events 2 --show-cpu 0.000 [000] kworker/u32:15/236682 workqueue:workqueue_execute_end(= work: 0xffffffffab2f1420, function: toggle_allocation_gate) 0.132 [000] kworker/u32:15/236682 workqueue:workqueue_execute_end(= work: 0xffff8ac2c1adc010, function: flush_to_ldisc) Signed-off-by: Aaron Tomlin --- tools/perf/builtin-trace.c | 88 ++++++++++++++++++++++---------------- 1 file changed, 50 insertions(+), 38 deletions(-) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 003048946503..0a12d7b37d8d 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -2096,6 +2096,18 @@ static int syscall__alloc_arg_fmts(struct syscall *s= c, int nr_args) } =20 static const struct syscall_arg_fmt syscall_arg_fmts__by_name[] =3D { + { .name =3D "action", .scnprintf =3D SCA_KSYM, }, + { .name =3D "call_site", .scnprintf =3D SCA_KSYM, }, + { .name =3D "callback", .scnprintf =3D SCA_KSYM, }, + { .name =3D "caller", .scnprintf =3D SCA_KSYM, }, + { .name =3D "caller_ip", .scnprintf =3D SCA_KSYM, }, + { .name =3D "callsite", .scnprintf =3D SCA_KSYM, }, + { .name =3D "cb", .scnprintf =3D SCA_KSYM, }, + { .name =3D "fn", .scnprintf =3D SCA_KSYM, }, + { .name =3D "func", .scnprintf =3D SCA_KSYM, }, + { .name =3D "function", .scnprintf =3D SCA_KSYM, }, + { .name =3D "handler", .scnprintf =3D SCA_KSYM, }, + { .name =3D "location", .scnprintf =3D SCA_KSYM, }, { .name =3D "msr", .scnprintf =3D SCA_X86_MSR, .strtoul =3D STUL_X86_MS= R, }, { .name =3D "vector", .scnprintf =3D SCA_X86_IRQ_VECTORS, .strtoul =3D ST= UL_X86_IRQ_VECTORS, }, }; @@ -2198,38 +2210,47 @@ syscall_arg_fmt__init_array(struct syscall_arg_fmt = *arg, struct tep_format_field ((len >=3D 4 && strcmp(field->name + len - 4, "name") =3D=3D 0) || strstr(field->name, "path") !=3D NULL)) { arg->scnprintf =3D SCA_FILENAME; - } else if ((field->flags & TEP_FIELD_IS_POINTER) || strstr(field->name, = "addr") || - field_has_hex_fmt(field, len)) - arg->scnprintf =3D SCA_PTR; - else if (strcmp(field->type, "pid_t") =3D=3D 0) - arg->scnprintf =3D SCA_PID; - else if (strcmp(field->type, "umode_t") =3D=3D 0) - arg->scnprintf =3D SCA_MODE_T; - else if ((field->flags & TEP_FIELD_IS_ARRAY) && strstr(field->type, "cha= r")) { - arg->scnprintf =3D SCA_CHAR_ARRAY; - arg->nr_entries =3D field->arraylen; - } else if ((strcmp(field->type, "int") =3D=3D 0 || - strcmp(field->type, "unsigned int") =3D=3D 0 || - strcmp(field->type, "long") =3D=3D 0) && - len >=3D 2 && strcmp(field->name + len - 2, "fd") =3D=3D 0) { - /* - * /sys/kernel/tracing/events/syscalls/sys_enter* - * grep -E 'field:.*fd;' .../format|sed -r 's/.*field:([a-z ]+) [a-z_]*= fd.+/\1/g'|sort|uniq -c - * 65 int - * 23 unsigned int - * 7 unsigned long - */ - arg->scnprintf =3D SCA_FD; - } else if (strstr(field->type, "enum") && use_btf !=3D NULL) { - *use_btf =3D true; - arg->strtoul =3D STUL_BTF_TYPE; + } else if (field->type && (strstr(field->type, "(*)") !=3D NULL || + strstr(field->type, "_func_t") !=3D NULL || + strstr(field->type, "_fn") !=3D NULL)) { + arg->scnprintf =3D SCA_KSYM; } else { const struct syscall_arg_fmt *fmt =3D syscall_arg_fmt__find_by_name(field->name); =20 if (fmt) { - arg->scnprintf =3D fmt->scnprintf; - arg->strtoul =3D fmt->strtoul; + if (fmt->scnprintf =3D=3D SCA_KSYM) { + if ((field->flags & TEP_FIELD_IS_POINTER) || + (field->size =3D=3D sizeof(void *) && !(field->flags & TEP_FIELD_= IS_ARRAY))) { + arg->scnprintf =3D fmt->scnprintf; + arg->strtoul =3D fmt->strtoul; + } + } else { + arg->scnprintf =3D fmt->scnprintf; + arg->strtoul =3D fmt->strtoul; + } + } + + if (arg->scnprintf =3D=3D NULL) { + if ((field->flags & TEP_FIELD_IS_POINTER) || strstr(field->name, "addr= ") || + field_has_hex_fmt(field, len)) { + arg->scnprintf =3D SCA_PTR; + } else if (strcmp(field->type, "pid_t") =3D=3D 0) { + arg->scnprintf =3D SCA_PID; + } else if (strcmp(field->type, "umode_t") =3D=3D 0) { + arg->scnprintf =3D SCA_MODE_T; + } else if ((field->flags & TEP_FIELD_IS_ARRAY) && strstr(field->type, = "char")) { + arg->scnprintf =3D SCA_CHAR_ARRAY; + arg->nr_entries =3D field->arraylen; + } else if ((strcmp(field->type, "int") =3D=3D 0 || + strcmp(field->type, "unsigned int") =3D=3D 0 || + strcmp(field->type, "long") =3D=3D 0) && + len >=3D 2 && strcmp(field->name + len - 2, "fd") =3D=3D 0) { + arg->scnprintf =3D SCA_FD; + } else if (strstr(field->type, "enum") && use_btf !=3D NULL) { + *use_btf =3D true; + arg->strtoul =3D STUL_BTF_TYPE; + } } } } @@ -3297,12 +3318,6 @@ static unsigned char bitmap_byte(const unsigned long= *mask, int byte_idx) return b_val; } =20 -static bool trace__field_is_ip(const char *name) -{ - return !strcmp(name, "__probe_ip") || - !strcmp(name, "caller_ip") || - !strcmp(name, "call_site"); -} =20 static size_t trace__fprintf_tp_fields(struct trace *trace, struct perf_sa= mple *sample, struct thread *thread, void *augmented_args, int augmented_args= _size) @@ -3404,14 +3419,11 @@ static size_t trace__fprintf_tp_fields(struct trace= *trace, struct perf_sample * * Suppress it by default to avoid cluttering the output. * If verbose mode is enabled, ensure it is formatted as a * hexadecimal memory address rather than a signed integer. - * - * caller_ip and call_site are also expected to be instruction - * pointers and should always be represented in hexadecimal. */ is_probe_ip =3D evsel__is_probe(evsel) && !strcmp(field->name, "__probe_= ip"); =20 - if (is_probe_ip || trace__field_is_ip(field->name)) { - if (is_probe_ip && !verbose) + if (is_probe_ip) { + if (!verbose) continue; =20 printed +=3D scnprintf(bf + printed, size - printed, --=20 2.55.0 From nobody Mon Sep 28 12:33:11 2026 Received: from CWXP265CU008.outbound.protection.outlook.com (mail-ukwestazon11020140.outbound.protection.outlook.com [52.101.195.140]) (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 A9C9D35B63C; Fri, 21 Aug 2026 20:49:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.195.140 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787345390; cv=fail; b=IrfbBvLpvEUzPzAlZpWC8/cRJS8gm15sKA1qe0tYvBbeg2D6QohtAr20dSOG9cQEvz/UV/5wj4OHTSpN/l0PvxMParSrL71iex1U6ciPNH1R/Qp1nrEEJvswCSaqmBnESew/ec6xvyoy7Y63QyMv1MN9JQjVTzIVxmkYZO66cro= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787345390; c=relaxed/simple; bh=8uIAm1LzpZN8dLHCT4WDGOZRUNZ94W4NDRqcsRzTXeI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=fGHUXIF6Ir1ibVJEEl+y4s4QdcuhIAtRiAM4U/dziJkbmzoPbH22GI/ZNEO7uevegDtDpXD5tfTJd0Qtwek3YSE+Ygh8i9E1/wjpIjupKCTPMk9zRRdGtnlNuiQj4zejjCEYUTqsOocRYpSprvIhJKf0nNKA+8q0OrsIulPYn5E= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com; spf=pass smtp.mailfrom=atomlin.com; arc=fail smtp.client-ip=52.101.195.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=atomlin.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ttn9FWMU6NVsrAuiGDiEUvVj3VEUrgHmQgtgFUcfuuK0yoVEmq8q19p1gEHgS5n4EdXE+AEmlleq+gJN+BlzzEQDxVEOeM91n9amVbyagkPW9NzxhCr8Z/o1+tzg3qySItC9fEulO87vlP3Ky25QXh+VuDlWxo9+XgBJN32nMHXB2g20OaahXR/Tnb/Lhzh9IcZPAAkKUfsUwIJta/968nd6NRYZpFMF6ELOthn3/Wu0c/Woo0NhZKEMzM4aGRXAx6KCORoGLsiTX9e7UzIYNrZ0UVrj2866FTVVAcUfIcnO/9gYr4GDqZdhHvxPbAqkTemnWvcfqC0zPtwvIM8Yng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:MIME-Version; bh=ma9hmAqw2nMZX34p9OgclZuvb3Y8EY2aa4p184hr2VI=; b=wBL/SvhgD7fTCSH/AQZ7FHIx6GrsrN+gYfz56bw8bxOxioPWgyn1UZW2bR16eEeCDSDEFmCfP1RCxMPCYdUxni0PbkWn4/OV5xGUGbVzAuNWyN45nufJEw9qLptP50OlvM0JdMqOFHkfqPNsVuEJBJUyjW8eSgdOyaS+Cn5qP8U+QByYzQvNNozEDtFFAgYKpBx1oBDT/D20hXSP6tsHoYTneZCTy8zoyOdpJ5D+p6bKudZShbGL9L1CAkLXIf8t4u2r5JHFtGTyBZ48Gzck+57OEKVhXhH1EjBlr+g5en7R4uXQRy4u444ZdHfeE/3Hm6gfE1adkcExN+YGQkblcA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=atomlin.com; dmarc=pass action=none header.from=atomlin.com; dkim=pass header.d=atomlin.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=atomlin.com; Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) by LO2P123MB6104.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:25b::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.10; Fri, 21 Aug 2026 20:49:46 +0000 Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230]) by CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230%4]) with mapi id 15.21.0339.010; Fri, 21 Aug 2026 20:49:46 +0000 From: Aaron Tomlin To: peterz@infradead.org, mingo@redhat.com, acme@kernel.org, namhyung@kernel.org Cc: mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, james.clark@linaro.org, howardchu95@gmail.com, atomlin@atomlin.com, neelx@suse.com, chjohnst@mail.com, sean@ashe.io, steve@abita.co, rishil1999@outlook.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH perf-tools-next v4 3/4] perf trace: Enhance BTF type formatting to symbolise kernel function pointers Date: Fri, 21 Aug 2026 16:49:29 -0400 Message-ID: <20260821204930.679027-4-atomlin@atomlin.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260821204930.679027-1-atomlin@atomlin.com> References: <20260821204930.679027-1-atomlin@atomlin.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN1PR13CA0004.namprd13.prod.outlook.com (2603:10b6:408:e2::9) To CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CWLP123MB6607:EE_|LO2P123MB6104:EE_ X-MS-Office365-Filtering-Correlation-Id: 5f4ed5c2-ad4e-414e-0205-08deffc5bbe7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|366016|7416014|376014|1800799024|56012099006|10067099003|3023799007|6133799003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: g3uCyZlYDGFgv/Mr4uAEVnmtA5/R1iNkExKJ3va2eVZgagogWL/r1qOQgQrULmHxrkxnWvOSBUKLcCr6qeXl50TxQXOcT+rKorUY373JnIZtlZ4QyNj7lFsk4z5EF5uX+oUg5C8KC4k5+/LXofIQd+3q049PQmJCmquWQcQPNdFR1XmyS9f3dJSQmSPvmuQozyeGo6qX2sFBktpCuR2nMbBRljeZHxwjdT5RViFEfSbcbVUWlubI7DiXE85o0Lx4KXTlNef89nTg3TV0W+ZOuqwrYbfH4R+9CqPROGIpbMEfA6rQowtq9pTzHpQPcELZXK/pn4NyHSXcKuQv4gNkZEIigPrUN5Va/g7YngvWHmctleBDFNaAosnc4kz8GOOAGe6bHnHjLFfFWUOHimhbmZ08LWXwblHeCosOSnn/JB/DAcxGVu4kJl158A4NrZSS2dONnd7u/Tl/MeR91M57TSAVoV0dxpAkauqmnOngU3S1DbORDIJc3eD3XIBxDXU5RHMYJbt2o1FUKGW3bKZR09/gH0VQCe15g/kUwVkpN4WEusD13Mg5Ito+RBL99uy3P1cxsNuy2bD6SUY0wbP8Lh3uyKxHftuUyqq6W6y5lsFomH0X06I3Uj7pFABKJJfN7ZyVCqTCQPun6zSg1mHyWkcM5GgFW31IKCDX0A+TxB8= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(366016)(7416014)(376014)(1800799024)(56012099006)(10067099003)(3023799007)(6133799003)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zGeGLbO9rD3ZTcmUqgXJVrERt1gvgjg4C+t7i4ExjoVUHNz8HBNNVK8nYKL4?= =?us-ascii?Q?F1foWVlnlkTW6HA2H8q0P1kZZ4xeqgzHP7IefVxCBpmCliUpv46TFYPMNsmi?= =?us-ascii?Q?jUe4xNdDfIe7CetoCrG3BsUuOERt1k7qLhDQlM4g2YoU/AFSyxEpnMF+/kkK?= =?us-ascii?Q?DYV6FDX7lelMReqEE0Om+IpxDXIQtQ16FXa/HXiIun4z8rVRs4XKZfMXOUsb?= =?us-ascii?Q?zcnWKXzoeKIhA9fLbUorSPvSjlV7fAuqlvNc62ahS/UCSiZ7EHYGrwhDmBI/?= =?us-ascii?Q?zD26jvGeQxvSkdQCpsXkyNwThCNzxn+hKml4JQb8RL+G9EBy8DWn4i5fDRSI?= =?us-ascii?Q?NWmuqcqy62rqJkwKYkB4hsO0a199LF9wKpHpgxVsBMjaJppFdWSv58D7XxXM?= =?us-ascii?Q?P+os4ZoyVfI3Ap3jWuheNQLRhIw1U1GM+IY+T0U3s8zKnXKfFPLTgn0GEitD?= =?us-ascii?Q?ApI5IqTwTlMeTH+rFCWo26Mo2WCDh97FfBdmfYDKaqnBi0JjWdYxNzzhLBSb?= =?us-ascii?Q?9bpmL0eOdjbfBysgWSPjrISUXrDwG5RE/Nunc0ZgR5f9yufUJyaXkcZ9+17y?= =?us-ascii?Q?4CmijW1TIr4XpMl5MbG4hWMMleeKshGs57UuGNq5pBRseO0iRcg768uObVLu?= =?us-ascii?Q?QTnaOVgSovnZfDfYzpMVNVJeo61/jMFKeBIeLa9jhDaps769UNT6DFekEy51?= =?us-ascii?Q?IDiKM2aY72Z9a5yIQwY2RfvyGvV73kMyztZ1u7XW8tMP0epguSE5i/qFdGrm?= =?us-ascii?Q?eprl6iD7pFk2cgAXMk/VG+eJlqjrYe5N/w4pSEUpaJ5u0Fr0XjXHGKUZkLKR?= =?us-ascii?Q?bxC5eMlpca9lBH9mmbL6seclTPJuOyIesAUdAigFPoGswyS7gN0Z8tKu4JuO?= =?us-ascii?Q?rsoq4Hb5g+g7yCy0dydh/RvjQ+ocem95IgeYP9egQP0Dek5KxntDeugKMjUe?= =?us-ascii?Q?VLSKADo8iURh5WxhdnDtQxRTQ99IU+sfYZqDD3yK6UGatyKB1WPHkL1xbFc2?= =?us-ascii?Q?mKMJPbIlTkLNsSqHdWzHEHdGCBLD0xzrcsOjsukpn/L26FHQf751CGSq03bt?= =?us-ascii?Q?c5zsQlsHAgRVVuWpbncSbLdS32mZzn0v5K6F49zYkuNL9GzneDzoVtG1IKWq?= =?us-ascii?Q?oMhq9xMryhhz6YJZlmAl0N03T/ZHXOSGLzlkLnp1ikPWkLjWzQIVavjg1b1O?= =?us-ascii?Q?dzgdNCQtqIyX+oLvUNPT36ankqW7a4HeYAco4RXyl9wSDSOZiZ225O3WAElv?= =?us-ascii?Q?jRegnYK/245SpXnkMWylGg1Tv3IGYP+L/JdWpoWKW9ILLaMM1GP3NrUjVrYy?= =?us-ascii?Q?UJRndMiobZTu2G2bh1B7EbZyLceqSoSgtstLwI49l1x149PKfKTk0kvCHPER?= =?us-ascii?Q?xrTKc3Y65krIgxPdLMNAWk7vVxJvT+/wivH1/46pA78Vo7T9hqpXbjtp7EQI?= =?us-ascii?Q?bEJZJhyjQulUjQmVzTU5UgnMaITr0z51pRNHRyU15VZ2lmeEyVe8u3g3+9RC?= =?us-ascii?Q?rpQZ+wSyHL9JgQkRZokvbhRgqoR4mrWvxgY+SUSkZL17+RTwFqj3UyGxDFJh?= =?us-ascii?Q?y58sSIa0t2Mx+7PpOehrwdacCuQUUlBBLZvPVI72N5gXKdjXItdVXgcn54zh?= =?us-ascii?Q?Es1GUrud8+FLxP269f3I0NskU4Cs0YUzBKVXS0NYV/PV+AiH6ESYOR/kWa00?= =?us-ascii?Q?D2nYI1V00MLJnZoX9E8Pjax8QaN6LC3StgaaSvVH1Zu4aroWKBrJleI4qgk2?= =?us-ascii?Q?RCPOcG3Y7Q=3D=3D?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5f4ed5c2-ad4e-414e-0205-08deffc5bbe7 X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Aug 2026 20:49:46.0907 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e6a32402-7d7b-4830-9a2b-76945bbbcb57 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 4jV4FIh6wGSMi5cfWR8Xr9ymB5MS7xnArIAdzy5epKluc185T827KLOZhRZqnEXYOYbF+DxTAgdvVyonb0Q7uA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO2P123MB6104 Content-Type: text/plain; charset="utf-8" When BTF (BPF Type Format) metadata is loaded from vmlinux, 'perf trace' can inspect the precise C types of tracepoint and system call parameters. However, function pointer arguments are currently not recognised during BTF pretty-printing and default to hexadecimal output. Introduce btf_is_func_ptr() to inspect BTF type hierarchies (i.e., traversing pointers, typedefs, and type modifiers) to determine whether a parameter resolves to a function prototype (BTF_KIND_FUNC_PROTO). Generalise BTF type caching via syscall_arg_fmt__cache_btf_type() to handle structs, unions, enums, and function pointers alike. When a field is identified as a kernel function pointer, trace__btf_scnprintf() routes its value to syscall_arg__scnprintf_ksym(), enabling automatic zero-config symbolisation of kernel function pointers whenever BTF is available. Signed-off-by: Aaron Tomlin --- tools/perf/builtin-trace.c | 100 ++++++++++++++++++++++++++++--------- 1 file changed, 77 insertions(+), 23 deletions(-) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 0a12d7b37d8d..9f9494f9d9d8 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -122,6 +122,7 @@ struct syscall_arg_fmt { #ifdef HAVE_LIBBPF_SUPPORT const struct btf_type *type; int type_id; /* used in btf_dump */ + bool btf_type_cached; #endif }; =20 @@ -979,21 +980,61 @@ static size_t syscall_arg__scnprintf_getrandom_flags(= char *bf, size_t size, #define SCA_GETRANDOM_FLAGS syscall_arg__scnprintf_getrandom_flags =20 #ifdef HAVE_LIBBPF_SUPPORT -static void syscall_arg_fmt__cache_btf_enum(struct syscall_arg_fmt *arg_fm= t, struct btf *btf, char *type) +static bool btf_is_func_ptr(const struct btf *btf, const struct btf_type *= type) { + while (type) { + if (btf_is_ptr(type) || btf_is_typedef(type) || btf_is_mod(type)) + type =3D btf__type_by_id(btf, type->type); + else + break; + } + return type && btf_is_func_proto(type); +} + +static void syscall_arg_fmt__cache_btf_type(struct syscall_arg_fmt *arg_fm= t, + struct btf *btf, const char *type) +{ + char name[128]; + const char *pos; + size_t len =3D 0; int id; =20 - type =3D strstr(type, "enum "); + arg_fmt->btf_type_cached =3D true; + if (type =3D=3D NULL) return; =20 - type +=3D 5; // skip "enum " to get the enumeration name + /* Pointers to enums are memory addresses, not scalar enums */ + if (strstr(type, "enum ") && strchr(type, '*')) + return; + + if ((pos =3D strstr(type, "enum ")) !=3D NULL) + pos +=3D 5; + else if ((pos =3D strstr(type, "struct ")) !=3D NULL) + pos +=3D 7; + else if ((pos =3D strstr(type, "union ")) !=3D NULL) + pos +=3D 6; + else + pos =3D type; + + while (isspace(*pos)) + pos++; + + while ((isalnum(pos[len]) || pos[len] =3D=3D '_') && len < sizeof(name) -= 1) { + name[len] =3D pos[len]; + len++; + } + name[len] =3D '\0'; =20 - id =3D btf__find_by_name(btf, type); + if (len =3D=3D 0) + return; + + id =3D btf__find_by_name(btf, name); if (id < 0) return; =20 arg_fmt->type =3D btf__type_by_id(btf, id); + arg_fmt->type_id =3D id; } =20 static bool syscall_arg__strtoul_btf_enum(char *bf, size_t size, struct sy= scall_arg *arg, u64 *val) @@ -1027,10 +1068,8 @@ static bool syscall_arg__strtoul_btf_type(char *bf, = size_t size, struct syscall_ if (btf =3D=3D NULL) return false; =20 - if (arg->fmt->type =3D=3D NULL) { - // See if this is an enum - syscall_arg_fmt__cache_btf_enum(arg->fmt, btf, type); - } + if (!arg->fmt->btf_type_cached) + syscall_arg_fmt__cache_btf_type(arg->fmt, btf, type); =20 // Now let's see if we have a BTF type resolved bt =3D arg->fmt->type; @@ -1038,19 +1077,22 @@ static bool syscall_arg__strtoul_btf_type(char *bf,= size_t size, struct syscall_ return false; =20 // If it is an enum: - if (btf_is_enum(arg->fmt->type)) + if (btf_is_enum(arg->fmt->type)) { + if (type && strchr(type, '*')) + return false; return syscall_arg__strtoul_btf_enum(bf, size, arg, val); + } =20 return false; } =20 -static size_t btf_enum_scnprintf(const struct btf_type *type, struct btf *= btf, char *bf, size_t size, int val) +static size_t btf_enum_scnprintf(const struct btf_type *type, struct btf *= btf, char *bf, size_t size, unsigned long val) { struct btf_enum *be =3D btf_enum(type); const unsigned int nr_entries =3D btf_vlen(type); =20 for (unsigned int i =3D 0; i < nr_entries; ++i, ++be) { - if (be->val =3D=3D val) { + if ((unsigned long)(__u32)be->val =3D=3D val || (unsigned long)be->val = =3D=3D val) { return scnprintf(bf, size, "%s", btf__name_by_offset(btf, be->name_off)); } @@ -1077,14 +1119,19 @@ static size_t btf_struct_scnprintf(const struct btf= _type *type, struct btf *btf, .bf =3D bf, .size =3D size, }; - struct augmented_arg *augmented_arg =3D arg->augmented.args; + struct augmented_arg *augmented_arg; int type_id =3D arg->fmt->type_id, consumed; struct btf_dump *btf_dump; =20 LIBBPF_OPTS(btf_dump_opts, dump_opts); LIBBPF_OPTS(btf_dump_type_data_opts, dump_data_opts); =20 - if (arg =3D=3D NULL || arg->augmented.args =3D=3D NULL) + if (arg =3D=3D NULL || arg->augmented.args =3D=3D NULL || arg->augmented.= size <=3D 0 || + arg->fmt =3D=3D NULL || !arg->fmt->from_user) + return 0; + + augmented_arg =3D arg->augmented.args; + if (augmented_arg->size <=3D 0) return 0; =20 dump_data_opts.compact =3D true; @@ -1095,8 +1142,10 @@ static size_t btf_struct_scnprintf(const struct btf_= type *type, struct btf *btf, return 0; =20 /* pretty print the struct data here */ - if (btf_dump__dump_type_data(btf_dump, type_id, arg->augmented.args->valu= e, type->size, &dump_data_opts) =3D=3D 0) + if (btf_dump__dump_type_data(btf_dump, type_id, augmented_arg->value, typ= e->size, &dump_data_opts) =3D=3D 0) { + btf_dump__free(btf_dump); return 0; + } =20 consumed =3D sizeof(*augmented_arg) + augmented_arg->size; arg->augmented.args =3D ((void *)arg->augmented.args) + consumed; @@ -1108,33 +1157,37 @@ static size_t btf_struct_scnprintf(const struct btf= _type *type, struct btf *btf, } =20 static size_t trace__btf_scnprintf(struct trace *trace, struct syscall_arg= *arg, char *bf, - size_t size, int val, char *type) + size_t size, unsigned long val, char *type) { struct syscall_arg_fmt *arg_fmt =3D arg->fmt; =20 if (trace->btf =3D=3D NULL) return 0; =20 - if (arg_fmt->type =3D=3D NULL) { - // Check if this is an enum and if we have the BTF type for it. - syscall_arg_fmt__cache_btf_enum(arg_fmt, trace->btf, type); - } + if (!arg_fmt->btf_type_cached) + syscall_arg_fmt__cache_btf_type(arg_fmt, trace->btf, type); =20 // Did we manage to find a BTF type for the syscall/tracepoint argument? if (arg_fmt->type =3D=3D NULL) return 0; =20 - if (btf_is_enum(arg_fmt->type)) + if (btf_is_enum(arg_fmt->type)) { + if (type && strchr(type, '*')) + return 0; return btf_enum_scnprintf(arg_fmt->type, trace->btf, bf, size, val); - else if (btf_is_struct(arg_fmt->type) || btf_is_union(arg_fmt->type)) + } else if (btf_is_struct(arg_fmt->type) || btf_is_union(arg_fmt->type)) return btf_struct_scnprintf(arg_fmt->type, trace->btf, bf, size, arg); + else if (btf_is_func_ptr(trace->btf, arg_fmt->type)) { + arg->val =3D val; + return syscall_arg__scnprintf_ksym(bf, size, arg); + } =20 return 0; } =20 #else // HAVE_LIBBPF_SUPPORT static size_t trace__btf_scnprintf(struct trace *trace __maybe_unused, str= uct syscall_arg *arg __maybe_unused, - char *bf __maybe_unused, size_t size __maybe_unused, int val __mayb= e_unused, + char *bf __maybe_unused, size_t size __maybe_unused, unsigned long = val __maybe_unused, char *type __maybe_unused) { return 0; @@ -2579,7 +2632,8 @@ static size_t syscall__scnprintf_args(struct syscall = *sc, char *bf, size_t size, =20 default_scnprintf =3D sc->arg_fmt[arg.idx].scnprintf; =20 - if (trace->force_btf || default_scnprintf =3D=3D NULL || default_scnpri= ntf =3D=3D SCA_PTR) { + if (trace->force_btf || default_scnprintf =3D=3D NULL || + default_scnprintf =3D=3D SCA_PTR || default_scnprintf =3D=3D SCA_KS= YM) { btf_printed =3D trace__btf_scnprintf(trace, &arg, bf + printed, size - printed, val, field->type); if (btf_printed) { --=20 2.55.0 From nobody Mon Sep 28 12:33:11 2026 Received: from LO0P265CU003.outbound.protection.outlook.com (mail-uksouthazon11022106.outbound.protection.outlook.com [52.101.96.106]) (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 5A01436A37B; Fri, 21 Aug 2026 20:49:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.96.106 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787345393; cv=fail; b=sKu0upCBXKbeWeX+uSDBxjpUZUby7WhG7Rcy/KTBE8buf2l5JjkZa2E/HtuGB3UBxhfmL7iKF0EeM1s13CnBjZSZojy/zx6zUCOT12UztWWedvoSfmT8tLapNIKtweXYPBInjY9yxTD+u78QQjD1Sk2v7n/RdeCASqpKOpQ1DlQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787345393; c=relaxed/simple; bh=KSzkEkWyVNrAW4939Y+u0MYFzxls+lwsFKNV6uDG1Lw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=vCyMs6yNor19uhiIEStA6QEWB8eeKqI2FbpIZpCjyPIn35HMnUcn2PejLrLaBlXv3clULS0yJzx5IP9B1FxpzwrrH/jM4+fkPxZxycr7v0dnbAMV70uhdrCp4sZuAL5nX24aYtOR4K5VUFm9MCNUTtxLOkNSN8K85SE05OPmKe4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com; spf=pass smtp.mailfrom=atomlin.com; arc=fail smtp.client-ip=52.101.96.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=atomlin.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Z/MvppMgEs1o1P04Jy8cXHhR1N/+9hYVG5BBhLMLNuyVEKbSw5Fsf+vaR8n0oHrGLzAMEE3fdtfAli9/T6TKR/3ZGCkF2cwZMkv361EeTggnw3egMWH1ed+kT4d6if0g3Ed0205sh5sSKCuX0N0Fi37D9AEm0MrideX98fCUACqiD9b2sSEQSreRSW3LxNIgkZ3w02eacz+Nqi8l2s66q/qIk7nytbW9Os9zU5/UTjI2KhufW5u5zXZTxb6mlyBHVw+SXsU/htmhTXNAAEyY8VQkhS640Eh3O06S0lqR5w+kULNbfd5/WgV0/z5RrXfTUtdRo67FrKIVrTfyDkY9NA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:MIME-Version; bh=RiOjqwRYcmOSgM2wzySgoIHISgvp6LKypH8lAlqc8Vg=; b=QlDNRpyD+5IP5P1GXmJ1AhOGNDhVkF99ZY/MsrPNh0oQzfgZDqhDnSPwQ36vp2/xhNQLv8qt26oqncCFvTSQebG6QP0k46+/5VrnQhra0cjeLDkIEF0QfKJKY2qyARgQc1J8iHlM434o4acVUrXhV2ZHbPZBj1JRbDdxizhh7k7aC98+bQwDhscLPUW6lRQNp4MTB+Lf3AhTLZSoz1h6MPp52AgCSW0PqhmOZALteujQvXZkaZtJx7jrSjCGIsUgFvgr5lVqcfhRtfaGqlL4zRNzIkGZLDo+OHyK76dXiPr3iEB50AtC1Pws+nimtvJcRnq1jyeSR4Rk3HZbKoK9yg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=atomlin.com; dmarc=pass action=none header.from=atomlin.com; dkim=pass header.d=atomlin.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=atomlin.com; Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) by LO2P123MB6104.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:25b::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.10; Fri, 21 Aug 2026 20:49:50 +0000 Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230]) by CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230%4]) with mapi id 15.21.0339.010; Fri, 21 Aug 2026 20:49:50 +0000 From: Aaron Tomlin To: peterz@infradead.org, mingo@redhat.com, acme@kernel.org, namhyung@kernel.org Cc: mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, james.clark@linaro.org, howardchu95@gmail.com, atomlin@atomlin.com, neelx@suse.com, chjohnst@mail.com, sean@ashe.io, steve@abita.co, rishil1999@outlook.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH perf-tools-next v4 4/4] perf tests: Add shell test for kernel symbol beautifier Date: Fri, 21 Aug 2026 16:49:30 -0400 Message-ID: <20260821204930.679027-5-atomlin@atomlin.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260821204930.679027-1-atomlin@atomlin.com> References: <20260821204930.679027-1-atomlin@atomlin.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN9PR03CA0636.namprd03.prod.outlook.com (2603:10b6:408:13b::11) To CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CWLP123MB6607:EE_|LO2P123MB6104:EE_ X-MS-Office365-Filtering-Correlation-Id: f1f9465e-c053-477f-f29d-08deffc5be45 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|366016|7416014|376014|1800799024|56012099006|10067099003|3023799007|6133799003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: JnUEUW8SrWryD8d8G4FWHLHuDLvFSQ0TDzU6R/mzo1+qCsMZTQOVWhoDJqM30J7s09DJMqGNzILJzzjlRj6AkLfC3/ZpYTNKU/B6mcgdxcu0W2aQig5qBcIVDeiBDrBen0chJGe+1bIcdhaRUnXg51tRBOWxJcbC9zm9vxm5E+AjAskK9kUjvh6TUqcDJzGMMB+e0YSZpyiO/pGrBCde2c6J74GHNBdwNH9NRY8akIaTVNRNGldY3yEHrusKzdl0XwTBamh7tQutQEtH53ypsPGLHKwRQexN58h63cXgXkTNiZxIPdwy8O6exONt5wPjHfoZuBgkhZ77KQ8UYTLeW/0mSbhNjqHvWOlp5FBQgJNhl7uQslFDv2kL2v74juKwdOW/HcmH84/Tgztf2H2DWEjfMefEvPy26LoyjwVLptliAQLVlp2S+2OmUqDFCO5BqkNUzOfBzh/IMF+z2jdOqByiNSmXNYCM67MpGSysuYi0Q9n2hnP9i+N+rzvMRqugt0DjRnO0oqj1NCWc/Wy5q9XNG5Th6OWYW0uts3bL3VNcUuhA4XRE6rfTBAuLkUDmF0ZQRdpdju5BdAqxwpE4VXFUzr/Siw1Xk9Rlw8aLK4Bb7VpV7XQPdsQuPWFciu1qzADVcZPPo1JphE4qKPgxOHYqMn4D5hX1ANTemwZAFpY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(366016)(7416014)(376014)(1800799024)(56012099006)(10067099003)(3023799007)(6133799003)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?c9hBxscF2yYEJq5hp6lu/xYOmVjj70TfHafYwcPO8InG5pCrov6uF41bx9xJ?= =?us-ascii?Q?x6W9JAXBUZcZx1bBkss67juOf8WqNekD0HdpKu058TA4/12RGDt494RmiBxw?= =?us-ascii?Q?jfvM/sd8YSLVWDBcBrj2uRKUCaLc2zNixP1lpmIVP1IY34EIMhsTVyB6itG0?= =?us-ascii?Q?vd9J5SB3il4ue5JH5OrNnoM4sAuWjkGt1VPObLo2IbT/bjlm0RR/yVf3XXTm?= =?us-ascii?Q?s207qWMnznqcevjhQsv0koihucCI+bTaAEYEP5ZFxAyuEkmf3yBvl0ba1PL6?= =?us-ascii?Q?X2yCRRQT10V2RVnQwYCrDa9a7Rm/zlPetBHQ1Ui3fh/jSDtJgaKvclvv4w7f?= =?us-ascii?Q?lnd3WnLZ1Hd6iNNIJ9C6KKNweeGZ1vDrISCgQoJmzjN90elkNC+U64ixzNob?= =?us-ascii?Q?ShmFDiI/+4UIma6HOppoT3gNpfH5QI6KuCIBLD2Dd6PJdz0t0165e6OSfpva?= =?us-ascii?Q?c9mssSz1BSJDvpG2RlotDATEVHLiaErrXmT61amRG8ptLy5B3aoeQZF3+bNx?= =?us-ascii?Q?nmJUX92VLxyoarK7zO2iE1xRSJJTvtKyjrPyI2YoKzKnxwliQFnWyCFj/1w3?= =?us-ascii?Q?bvhNXaZZEJM2BCleQzqKrfmeS8XgCowm57tyOHP3OiHNoKvL5wCEFwpJqt8u?= =?us-ascii?Q?buIjd/ISuyECuVWg7MOGxk196FiV3Gg1PBJ62MqJWD8fAmvWBKxfS0pULEPG?= =?us-ascii?Q?qMAtCfnVepCLmfz0pZv6yuDyf44HqVJeEqijmkT8TIfagtEMUsKMgroKZlAW?= =?us-ascii?Q?l+JvGNCh3s/v/N9VuoaHtzyUaays4kHlnpNgkRnpqdARcyATtiwB35uDQoD4?= =?us-ascii?Q?rwBzlcA1N5NXp/bM0gnMkN3/ex3pzID+6P9PDNdw3Vt6JXpG1ZBq6u29e67B?= =?us-ascii?Q?c6HMJBYiZ/h9AQGdWFiWHUFpBwSjGzoHLr1WjLs3/6SAE7Z/OIwJy+gAUIPE?= =?us-ascii?Q?VRu3J44SBPNKT/4L8yHZnSrgHACgVkWx1sts8/iGzXgE2jHr/NromFbbnETQ?= =?us-ascii?Q?Rc6OyjHpx5n6nqwRNh7kTPVeToUl+jiXa1NWVPmuld6H8CimHVK17Gs2Ep7s?= =?us-ascii?Q?HfkmHxEqc/rp42/o8cHlucSyUIMwN1MtHbwEvnYOxqjb34pPu7ZwS9k0rPAG?= =?us-ascii?Q?pY4ehaiDF+yXCumDwXuoEX1HhxBuO7d6EXvDdAckYdgoCamOi6MdY5qxufot?= =?us-ascii?Q?pd6yW/d0mX2DpJ+fd59VaY1ziB+qWU8H4Pioh3YFr6dlUCdCSOhcouCWjiv2?= =?us-ascii?Q?lulGIvgeCXtjhyExuv5Tp4hn0H6J6BRHkIxpgTRUiM7qwUu0QHoO26sgh2Ju?= =?us-ascii?Q?Nl+Rp8i0WlzKKo+QK3SGV7yX9DqXdiWkWr/NfGOHgXGKBg3RWodixuuJO/WC?= =?us-ascii?Q?7YgZPPkMDYWjJvukfykKjFO08ntlKqBC5kQCT3ccRgJi8346KS1Jmu8s2dcW?= =?us-ascii?Q?kjlNLsh2Ou7vQaxe1WE5rHrEFLOrSc1eFUTd+6YmqbRzhtVOB/+xm21d4Mnz?= =?us-ascii?Q?14wbVXjXQOEV+Bj1oeAdkSQO2/VsTZ4freyUXoYfnohm9M1WrUEErgFo4eUf?= =?us-ascii?Q?yQr0uw4mJyxWIx0V7eT0qdNNrbe+HAs2kcY10XGESw3/NkCc5yvZ7/ym0mo3?= =?us-ascii?Q?j1vmhMW8UMxENFbOnIPKm2k4q2rCMtAjGFu0DpeNqjugCsdlpaJ4ElZ4g4Gr?= =?us-ascii?Q?/ac1+IfyOe1Ys6ZrFrCJrhmrMpxAPhYtgZLGSdDP4mRpX9JP0fglGR3OMVV8?= =?us-ascii?Q?NMUqssUTJw=3D=3D?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: f1f9465e-c053-477f-f29d-08deffc5be45 X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Aug 2026 20:49:50.1090 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e6a32402-7d7b-4830-9a2b-76945bbbcb57 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: hDHy2dmfjzP/DwwikAn2OPJSyzaGxztKjIxqKODCNx9XzYhsVVRZqenCPPwXXjPaUjlKndSxsE7Uq0L6KxWPyw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO2P123MB6104 Content-Type: text/plain; charset="utf-8" Add a dedicated shell test script, trace_ksym_beautifier.sh, to verify that 'perf trace' properly symbolises kernel virtual addresses and function pointers using both the default kallsyms beautifier (SCA_KSYM) and BTF type routing i.e., --force-btf. Signed-off-by: Aaron Tomlin --- .../perf/tests/shell/trace_ksym_beautifier.sh | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100755 tools/perf/tests/shell/trace_ksym_beautifier.sh diff --git a/tools/perf/tests/shell/trace_ksym_beautifier.sh b/tools/perf/t= ests/shell/trace_ksym_beautifier.sh new file mode 100755 index 000000000000..c030b03e2b66 --- /dev/null +++ b/tools/perf/tests/shell/trace_ksym_beautifier.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# perf trace kernel symbol beautifier tests +# SPDX-License-Identifier: GPL-2.0 + +err=3D0 + +# shellcheck source=3Dlib/probe.sh +. "$(dirname "$0")"/lib/probe.sh +skip_if_no_perf_trace || exit 2 +[ "$(id -u)" =3D 0 ] || exit 2 + +test_ksym_kallsyms() { + echo "Testing perf trace kernel symbol beautifier (default kallsyms)" + output=3D"$(perf trace -e kmem:kmalloc --max-events=3D1 2>&1)" + if ! echo "$output" | grep -q -E "call_site: [a-zA-Z_][a-zA-Z0-9_]*" || = echo "$output" | grep -q -E "call_site: 0x[0-9a-fA-F]+" + then + printf "Default kallsyms function symbolization failed, output:\n%s\n"= "$output" + err=3D1 + fi +} + +test_ksym_btf() { + echo "Testing perf trace kernel symbol beautifier (BTF)" + if [ ! -f /sys/kernel/btf/vmlinux ]; then + echo "Skipping BTF test due to missing vmlinux BTF" + return + fi + + output=3D"$(perf trace -e csd:csd_function_entry --force-btf --max-event= s=3D1 2>&1)" + if ! echo "$output" | grep -q -E "func: [a-zA-Z_][a-zA-Z0-9_]*" || echo = "$output" | grep -q -E "func: 0x[0-9a-fA-F]+" + then + printf "BTF function symbolization failed, output:\n%s\n" "$output" + err=3D1 + fi +} + +test_ksym_kallsyms + +if [ $err =3D 0 ]; then + test_ksym_btf +fi + +exit $err --=20 2.55.0