From mboxrd@z Thu Jan 1 00:00:00 1970 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 34D502E091B for ; Mon, 24 Nov 2025 11:39:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763984381; cv=fail; b=LXPB6LAej0hD2vGImJYp0IDEo0Yq7leR6rvH/pHGHgWcfDjixmi37wxWu3ybYtD+VUKhgYODYvhkyVREoN1yQlSIGqfo5KtMItjf+QvNfO4Zp+DZTa0by2DJmj8Mb3j2Pn/VL1W2vvJvg/0mimIfd1YH+KA296kY6qAxcr9i34w= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763984381; c=relaxed/simple; bh=xp6HK+c2PzS8Apf5zULG18aufQZRkUNIhCHaYp8W4Qw=; h=Message-ID:Date:Cc:Subject:To:References:From:In-Reply-To: Content-Type:MIME-Version; b=mcIC5SRe6VdbVEMcza31fapNLOStd4XwrchoqogR+W413lgyoLsDhB7fuZk2AfapO6a7IAJOxkfY8hdMIS+R5XKUInrR0ikVWLIPuMRofniJRoMriEZB3/fb0ShkpPZejSYdptaTWlWDKSzC5LdRaWYrg1oSqPHll4npAYSvkiM= ARC-Authentication-Results:i=2; 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=IdIPCNnB; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=uxmN9RnG; arc=fail 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="IdIPCNnB"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="uxmN9RnG" Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5AO8v6Nr715903; Mon, 24 Nov 2025 11:39:17 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=G0GV0tjb0cyuWYNsAkt3zt/OQPsrRc6XGl9kuKiGIp8=; b= IdIPCNnBXMNpOjGne9dfqRsm4Aext7CS9P4iDioRQnLn39oh9LoM5Ghf3kH5FYY+ /Py9PmsB/vgALuHR1H1OUOZvip4Yb1jeW2JhefUkGnrI1D3hZY0vaNWrUw99NQxq +G6B5x3LfBpXUgYkJ4Whqu0Gg3e9OnjSog0pY9I/a2AcC5nqMEn2KiTuWSYR2rF6 xp8Q0oIBBO74arc2dbLoUAJja1fJSPPwPYg9xO4b//t/cMZ9xjHauAdjyXp0e902 K0Y3aTmFjofYL8zlXUR9lTpQdGsnZo0ZtVxKn+9epTbzwbJx8a04P+QuNPUZazBI Kgx7ly9XVfSKb5MH9CjOyQ== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ak8dd9v6v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 24 Nov 2025 11:39:16 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5AOB4FVB018930; Mon, 24 Nov 2025 11:39:15 GMT Received: from cy3pr05cu001.outbound.protection.outlook.com (mail-westcentralusazon11013041.outbound.protection.outlook.com [40.93.201.41]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4ak3m80mnr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 24 Nov 2025 11:39:15 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WvcUXUPsud982YHWsPLYAsdHLbWPsrKrR5E1LRidM0GH/t7ERUNJFnEA+YkDKBsbVKncUETlr4I+Xjrkp5LUMjKdzd1XS/oPTXAUIa3QHuDBbE1bJHqFZ5cVw5LR10FszTB5TFyzkSekiu7OKJwrI0vaJ+fnU9VDk4dZdN5GyPFwbUrC+pEFKkaDoBI+eWK+4sW+BBuNNCpHrzZS8srKEVnJv+MMxqCCDqFVaeJ0wg8CGVLP5+3p+c8IFOXH5vp7effitJnvD1eDoB5P3YxJTbKSk14stC/Zzewx3CCdnOrFDS4RYaSTPobELhgiLzHjHsFC32qrPJmh6BBfAbF3qg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=G0GV0tjb0cyuWYNsAkt3zt/OQPsrRc6XGl9kuKiGIp8=; b=e1Opv50P8d/RuzeKrFjignHO/OxfozEY6Yu2bJZRGSQ2He3D7O9qsMgeU+QbleDi4L60V/qnyNcI3GWBF/xQfleomSEeOyAbElMncnZHvyYbv1ZxepsZXXLARY53X7OiOrLvwA9Z5SiBkIFwwRafbgsOi1xbBcFTCi1uTaOjUNTLuBdeBiutlAC7hljFYLxbXeT4sRvAxiYrDX5uuS+OEutHVZlTSJP1ndCpVNn41IpxymjuwH8mE3R/i27T0gU5xXnB+a6B8hzOb3dVDrkqXXhsj9J4jx64/I5dDYOfXuLTXNKtoilBaEy8fDczmzQcnffuWho6QW/X43uCr5nSHg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=G0GV0tjb0cyuWYNsAkt3zt/OQPsrRc6XGl9kuKiGIp8=; b=uxmN9RnGuwsjwGO/Qs+r1KkcU9aApHhloJ/cZQu8VidrSwhG2YDqz9MwKDX9q7wQ8XxtzBYlUAvwawsXOM1qQlnhGJKnjvmPVKWS1jsx896mjq9Kjz+FYhl4R/p7GN2f+UbhOjO1RYDQmSsSljEMIcXmwfN0kzJFo5aHs9JVmUk= Received: from SN4PR10MB5622.namprd10.prod.outlook.com (2603:10b6:806:209::18) by IA3PR10MB8091.namprd10.prod.outlook.com (2603:10b6:208:510::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.16; Mon, 24 Nov 2025 11:39:12 +0000 Received: from SN4PR10MB5622.namprd10.prod.outlook.com ([fe80::6bce:37ef:d1de:d084]) by SN4PR10MB5622.namprd10.prod.outlook.com ([fe80::6bce:37ef:d1de:d084%4]) with mapi id 15.20.9343.016; Mon, 24 Nov 2025 11:39:12 +0000 Message-ID: <42761dfb-b58e-49b0-bb62-dd548c238b8b@oracle.com> Date: Mon, 24 Nov 2025 12:39:08 +0100 User-Agent: Mozilla Thunderbird Cc: alexandre.chartre@oracle.com, linux-kernel@vger.kernel.org, mingo@kernel.org, jpoimboe@kernel.org, peterz@infradead.org, david.laight.linux@gmail.com Subject: Re: [PATCH v6 00/30] objtool: Function validation tracing To: Borislav Petkov References: <20251121095340.464045-1-alexandre.chartre@oracle.com> <20251124110425.GAaSQ7uSffz7xDayLJ@fat_crate.local> Content-Language: en-US From: Alexandre Chartre Autocrypt: addr=alexandre.chartre@oracle.com; keydata= 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 swLliy6PdpST In-Reply-To: <20251124110425.GAaSQ7uSffz7xDayLJ@fat_crate.local> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: PAZP264CA0033.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:122::20) To SN4PR10MB5622.namprd10.prod.outlook.com (2603:10b6:806:209::18) 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: SN4PR10MB5622:EE_|IA3PR10MB8091:EE_ X-MS-Office365-Filtering-Correlation-Id: 23f94877-0395-4b4a-a1da-08de2b4e16a9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?B?QWVjc0RFcy95aVpnd0FtQkJLWktZQWlnRzR3d2xibDRSVm9kQ3k1d3d2RDVk?= =?utf-8?B?ZGtmSDhpVGxHenQ0UDhKRUV0Y21HR1VYQjBjSDZxMjZOSjJXQkxJNGwvTnJL?= =?utf-8?B?MXpqRmYrSk84VHdSNFpFTHBYTmNjLy85V0Z3cFRERzU3cHhjdEVkcTRFRHph?= =?utf-8?B?NysvUnpRaFp6V1RzWVNKQmVRK2c0TTk1eGh5Y0Yvdng2U2VUNjRuNFlmV1JH?= =?utf-8?B?ZE8wRW1sNkJZN0JIcE9IYkVOajFMYUViTFRTNzZCV2RlQ3QvU0pXTkxHZWtF?= =?utf-8?B?c09PY2VqNlpaV3preGNLdzdWaHVyRkVUdktGNjZLOExrY0xiRGRlZCtpcU1P?= =?utf-8?B?RnFocjcrV29rTW8wQ2V2NElXOHU2dm9WeUVWNVhkQ3RDNXJ2eHZmeGsxdDBC?= =?utf-8?B?QWJYNjVvWW1KTWhrdTNTdDBGaHN1VHFEeStwWmV5WkNiNlBBQ2RldzN5RXVl?= =?utf-8?B?QUJFVGN2ZHFCa2ViTUFiUGNrRWJNTWNNOHJMVmRWdVZsOWJxYUdkNW5KVWFH?= =?utf-8?B?dnRLZUVrK0FIK3R0Wmt6enpuSk5YRENvV3BIVFJSWlZYWjFwTElBNzRhNysy?= =?utf-8?B?dTRQR1R4d1ZHZG1FYTI3bnpWVlo1WUpnMVRpdGZpZk5vZlkyTjlyNDRISGV4?= =?utf-8?B?czRrSGpwY0pFaERydTRnV2hzajlvd1J2ZnhkSHlQbzAvSVlqdFJ0cXQvUWxX?= =?utf-8?B?anJOZkxSaDEveXUrSGQvWXR3QjZ3QmtKQ24ycmNaM1JtOWkzeGRXd2owaE9K?= =?utf-8?B?VC9WSjFHdjNlNERUanF6d3U4S01zSU1yNW9WSW50M1ZGcCtUcVQ2OFUwSVVy?= =?utf-8?B?TGsrakQxMk5vVk1mMkxobzZRZGk4YXpnNlRZVkhnVmxvREpuUEpRQTZ0cHJC?= =?utf-8?B?YUh1b1pnUk9OQWdWNHI3TWIyZ0JPd2FNQUhjL3Fyc2xubDZzeHRSUm9WZGNu?= =?utf-8?B?d1IrdWJTTWtUd3h2SDU4YTQrVVBrOEJGcFZrWHo3cXpGR2lPRnhONWRFY20v?= =?utf-8?B?MExDYUpZTnVnQXg3MUt2bjJIL0dpS2UrMWZLUjBIbFovQXk5SEdIZ0I2dXpU?= =?utf-8?B?YUNiMFdtK21QKzRKWTl4UDlLSzZDMHhOdmVrNDdXVWVWWis4WEFqZTZQaC9M?= =?utf-8?B?WWM1YzhENk5NZ3ZlNmwxN1AwKzB5QUQzb2hPcW5ramhldEpqaXlzblpubHdJ?= =?utf-8?B?d1g0ZFZLRFRqYXYyZWh2c2ZhZlJXVGdMMm1yY0QyOFFZQU16ZGwvRXhTRlFL?= =?utf-8?B?YkxyWFVqbjQ3ME5QUVV2L245RmlwcHJhNHlQdXc1S2M5VHRsc3ZGTEQrUzdm?= =?utf-8?B?SUp1MGdVL2dTa0FVek9oT0pwMG1GVStZSkFFNWxNM3ltSExKZU05UUtkWHp2?= =?utf-8?B?UDl0NUhIQ3lVV3d1Njd1Vmx0dzFidXFHWS9tVjVsQmlERGY2M0lOSjJ4Wkh3?= =?utf-8?B?RTFNRU9UREQyZzE3TWVLNkd0dUNwSllRcUNJUnhkNm5NSXBCQ0dlcEczSWxN?= =?utf-8?B?ZjQ1SDhiYWZYNzMxTnpJVU5LTVZjaXFCOVhFTWxEMk5MUUpzZ2lXdkk2Yzhl?= =?utf-8?B?MGlKQ0k5akM0L1N3MFRiR3lIMkJQYmp6T0dIV1RVTXhJY3RxUnhWTnZWR1Av?= =?utf-8?B?dE1WVkllNGN0dVBzbC9SVndCd0szQnQ2MHVtTUpIVGZ1bUQxeW9FRHRHQzRy?= =?utf-8?B?WmhIR2lQVFRwdWZyYkQxVjNiSUFWYUgxYVc1Z3p3WnNZQjhVRUFtVTlHTllz?= =?utf-8?B?Wk1ZeUR1YytRREx4LzRvVUgrQWFnZkhGYVVlYkZ4SmFXRE5pRTFmRHdGbUQ5?= =?utf-8?B?cEhVR3dnVmh5R3NFME1MT2VEQStQaDY3dlB6OXd2cDVNa0o4dEVnanE0SVJF?= =?utf-8?B?Yk0zdVFaWmhpK1ZJRlNzYVNGZDNhaG5aZ3B1SnlVT3pmR2hBQTVLYWphQ1VF?= =?utf-8?Q?qFOIJbqfaGoFNzlcjR+dCdDucEztm763?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN4PR10MB5622.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(10070799003)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?V0lMUlExdzliTnlYeE95YW5wbm1QTjBvSzBGc0Q4ODJUNEhwVjlsYWdBaUhG?= =?utf-8?B?d0YzaEx4ZlhUNDRybkNRSGZ3a21WbE1nRmU5TGwxbFFQaklFKzRaK1NpV0Nw?= =?utf-8?B?dDRlOU9jVU4wWXNTTm1nc3JZajh3eXE2RkhTdVIxb3pISU1LL2pvVEhHTTRB?= =?utf-8?B?MXdlbGtpWHg5V0ZBVUFkMmt0ZTg0TkJVNko5MHFGNi9leSsrdzV6dVAxR1VC?= =?utf-8?B?Tk0wTGJIaER3VDBpeGhQSmphejU3ZGg5L2hYUmlJWXZHMFVlOHdQY2h4WkVV?= =?utf-8?B?dng0bnlzNG90RXBFTktlY3phT0V3OERIYS9ZM1dwQzVsczZtL0piRFJJTlov?= =?utf-8?B?RVdHWXlteWx0QWlrdThRaytlS05wQSt1ZE9ubUI1QXV5QmlGTWk2Y1dDQ2Jx?= =?utf-8?B?VEJ3bXErWG5RSFFieWNiak1MTURzSjJicGkzSWR5cVRaMm5FUFZ6MlViQzY2?= =?utf-8?B?cVY0enI3SlQrbThuemlRbW01Q1lSa0V2WTFPZFhxa29Za2dHTU9GYWpNcGE0?= =?utf-8?B?VFpjQytUUHhkQ1JubysrYnZUdEFxa1daSFBHQzBQZGVkNXo0dUJUeG5HNHdY?= =?utf-8?B?dW1Nb1l2T2lPQUxvMnpnNXJJdGwwV3AzRndoQmdCVGVhZ3FidU5jZmg0OVgz?= =?utf-8?B?SzVxVUhkNkxIS0lxRldaTDFDQjhYU21IZWR3UFVxUTlBUEl6bW5zUFVkZzY5?= =?utf-8?B?cUFhVEVuTkJRdjNGT1lPK1VHTmRaOVZuU0tQTUxQWGZPaFBDKzlYZ3JZNkdK?= =?utf-8?B?ZXNadGw3MFRtZmNXbnE1TE1oNVNBbGd2ZVFiL1FjeHdKZy9HODlUNURZenBy?= =?utf-8?B?MXFPSEwrSy93cFRpSWY0YXpGbGJKVVNxa1J0QkxrWXJpS1I3S2hwSGRORTNB?= =?utf-8?B?U2JyYlI1ampzWGxZZXViRWxCaHVRbkcyT2FBNWErQkdUc3lBSHJXSFVtclcy?= =?utf-8?B?Y2NmNU8yK0FCYU5QYU5aanVwZWtkZUxwNXNsZllydVlIZHZTVmovN2VOK0Vn?= =?utf-8?B?U0ZxNDdzTmRjK2oyaTJiZkdVa1dZRk1yeTlCTGNwZC80aGE4bmlKTVM2ZkN0?= =?utf-8?B?RmpNQlU4WUo3V3A4aE9nakVIRjljZnB1ZFNRRGFKQkc1U0xUTEI3L1NUQWtj?= =?utf-8?B?MkpUTlZ0NTlVVGJVcEZ2aUxHaEFDS2hLRld5K2UvVmdJYmllb2NsaVdaM2Fj?= =?utf-8?B?K041WUEyNUtoREhpRnlVaG53NERoUkRKYzdUN2dpR1lNbW10U21PSzZycVc5?= =?utf-8?B?cmF0M0tBWm1yUnBqV3o0YjZYRWV0RVpwTzZFVURsSzFGd0hiY1k1U0ZFNTZQ?= =?utf-8?B?blFaWnpmUkJyeFN0YXFjQTAxN1puRVUwNTdRMnBxMGFTbXZGR05BOW5QSEI1?= =?utf-8?B?UlRpZ2cwUG5FeXBQNXJLd2tlUm80eno4ZW1pbUViSGtZS2Y5RktnRkdtSHpt?= =?utf-8?B?SkxOMWxnNGJVRFAxYlBDWmxFVXFJN0lFeDZGdlZ5dGVoVEowY1l6bThOZk5R?= =?utf-8?B?ZDZFZWt5UlpZMHNjL1ZMdC9FclBUL01LamFBemxGbDJEMHNXTXpnT1djL3pS?= =?utf-8?B?T1FzclhhandMRWJiblJXNUlWVk91REFNV3lzRVczM1Z3VE95NC9Ncjc3N204?= =?utf-8?B?d01hZ0c1cmcwYlRnMkM1S2pDRDRDUXBpNUxlWnpLWDc3b3Jheks1d3phTUE1?= =?utf-8?B?SGpsbWNlTFlkaVZ6RU83Wk1IVm9aZkpFc0QxT2dYaVBWdE5IbzZzbUxvQ3NR?= =?utf-8?B?bDF5WVhMOE5xSnZYNlFGWmNuMTU1TXBhYmNPWkFWVlIxS1VWODZsTVc1czB3?= =?utf-8?B?aTdsUk1qMk1MTlViVFJRK2hrWS9EeTZSQk4wZjU2QnJkQldsVlJON3RQWGRN?= =?utf-8?B?YitDekIzbUROTnBsN25qZE03T1gzS0tlTUUrZGVQbTRKZmF3TzE2clpDZWhr?= =?utf-8?B?Q3IxNDJqTmtVTWcyTUgvT0loSVIvcURmUG53Ym9BVkl3K01Ec2I3VmZiNFlp?= =?utf-8?B?ZzRrSHhlbUd6Y3ZvN3JQNVFVWW5LWkt1cXdHV2JRQkhHVG04ckJYT0ZnU3Qz?= =?utf-8?B?aUgvaEtWc0VXZTFVRGxKRlBreTkrY3BCbVRJRkNDRUNNSjlIRTVwNDdRRnlz?= =?utf-8?B?aFdiUFE0YjlXMWY4dkRVdEo4Mm10ZHM3dVorclNHLzdpV2FtWFMyRjFLTlMr?= =?utf-8?B?SnJNai85dlBXbVNpYkk3bFFvMUlodWRlNEZQMGlpWk1ZNWtvdjVFUGZwbmpU?= =?utf-8?B?cXg0b0FuN2RWYUVURTFsbkthYjZnPT0=?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 0lnFvXxt04EHP07jOCph1aUOtqoMEstFvkoaF4xrEAwyfQb0fSvLIk0NCk2EAlofeA/HlAJUcQtcsoNTpMDJv1/+Tb1DnKq82dESuetAt0+pA1TJHnoLG/HpG5X5gzE2wQ84yEFKjC/FGI5GV1u5uAt1nqXEN8CozoT71/i0mHmXdT5nsWUsr3sY6jx3dh8bGa6llu4vLpBZNpSfUj1pTOESqTmIEbn+o4LZV3Vp81mfu2HKan4080f/Fuwyo+ZuvPu8MCfp6GQZuvLPh3NHWASP7Ks6i2t6lRmD4EcVJEQfyIiyl0MP60xm3Fs4ro1lPEIZsB4y+Dxff5USevCc8mgb+cc/JNvX05A0wwzxDKDm45nTIiFi5qlfPPpZqFJHdN3sF65k8OIIJ4cSyS7xyrTwwrCQWAKHuc3QYiFT6xS4buSH7fY/qS5fj2OHTJoelVGegPRCs6bov8qBb/7r5xQAVl+s8oLls+Bk7LeMhQRGUJHBJNYZRs+3RwiUDGx9ChJHTCyXwQprDDkmJoTV+nKkKyGvC2Cxu84HL50FR/Js9aSto7AewE+4yhpQbii3pSLjJuPMNPRr6RJ7AlBldg4eq7qI2kYwUu2z2v645hM= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 23f94877-0395-4b4a-a1da-08de2b4e16a9 X-MS-Exchange-CrossTenant-AuthSource: SN4PR10MB5622.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Nov 2025 11:39:12.4403 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: LmhjOEq3BDYEMAyogdgMOenL+krfk2cmLc5q/77/wWESx6/uiNxFtALpIHBSrvlwLPWye2CSSCkje3Wtl6XCKdybilzN3MpkLAogg9YR3jc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA3PR10MB8091 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-11-24_04,2025-11-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 adultscore=0 spamscore=0 bulkscore=0 mlxscore=0 suspectscore=0 mlxlogscore=999 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2510240000 definitions=main-2511240103 X-Proofpoint-GUID: daBsMT2TGgLBb3Rtd1KtcIKuVlw9OG0E X-Authority-Analysis: v=2.4 cv=ObqVzxTY c=1 sm=1 tr=0 ts=692443e4 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=6UeiqGixMTsA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=SqcKHpw6ymoWmmP6hUkA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTI0MDEwMyBTYWx0ZWRfX60Ec00qC0Xec EZuV4PBBtgyrvjXobRDiPsI8piTNq6ijqVMCSAS4IoFoAjpovImqmq5ro/LC8iIbq6vC8xRnM0M GgX6NSKATVhN69XIsLrWIUyWvh+QO41gyjYh0UKj463UClGkD29lPOBcfQvOAhKr/J970xBfQhG QzyqLIZOATxQehgnhfVgTadUXd2nV1jBj2ffRm0j307WfX82FbgSiQ/aL1hi2gmbMt8v1xIZRFA Yl2nPmqjB6bKA6eUjhrMU8LJu7IvwcgNm4OOBfobsQpUjjBE8ewwRS8eU1EniVTfEZpH7Yjj+C4 esbVS/qynygOw1VIoTWedU6hHC5f3vv4MG3ozjQZ+PnxZn3EBq0AQUaRYqZxWWqkYtDRFvOz9Xo BPz57e/780HQeo2GA4Tw5zUnI5nRzg== X-Proofpoint-ORIG-GUID: daBsMT2TGgLBb3Rtd1KtcIKuVlw9OG0E On 11/24/25 12:04, Borislav Petkov wrote: > On Fri, Nov 21, 2025 at 10:53:10AM +0100, Alexandre Chartre wrote: >> Notes: >> ====== > > So those examples below look very useful and cool. Can you pls document them > so that I can find the breadcrumbs next time and use them? > > :-) > > Thx. Sure. I will add a doc in tools/objtool/Documentation/ in followup patches. Rgds, alex. > >> Disassembly can show default alternative jumping to .altinstr_aux >> ----------------------------------------------------------------- >> Disassembly can show a default alternative jumping to .altinstr_aux. This >> happens when the _static_cpu_has() function is used. Its default code >> jumps to .altinstr_aux where a test sequence is executed (test; jnz; jmp). >> >> At runtime, this sequence is not used because the _static_cpu_has() >> an alternative with the X86_FEATURE_ALWAYS feature. >> >> >> debc: perf_get_x86_pmu_capability+0xc jmpq 0xdec1 <.altinstr_aux+0xfc> | NOP5 (X86_FEATURE_HYBRID_CPU) | jmpq 0x61a (X86_FEATURE_ALWAYS) # >> dec1: perf_get_x86_pmu_capability+0x11 ud2 >> >> >> Disassembly can show alternative jumping to the next instruction >> ---------------------------------------------------------------- >> >> The disassembly can show jump tables with an alternative which jumps >> to the next instruction. >> >> For example: >> >> def9: perf_get_x86_pmu_capability+0x49 NOP2 | jmp defb (JUMP) # >> defb: perf_get_x86_pmu_capability+0x4b mov 0x0(%rip),%rdi # 0xdf02 >> >> This disassembly is correct. These instructions come from: >> >> cap->num_counters_gp = x86_pmu_num_counters(NULL)): >> >> which will end up executing this statement: >> >> if (static_branch_unlikely(&perf_is_hybrid) && NULL) >> ; >> >> This statement is optimized to do nothing because the condition is >> always false. But static_branch_unlikely() is implemented with a jump >> table inside an "asm goto" statement, and "asm goto" statements are >> not optimized. >> >> So basically the code is optimized like this: >> >> if (static_branch_unlikely(&perf_is_hybrid)) >> ; >> >> And this translates to the assembly code above. >> >> >> Examples: >> ========= >> >> Example 1 (--trace option): Trace the validation of the os_save() function >> -------------------------------------------------------------------------- >> >> $ ./tools/objtool/objtool --hacks=jump_label --hacks=noinstr --hacks=skylake --ibt --orc --retpoline --rethunk --sls --static-call --uaccess --prefix=16 --link --trace os_xsave -v vmlinux.o >> os_xsave: validation begin >> 59be0: os_xsave+0x0 push %r12 - state: cfa=rsp+16 r12=(cfa-16) stack_size=16 >> 59be2: os_xsave+0x2 mov 0x0(%rip),%eax # 0x59be8 >> 59be8: os_xsave+0x8 push %rbp - state: cfa=rsp+24 rbp=(cfa-24) stack_size=24 >> 59be9: os_xsave+0x9 mov %rdi,%rbp >> 59bec: os_xsave+0xc push %rbx - state: cfa=rsp+32 rbx=(cfa-32) stack_size=32 >> 59bed: os_xsave+0xd mov 0x8(%rdi),%rbx >> 59bf1: os_xsave+0x11 mov %rbx,%r12 >> 59bf4: os_xsave+0x14 shr $0x20,%r12 >> 59bf8: os_xsave+0x18 test %eax,%eax >> 59bfa: os_xsave+0x1a je 0x59c22 - jump taken >> 59c22: os_xsave+0x42 | ud2 >> 59c24: os_xsave+0x44 | jmp 0x59bfc - unconditional jump >> 59bfc: os_xsave+0x1c | | xor %edx,%edx >> 59bfe: os_xsave+0x1e | | mov %rbx,%rsi >> 59c01: os_xsave+0x21 | | mov %rbp,%rdi >> 59c04: os_xsave+0x24 | | callq 0x59c09 - call >> 59c09: os_xsave+0x29 | | mov %ebx,%eax >> 59c0b: os_xsave+0x2b | | mov %r12d,%edx >> | | / X86_FEATURE_XSAVEOPT >> 1b29: .altinstr_replacement+0x1b29 | | | xsaveopt64 0x40(%rbp) >> 59c13: os_xsave+0x33 | | | xor %ebx,%ebx >> 59c15: os_xsave+0x35 | | | test %ebx,%ebx >> 59c17: os_xsave+0x37 | | | jne 0x59c26 - jump taken >> 59c26: os_xsave+0x46 | | | | ud2 >> 59c28: os_xsave+0x48 | | | | pop %rbx - state: cfa=rsp+24 rbx= stack_size=24 >> 59c29: os_xsave+0x49 | | | | pop %rbp - state: cfa=rsp+16 rbp= stack_size=16 >> 59c2a: os_xsave+0x4a | | | | pop %r12 - state: cfa=rsp+8 r12= stack_size=8 >> 59c2c: os_xsave+0x4c | | | | jmpq 0x59c31 <__x86_return_thunk> - return >> 59c17: os_xsave+0x37 | | | jne 0x59c26 - jump not taken >> 59c19: os_xsave+0x39 | | | pop %rbx - state: cfa=rsp+24 rbx= stack_size=24 >> 59c1a: os_xsave+0x3a | | | pop %rbp - state: cfa=rsp+16 rbp= stack_size=16 >> 59c1b: os_xsave+0x3b | | | pop %r12 - state: cfa=rsp+8 r12= stack_size=8 >> 59c1d: os_xsave+0x3d | | | jmpq 0x59c22 <__x86_return_thunk> - return >> | | \ X86_FEATURE_XSAVEOPT >> | | / X86_FEATURE_XSAVEC >> 1b2e: .altinstr_replacement+0x1b2e | | | xsavec64 0x40(%rbp) >> 59c13: os_xsave+0x33 | | | xor %ebx,%ebx - already visited >> | | \ X86_FEATURE_XSAVEC >> | | / X86_FEATURE_XSAVES >> 1b33: .altinstr_replacement+0x1b33 | | | xsaves64 0x40(%rbp) >> 59c13: os_xsave+0x33 | | | xor %ebx,%ebx - already visited >> | | \ X86_FEATURE_XSAVES >> | | / EXCEPTION for instruction at 0x59c0e >> 59c15: os_xsave+0x35 | | | test %ebx,%ebx - already visited >> | | \ EXCEPTION >> | | / DEFAULT >> 59c0e: os_xsave+0x2e | | xsave64 0x40(%rbp) >> 59c13: os_xsave+0x33 | | xor %ebx,%ebx - already visited >> 59bfa: os_xsave+0x1a je 0x59c22 - jump not taken >> 59bfc: os_xsave+0x1c xor %edx,%edx - already visited >> os_xsave: validation end >> >> >> Example 2 (--disas option): Single Instruction Alternatives >> ----------------------------------------------------------- >> >> Compact Output (default): >> >> Alternatives with single instructions are displayed each on one line, >> with the instruction and a description of the alternative. >> >> $ ./tools/objtool/objtool --disas=perf_get_x86_pmu_capability --link vmlinux.o >> perf_get_x86_pmu_capability: >> deb0: perf_get_x86_pmu_capability+0x0 endbr64 >> deb4: perf_get_x86_pmu_capability+0x4 callq 0xdeb9 <__fentry__> >> deb9: perf_get_x86_pmu_capability+0x9 mov %rdi,%rdx >> debc: perf_get_x86_pmu_capability+0xc >> = jmpq 0xdec1 <.altinstr_aux+0xfc> (if DEFAULT) >> = jmpq 0x622 (if X86_FEATURE_ALWAYS) >> = nop5 (if X86_FEATURE_HYBRID_CPU) >> dec1: perf_get_x86_pmu_capability+0x11 ud2 >> dec3: perf_get_x86_pmu_capability+0x13 movq $0x0,(%rdx) >> deca: perf_get_x86_pmu_capability+0x1a movq $0x0,0x8(%rdx) >> ded2: perf_get_x86_pmu_capability+0x22 movq $0x0,0x10(%rdx) >> deda: perf_get_x86_pmu_capability+0x2a movq $0x0,0x18(%rdx) >> dee2: perf_get_x86_pmu_capability+0x32 jmpq 0xdee7 <__x86_return_thunk> >> dee7: perf_get_x86_pmu_capability+0x37 cmpq $0x0,0x0(%rip) # 0xdeef >> deef: perf_get_x86_pmu_capability+0x3f je 0xdec3 >> def1: perf_get_x86_pmu_capability+0x41 mov 0x0(%rip),%eax # 0xdef7 >> def7: perf_get_x86_pmu_capability+0x47 mov %eax,(%rdi) >> def9: perf_get_x86_pmu_capability+0x49 >> = nop2 (if DEFAULT) >> = jmp defb (if JUMP) >> defb: perf_get_x86_pmu_capability+0x4b mov 0x0(%rip),%rdi # 0xdf02 >> df02: perf_get_x86_pmu_capability+0x52 >> = callq 0xdf07 <__sw_hweight64> (if DEFAULT) >> = popcnt %rdi,%rax (if X86_FEATURE_POPCNT) >> df07: perf_get_x86_pmu_capability+0x57 mov %eax,0x4(%rdx) >> df0a: perf_get_x86_pmu_capability+0x5a >> = nop2 (if DEFAULT) >> = jmp df0c (if JUMP) >> df0c: perf_get_x86_pmu_capability+0x5c mov 0x0(%rip),%rdi # 0xdf13 >> df13: perf_get_x86_pmu_capability+0x63 >> = callq 0xdf18 <__sw_hweight64> (if DEFAULT) >> = popcnt %rdi,%rax (if X86_FEATURE_POPCNT) >> df18: perf_get_x86_pmu_capability+0x68 mov %eax,0x8(%rdx) >> df1b: perf_get_x86_pmu_capability+0x6b mov 0x0(%rip),%eax # 0xdf21 >> df21: perf_get_x86_pmu_capability+0x71 mov %eax,0xc(%rdx) >> df24: perf_get_x86_pmu_capability+0x74 mov %eax,0x10(%rdx) >> df27: perf_get_x86_pmu_capability+0x77 mov 0x0(%rip),%rax # 0xdf2e >> df2e: perf_get_x86_pmu_capability+0x7e mov %eax,0x14(%rdx) >> df31: perf_get_x86_pmu_capability+0x81 mov 0x0(%rip),%eax # 0xdf37 >> df37: perf_get_x86_pmu_capability+0x87 mov %eax,0x18(%rdx) >> df3a: perf_get_x86_pmu_capability+0x8a movzbl 0x0(%rip),%ecx # 0xdf41 >> df41: perf_get_x86_pmu_capability+0x91 movzbl 0x1c(%rdx),%eax >> df45: perf_get_x86_pmu_capability+0x95 shr %cl >> df47: perf_get_x86_pmu_capability+0x97 and $0x1,%ecx >> df4a: perf_get_x86_pmu_capability+0x9a and $0xfffffffe,%eax >> df4d: perf_get_x86_pmu_capability+0x9d or %ecx,%eax >> df4f: perf_get_x86_pmu_capability+0x9f mov %al,0x1c(%rdx) >> df52: perf_get_x86_pmu_capability+0xa2 jmpq 0xdf57 <__x86_return_thunk> >> >> >> Wide Output (--wide option): >> >> Alternatives with single instructions are displayed side-by-side, >> with an header. >> >> $ ./tools/objtool/objtool --disas=perf_get_x86_pmu_capability --wide --link vmlinux.o >> perf_get_x86_pmu_capability: >> deb0: perf_get_x86_pmu_capability+0x0 endbr64 >> deb4: perf_get_x86_pmu_capability+0x4 callq 0xdeb9 <__fentry__> >> deb9: perf_get_x86_pmu_capability+0x9 mov %rdi,%rdx >> debc: perf_get_x86_pmu_capability+0xc | | X86_FEATURE_ALWAYS | X86_FEATURE_HYBRID_CPU >> debc: perf_get_x86_pmu_capability+0xc | jmpq 0xdec1 <.altinstr_aux+0xfc> | jmpq 0x622 | nop5 >> dec1: perf_get_x86_pmu_capability+0x11 ud2 >> dec3: perf_get_x86_pmu_capability+0x13 movq $0x0,(%rdx) >> deca: perf_get_x86_pmu_capability+0x1a movq $0x0,0x8(%rdx) >> ded2: perf_get_x86_pmu_capability+0x22 movq $0x0,0x10(%rdx) >> deda: perf_get_x86_pmu_capability+0x2a movq $0x0,0x18(%rdx) >> dee2: perf_get_x86_pmu_capability+0x32 jmpq 0xdee7 <__x86_return_thunk> >> dee7: perf_get_x86_pmu_capability+0x37 cmpq $0x0,0x0(%rip) # 0xdeef >> deef: perf_get_x86_pmu_capability+0x3f je 0xdec3 >> def1: perf_get_x86_pmu_capability+0x41 mov 0x0(%rip),%eax # 0xdef7 >> def7: perf_get_x86_pmu_capability+0x47 mov %eax,(%rdi) >> def9: perf_get_x86_pmu_capability+0x49 | | JUMP >> def9: perf_get_x86_pmu_capability+0x49 | nop2 | jmp defb >> defb: perf_get_x86_pmu_capability+0x4b mov 0x0(%rip),%rdi # 0xdf02 >> df02: perf_get_x86_pmu_capability+0x52 | | X86_FEATURE_POPCNT >> df02: perf_get_x86_pmu_capability+0x52 | callq 0xdf07 <__sw_hweight64> | popcnt %rdi,%rax >> df07: perf_get_x86_pmu_capability+0x57 mov %eax,0x4(%rdx) >> df0a: perf_get_x86_pmu_capability+0x5a | | JUMP >> df0a: perf_get_x86_pmu_capability+0x5a | nop2 | jmp df0c >> df0c: perf_get_x86_pmu_capability+0x5c mov 0x0(%rip),%rdi # 0xdf13 >> df13: perf_get_x86_pmu_capability+0x63 | | X86_FEATURE_POPCNT >> df13: perf_get_x86_pmu_capability+0x63 | callq 0xdf18 <__sw_hweight64> | popcnt %rdi,%rax >> df18: perf_get_x86_pmu_capability+0x68 mov %eax,0x8(%rdx) >> df1b: perf_get_x86_pmu_capability+0x6b mov 0x0(%rip),%eax # 0xdf21 >> df21: perf_get_x86_pmu_capability+0x71 mov %eax,0xc(%rdx) >> df24: perf_get_x86_pmu_capability+0x74 mov %eax,0x10(%rdx) >> df27: perf_get_x86_pmu_capability+0x77 mov 0x0(%rip),%rax # 0xdf2e >> df2e: perf_get_x86_pmu_capability+0x7e mov %eax,0x14(%rdx) >> df31: perf_get_x86_pmu_capability+0x81 mov 0x0(%rip),%eax # 0xdf37 >> df37: perf_get_x86_pmu_capability+0x87 mov %eax,0x18(%rdx) >> df3a: perf_get_x86_pmu_capability+0x8a movzbl 0x0(%rip),%ecx # 0xdf41 >> df41: perf_get_x86_pmu_capability+0x91 movzbl 0x1c(%rdx),%eax >> df45: perf_get_x86_pmu_capability+0x95 shr %cl >> df47: perf_get_x86_pmu_capability+0x97 and $0x1,%ecx >> df4a: perf_get_x86_pmu_capability+0x9a and $0xfffffffe,%eax >> df4d: perf_get_x86_pmu_capability+0x9d or %ecx,%eax >> df4f: perf_get_x86_pmu_capability+0x9f mov %al,0x1c(%rdx) >> df52: perf_get_x86_pmu_capability+0xa2 jmpq 0xdf57 <__x86_return_thunk> >> >> >> Example 3 (--disas option): Alternatives with multiple instructions >> ------------------------------------------------------------------- >> >> Compact Output (default): >> >> Alternatives with multiple instructions are displayed one above the other, >> with an header describing the alternative. >> >> $ ./tools/objtool/objtool --disas=__switch_to_asm --link vmlinux.o >> __switch_to_asm: >> 82c0: __switch_to_asm+0x0 push %rbp >> 82c1: __switch_to_asm+0x1 push %rbx >> 82c2: __switch_to_asm+0x2 push %r12 >> 82c4: __switch_to_asm+0x4 push %r13 >> 82c6: __switch_to_asm+0x6 push %r14 >> 82c8: __switch_to_asm+0x8 push %r15 >> 82ca: __switch_to_asm+0xa mov %rsp,0x1670(%rdi) >> 82d1: __switch_to_asm+0x11 mov 0x1670(%rsi),%rsp >> 82d8: __switch_to_asm+0x18 mov 0xad8(%rsi),%rbx >> 82df: __switch_to_asm+0x1f mov %rbx,%gs:0x0(%rip) # 0x82e7 <__stack_chk_guard> >> 82e7: __switch_to_asm+0x27 >> = DEFAULT >> 82e7: __switch_to_asm+0x27 | jmp 0x8312 <__switch_to_asm+0x52> >> 82e9: __switch_to_asm+0x29 | nop*41 >> | >> = X86_FEATURE_RSB_CTXSW >> 82e7: __switch_to_asm+0x27 | mov $0x10,%r12 >> 82ee: __switch_to_asm+0x2e | callq 0x82f4 <__switch_to_asm+0x34> >> 82f3: __switch_to_asm+0x33 | int3 >> 82f4: __switch_to_asm+0x34 | callq 0x82fa <__switch_to_asm+0x3a> >> 82f9: __switch_to_asm+0x39 | int3 >> 82fa: __switch_to_asm+0x3a | add $0x10,%rsp >> 82fe: __switch_to_asm+0x3e | dec %r12 >> 8301: __switch_to_asm+0x41 | jne 0x82ee <__switch_to_asm+0x2e> >> 8303: __switch_to_asm+0x43 | lfence >> 8306: __switch_to_asm+0x46 | movq $0xffffffffffffffff,%gs:0x0(%rip) # 0x20b <__x86_call_depth> >> | >> = !X86_FEATURE_ALWAYS >> 82e7: __switch_to_asm+0x27 | nop1 >> 82e8: __switch_to_asm+0x28 | nop1 >> 82e9: __switch_to_asm+0x29 | callq 0x82ef <__switch_to_asm+0x2f> >> 82ee: __switch_to_asm+0x2e | int3 >> 82ef: __switch_to_asm+0x2f | add $0x8,%rsp >> 82f3: __switch_to_asm+0x33 | lfence >> | >> 8312: __switch_to_asm+0x52 pop %r15 >> 8314: __switch_to_asm+0x54 pop %r14 >> 8316: __switch_to_asm+0x56 pop %r13 >> 8318: __switch_to_asm+0x58 pop %r12 >> 831a: __switch_to_asm+0x5a pop %rbx >> 831b: __switch_to_asm+0x5b pop %rbp >> 831c: __switch_to_asm+0x5c jmpq 0x8321 <__switch_to> >> >> >> Wide Output (--wide option): >> >> Alternatives with multiple instructions are displayed side-by-side, with >> an header describing the alternative. The code in the first column is the >> default code of the alternative. >> >> $ ./tools/objtool/objtool --disas=__switch_to_asm --wide --link vmlinux.o >> __switch_to_asm: >> 82c0: __switch_to_asm+0x0 push %rbp >> 82c1: __switch_to_asm+0x1 push %rbx >> 82c2: __switch_to_asm+0x2 push %r12 >> 82c4: __switch_to_asm+0x4 push %r13 >> 82c6: __switch_to_asm+0x6 push %r14 >> 82c8: __switch_to_asm+0x8 push %r15 >> 82ca: __switch_to_asm+0xa mov %rsp,0x1670(%rdi) >> 82d1: __switch_to_asm+0x11 mov 0x1670(%rsi),%rsp >> 82d8: __switch_to_asm+0x18 mov 0xad8(%rsi),%rbx >> 82df: __switch_to_asm+0x1f mov %rbx,%gs:0x0(%rip) # 0x82e7 <__stack_chk_guard> >> 82e7: __switch_to_asm+0x27 | | X86_FEATURE_RSB_CTXSW | !X86_FEATURE_ALWAYS >> 82e7: __switch_to_asm+0x27 | jmp 0x8312 <__switch_to_asm+0x52> | mov $0x10,%r12 | nop1 >> 82e8: __switch_to_asm+0x28 | | | nop1 >> 82e9: __switch_to_asm+0x29 | nop*41 | | callq 0x82ef <__switch_to_asm+0x2f> >> 82ee: __switch_to_asm+0x2e | | callq 0x82f4 <__switch_to_asm+0x34> | int3 >> 82ef: __switch_to_asm+0x2f | | | add $0x8,%rsp >> 82f3: __switch_to_asm+0x33 | | int3 | lfence >> 82f4: __switch_to_asm+0x34 | | callq 0x82fa <__switch_to_asm+0x3a> | >> 82f9: __switch_to_asm+0x39 | | int3 | >> 82fa: __switch_to_asm+0x3a | | add $0x10,%rsp | >> 82fe: __switch_to_asm+0x3e | | dec %r12 | >> 8301: __switch_to_asm+0x41 | | jne 0x82ee <__switch_to_asm+0x2e> | >> 8303: __switch_to_asm+0x43 | | lfence | >> 8306: __switch_to_asm+0x46 | | movq $0xffffffffffffffff,%gs:0x0(%rip) # 0x20b <__x86_call_depth> | >> 8312: __switch_to_asm+0x52 pop %r15 >> 8314: __switch_to_asm+0x54 pop %r14 >> 8316: __switch_to_asm+0x56 pop %r13 >> 8318: __switch_to_asm+0x58 pop %r12 >> 831a: __switch_to_asm+0x5a pop %rbx >> 831b: __switch_to_asm+0x5b pop %rbp >> 831c: __switch_to_asm+0x5c jmpq 0x8321 <__switch_to> >> >> ----- >> >> Alexandre Chartre (30): >> objtool: Move disassembly functions to a separated file >> objtool: Create disassembly context >> objtool: Disassemble code with libopcodes instead of running objdump >> tool build: Remove annoying newline in build output >> objtool: Print symbol during disassembly >> objtool: Store instruction disassembly result >> objtool: Disassemble instruction on warning or backtrace >> objtool: Extract code to validate instruction from the validate branch >> loop >> objtool: Record symbol name max length >> objtool: Add option to trace function validation >> objtool: Trace instruction state changes during function validation >> objtool: Improve register reporting during function validation >> objtool: Identify the different types of alternatives >> objtool: Add functions to better name alternatives >> objtool: Improve tracing of alternative instructions >> objtool: Do not validate IBT for .return_sites and .call_sites >> objtool: Add the --disas= action >> objtool: Preserve alternatives order >> objtool: Print headers for alternatives >> objtool: Disassemble group alternatives >> objtool: Print addresses with alternative instructions >> objtool: Disassemble exception table alternatives >> objtool: Disassemble jump table alternatives >> objtool: Fix address references in alternatives >> objtool: Provide access to feature and flags of group alternatives >> objtool: Function to get the name of a CPU feature >> objtool: Improve naming of group alternatives >> objtool: Compact output for alternatives with one instruction >> objtool: Add wide output for disassembly >> objtool: Trim trailing NOPs in alternative >> >> .../x86/tools/gen-cpu-feature-names-x86.awk | 33 + >> tools/build/Makefile.feature | 4 +- >> tools/objtool/.gitignore | 3 + >> tools/objtool/Build | 3 + >> tools/objtool/Makefile | 26 + >> tools/objtool/arch/loongarch/decode.c | 23 + >> tools/objtool/arch/loongarch/special.c | 5 + >> tools/objtool/arch/powerpc/decode.c | 24 + >> tools/objtool/arch/powerpc/special.c | 5 + >> tools/objtool/arch/x86/Build | 8 + >> tools/objtool/arch/x86/decode.c | 20 + >> tools/objtool/arch/x86/special.c | 10 + >> tools/objtool/builtin-check.c | 4 + >> tools/objtool/check.c | 648 +++++---- >> tools/objtool/disas.c | 1245 +++++++++++++++++ >> tools/objtool/include/objtool/arch.h | 11 + >> tools/objtool/include/objtool/builtin.h | 3 + >> tools/objtool/include/objtool/check.h | 35 +- >> tools/objtool/include/objtool/disas.h | 81 ++ >> tools/objtool/include/objtool/special.h | 4 +- >> tools/objtool/include/objtool/trace.h | 141 ++ >> tools/objtool/include/objtool/warn.h | 17 +- >> tools/objtool/special.c | 2 + >> tools/objtool/trace.c | 203 +++ >> 24 files changed, 2259 insertions(+), 299 deletions(-) >> create mode 100644 tools/arch/x86/tools/gen-cpu-feature-names-x86.awk >> create mode 100644 tools/objtool/disas.c >> create mode 100644 tools/objtool/include/objtool/disas.h >> create mode 100644 tools/objtool/include/objtool/trace.h >> create mode 100644 tools/objtool/trace.c >> >> -- >> 2.43.5 >> >> >> >