From patchwork Wed Jun 24 19:58:33 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 137748 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E3C824BA23DE for ; Wed, 24 Jun 2026 20:01:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E3C824BA23DE Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=FPi3JKRn; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=FPi3JKRn X-Original-To: newlib@sourceware.org Delivered-To: newlib@sourceware.org Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazlp170110003.outbound.protection.outlook.com [IPv6:2a01:111:f403:c201::3]) by sourceware.org (Postfix) with ESMTPS id F17C64BA2E27 for ; Wed, 24 Jun 2026 20:00:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F17C64BA2E27 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org F17C64BA2E27 Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:c201::3 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1782331226; cv=pass; b=RXNkZBnZ+sjqa7ToSFcURwPDR6dfszj48QZGS7X7mCDDZ07NqQeMiv70NLVEtl4uAJgCd7UBSf2Mvjv+9yGho5e2PcuxzY+xMoiD5D4pOh+uxw/9bY8mV1hJtwgGSfMg8bBvJ7W0yXV/51PolUjL48ZMxJF0MEs7Bup8ZvPJeiM= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1782331226; c=relaxed/simple; bh=ImOfxCDOBthm4FxeqlzKrFVZ6Y/kMSg3tDZhDku7By4=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=VUnbwGIdNx950NW2d0asSlumpbsQo3oHYMcgdzFprzqtL7R0t9/AL42losm1RNryaROS56S636ddrI88lNm5ARkXgHJIWs0lSmKQH2TjZq816TrGBD1KS0i2KrV5ZA46ofSUWeT8fxfpg2kk6JErNsLbJtZOvCL7dv7fcDLfIx4= ARC-Authentication-Results: i=3; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=FPi3JKRn; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=FPi3JKRn DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F17C64BA2E27 ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=bPPmeRYtLY06jMWlSQrEIl6oypCS5d7jI3Vv+KOmZknhf/GYrUeb97aXp0yWbGmoByJqYnn6Wr53POM1Qzs13GCbw1YzqYUGtK7w3vt2xamO34hLHoBWGYoKq/0pQ1itvXq+B12y7HB87wSrIu1H5kkeMB23o3j6WeO0kNe+4Rf2NM73y20O1HiORi/EgN5nFGdh7vvIqw/vX2dEnu4LeRuVMCkMexOsDmflZPWWINO0g4MBK644mXypa82IjuTtOhIh/0WbhjoXw9Cdv7hcowXrGj1CxD3C+W9lQL+VXHkNKBnLAIwXMj4y9DrmyMoR1KXc5kYPn91hPgEufFi+SQ== ARC-Message-Signature: i=2; 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=wI/M14lgzX+lTLi/BsCJa2LYn56IW/dAhH3t5g+X3mY=; b=iM99rEazOcC+mgPq7rqR6fpMED5dPsxbANoP4MrF+LzXcEhqc5WDd9HLhJ8VS+Tnsm5I2F42Qcn8gpETZCzW/TWPkqnuFa9MCpdDIrXWz4ysjs9rrbbb7T1YZBXlg8BUsj1fxXkohrgzyXkE21SuBwyC2yUQ9PXPPcNOijaT1YapVeLwdHjAqS1uLszS1Ix+fqwfcTtonZjF427qfvdzSsnjkejd0a/idRkGpQQI9yv4IQU82XqIe3902bLlAkoofTilAA8WsWdZGUNnuyFNACHchIu7tQjMDYG8Z6NlwSRjNWaM9ynOfmxhWYoAIL1SQ5sFOYE7UNt1UlKCbr2cgw== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wI/M14lgzX+lTLi/BsCJa2LYn56IW/dAhH3t5g+X3mY=; b=FPi3JKRnzcevlRSPetsx1eqGgxPdcn0pz3xv4bhnt5XCc5uuwx7RVMm9lh4tpomDiL13QnjzkMBA0xeEY/jDQFaiu1r/H/jyXnzyP/PKkzFwOEEjk/dBiKBjn99mL3NzDMpVeZnotFyylzrcucYz5MXVlOLWRP/2HCEzi2PLUvA= Received: from DB9PR05CA0027.eurprd05.prod.outlook.com (2603:10a6:10:1da::32) by PAWPR08MB9663.eurprd08.prod.outlook.com (2603:10a6:102:2e0::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.15; Wed, 24 Jun 2026 20:00:08 +0000 Received: from DU6PEPF00009528.eurprd02.prod.outlook.com (2603:10a6:10:1da:cafe::81) by DB9PR05CA0027.outlook.office365.com (2603:10a6:10:1da::32) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.159.14 via Frontend Transport; Wed, 24 Jun 2026 20:00:07 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by DU6PEPF00009528.mail.protection.outlook.com (10.167.8.9) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Wed, 24 Jun 2026 20:00:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xvRJmuDO8O/SW/MMTl7Kqv4WypHSb/od9vhjKgYKxQCHDlHlsnHRK5TiQaw4+ib6n1xuJvpPpNijbF7B+tQoeYmGKxzHfVldWrKndRsdjmwuLaRwPv7znkIB1gHj8S+lN/wN9OX4upspsyqon9zPWCOt/pBQwUxawgNyNrerV2Qq1qgzD6X2dwOR/93FYbBluuRkDD3B1t8gUFm9ECw6b5s+TevleJtZEpJ/XRaXqu9FJLVdUwSywGg8dwWBz6jqduixq4lM5xkdusrgOnSSRWRuqdwnATZVZcPF6ve+WMnjw47n1lEEeu5ZFC6AkGwXGBqYXM3M7BPHf6rCKjSRPQ== 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=wI/M14lgzX+lTLi/BsCJa2LYn56IW/dAhH3t5g+X3mY=; b=h0bsaW1fTy3uXoKgozqM2pxI9+HSs2iQylvkRxSEuknw7++A+NU6PcGmbOWOIaW0J3ppZUykf3OgdYHULw7avCoMRJkqewQXFi+weeFiisY+aO87hdxN+V6BtmS475aWjpMf5PV7UsWsBRWkQM8BCOlERXmSWnqwnHdfi0BNkXk1QUy6Y7FqDn0tKwUsQJzPbvKyaxXAw5PfNRiULpd6u8eD9pXTiRB4iIsXj7EarjyQRKwOfNjeCpKjoibZHRhnYbGkRBKCJjncISxIXGhrVK/rrSNA4C37s90oJPVykeYvWtjFpFPTFxSqhs4rqx9eHnddlQQ4RIZFIhBwFULs1Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 172.205.89.229) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wI/M14lgzX+lTLi/BsCJa2LYn56IW/dAhH3t5g+X3mY=; b=FPi3JKRnzcevlRSPetsx1eqGgxPdcn0pz3xv4bhnt5XCc5uuwx7RVMm9lh4tpomDiL13QnjzkMBA0xeEY/jDQFaiu1r/H/jyXnzyP/PKkzFwOEEjk/dBiKBjn99mL3NzDMpVeZnotFyylzrcucYz5MXVlOLWRP/2HCEzi2PLUvA= Received: from AS4P190CA0045.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:5d1::16) by GV1PR08MB8332.eurprd08.prod.outlook.com (2603:10a6:150:87::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.14; Wed, 24 Jun 2026 19:58:58 +0000 Received: from AM3PEPF0000A797.eurprd04.prod.outlook.com (2603:10a6:20b:5d1:cafe::33) by AS4P190CA0045.outlook.office365.com (2603:10a6:20b:5d1::16) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.159.15 via Frontend Transport; Wed, 24 Jun 2026 19:58:57 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 172.205.89.229) smtp.mailfrom=arm.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 172.205.89.229 as permitted sender) receiver=protection.outlook.com; client-ip=172.205.89.229; helo=nebula.arm.com; pr=C Received: from nebula.arm.com (172.205.89.229) by AM3PEPF0000A797.mail.protection.outlook.com (10.167.16.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Wed, 24 Jun 2026 19:58:57 +0000 Received: from AZ-NEU-EX04.Arm.com (10.240.25.138) by AZ-NEU-EX03.Arm.com (10.240.25.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Wed, 24 Jun 2026 19:58:53 +0000 Received: from e129018.arm.com (10.57.29.173) by mail.arm.com (10.240.25.138) with Microsoft SMTP Server id 15.2.2562.29 via Frontend Transport; Wed, 24 Jun 2026 19:58:52 +0000 From: Christophe Lyon To: CC: , , "Christophe Lyon" Subject: [PATCH v4 1/3] libgloss: arm: Reorganize rdimon-aem.S Date: Wed, 24 Jun 2026 21:58:33 +0200 Message-ID: <20260624195835.206509-1-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM3PEPF0000A797:EE_|GV1PR08MB8332:EE_|DU6PEPF00009528:EE_|PAWPR08MB9663:EE_ X-MS-Office365-Filtering-Correlation-Id: c1d2af1c-8e0f-4f3c-c521-08ded22b3032 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|23010399003|36860700016|1800799024|376014|82310400026|6133799003|3023799007|18002099003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info-Original: OjdKFupy0cvTZ6umU75H24n8XVPixZEzKejAcY29/wONoZp7ytiYnKCP43AzEIo6Rz0e/zTob3+/4SQfsQzsCvtlE3lDXbwcUf8ZyK2YS17yia+43efjnoRhlJkB2pzktmMksgPSKhx3NeWHQYM32g309Om6e5xjuEpAckbc7LsrGpPt8IyfqG7iHltxGlHyXb52JMeiMsYDYJuGPJKdTow1ZeZVF8oWh+PctgLywH25tpWSxsx9vCscYdQISOXvNe/dAT+hZHV8i4zYY86miMXPF6s96P9eIjS+cWuZ0LxXpszSMO+hstRZbYYmTrYmXZIRw6CuhnW1CUQ16ddmeg6AxpUPuABOy9srk+amZOdwEyVKPl4cj9/wmnkmbIBsZguWO8WuuMO1drhCRA4tGAeNSitWmpUZv1mbcPebexX17UgVyjtpOJu0hh/LZ8CIMVHpmce7gpZLtvOWm/NBENp8s4ejzwQtjOV64sy5P70IowxVl1tulOodzjxRxhniqJ/3zKwhnitCKUNgYD3jEIVDHzX/GXXP7KLVHHZOhLO9VE4qnFT5rSIxuaXT8gJ354J6qakTh+WI1drHGhOA+dlX3/+yX+hJfN32lH7viKI2BvvB507j+NZyO1353CjPCi28RpNMoY4gQbcdjUocGUhJUMBRhuIZ7+C8fRAkbhx484JA+ejke6JdwGbJ+Va4Q5ySGB1vgi1zBLZpjT96qQ== X-Forefront-Antispam-Report-Untrusted: CIP:172.205.89.229; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:nebula.arm.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(23010399003)(36860700016)(1800799024)(376014)(82310400026)(6133799003)(3023799007)(18002099003)(56012099006)(11063799006); DIR:OUT; SFP:1101; X-Exchange-RoutingPolicyChecked: abN8E6/5iHUxlzGcz9Ul9dMzJwbUI3ZIseuHS2VV17v/4W1UiqwhwtlTan0K1Nmd/FpQ9Kb02RqD5WYsUg6PPlxoDddzWmpSXMjUqMVapsUPjYqRDHgNs7AOKYWxFAoWksF0E4YWT9S5+IFwP4Icjan2GznhoEo27WOlEMw9Uja2a5W/tFT8j15+5Dy8Yk6MDutJdXjuHAwzHnBqlbXCyM1FBNSwISNaVeFytokJ7ZFtNBnp9uCXi5wddbpySxcqMwMA8H02FLKCwk7npmQM4LTFrgav1ajz+EeTZpBPsRd0CGZQ6rHDTY5RGhUBxlIKcu7pVyBeVhp4qvRZU1f7WA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR08MB8332 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU6PEPF00009528.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: af71b4ef-9406-45b6-a1ef-08ded22b06bc X-Microsoft-Antispam: BCL:0; ARA:13230040|35042699022|14060799003|82310400026|23010399003|1800799024|376014|36860700016|6133799003|3023799007|18002099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: 8VqqZ37mWqd6MnpWICnsWFg2rWWxuxifqdw8aQbEyjhfWe5e988kZh7qGw7fzPisjt44FqS10eYBMhNvkQHENPsAl0dpta8G3HLtSPW3oS9E6UhmItisCsbe0LvUge0cVJlJpIOxIjlGSvYSaS1PiM2bGlgsUxGzzq+6rCLVy4Km2Lkvw8ipNOFiKf0jAaYXAza+r7B5fCnaFPk+WY24KbTe6TAVO+OrZzJ2P3Ntf2UJYyG58+yrMNlH/y/23XyDAFK9wTCknV2A5PzSn4bqBvQ0eqe2E+K77pCAEN+0MTwjaDuSgGmbg2Na03HjhUGNW16T1+h9miIhnMTWwS/v2iWa3RPfHkIkNJ1jUlKSc7czcXnYq936dRhYGgEnMde4HOAzgf/vr7lJi4uLi8/qyD9MIlZqeR7ejU0lu4OZ5f9g46f+tW6alq9eollhbqfb736QcGDpD4jaZK6+I7ksK/qWKQXgKlGudHL5D/b1c1wQOMIeCXUMRWq3jmqg/4R//3S+nMH0SWv1g3EWqCfloBcTPtyIBB6IymycwXh3nQmIHBtK49OCluCgETcinnlB3zLAsxHXvT9e3JHU3rJf856Oo0KlARGujJI6CkZubFeQqCDjLRXr0eL+oIHGPBEBHWUv0741KZG58QXmsgIaJ4ud8eXzWMgnQsHlJq+FE0wC2SphECngSnqSeZ6zPq3PuxUJMM9wY+idzRswhpQwdw== X-Forefront-Antispam-Report: CIP:4.158.2.129; CTRY:GB; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:outbound-uk1.az.dlp.m.darktrace.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(35042699022)(14060799003)(82310400026)(23010399003)(1800799024)(376014)(36860700016)(6133799003)(3023799007)(18002099003)(11063799006)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: vqcznVPL2YG6rAK3jdnZRRiIPGn3MoCtIewFHfWkWjdIYZBNQKd/e63F2jcZTt2ZXSeYmRYjQiAv+PTxOVI+wuPgwlZqDWOhWQ/hVyUVR4re/dWKsPXN+PkZreNuUJLWyyBLhrfujM2Y1WBKpIEvh7PO/J+7rHG5YJaR0HJ2TcXx65limLBKpOgyrvncPeKUfrgRmaAcdRzfyYvPC9g1U7Rjiym/5Z5533UF8cQLHuRodQuU0XIn/XUUxCnevgGnyXxm+OS05rnRh7HOzlv61HGNYqQUdAeWejBn7aMVWO2aIrl+pNOX1dfusSpNfw5Ebr/OPQ8Zlqr+YZYHJznxc9ptPHSTHsZx+RcOFdyiX+XWyTkOZO6LcqU6g8ieCZn0ZFYBtQQHzci5nHKVeeVNPcSoSXhEUwBFqf7hPqXTC/7FuAC55qrHLPcOsvGfmXle X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jun 2026 20:00:06.6782 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c1d2af1c-8e0f-4f3c-c521-08ded22b3032 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[4.158.2.129]; Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: DU6PEPF00009528.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR08MB9663 X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SCC_10_SHORT_WORD_LINES, SCC_20_SHORT_WORD_LINES, SCC_35_SHORT_WORD_LINES, SCC_5_SHORT_WORD_LINES, SPF_HELO_PASS, SPF_NONE, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: newlib-bounces~patchwork=sourceware.org@sourceware.org In preparation for a later patch which adds support for M-profile, this patch moves the contents of arm/cpu-init/rdimon-aem.S into arm/cpu-init/rdimon-aem-a.S, since it contains only A-profile code. Minor modifications: update copyright dates, replace 'Cortex-A' with 'A-profile', include arm-acle-compat.h and remove the use of __ARM_ARCH_7A__ and the related comment. rdimon-aem.S includes only rdimon-aem-a.S for now, but will include rdimon-aem-m.S in a later patch. 2026-06-24 Christophe Lyon libgloss/ * arm/cpu-init/rdimon-aem-a.S: New file, copy of previous rdimon-aem.S. * arm/cpu-init/rdimon-aem.S: Make it only include rdimon-aem-a.S. --- libgloss/arm/cpu-init/rdimon-aem-a.S | 540 +++++++++++++++++++++++++++ libgloss/arm/cpu-init/rdimon-aem.S | 521 +------------------------- 2 files changed, 544 insertions(+), 517 deletions(-) create mode 100644 libgloss/arm/cpu-init/rdimon-aem-a.S diff --git a/libgloss/arm/cpu-init/rdimon-aem-a.S b/libgloss/arm/cpu-init/rdimon-aem-a.S new file mode 100644 index 000000000..12a65c9db --- /dev/null +++ b/libgloss/arm/cpu-init/rdimon-aem-a.S @@ -0,0 +1,540 @@ +/* Copyright (c) 2005-2026 ARM Ltd. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the company may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/* This file gives a basic initialisation of an A-profile core. It is + the bare minimum required to get A-profile core running with a semihosting + interface. + + It sets up a basic 1:1 phsyical address to virtual address mapping; + turns the MMU on; enables branch prediction; activates any integrated + caches; enables the Advanced SIMD and VFP co-processors; and installs + basic exception handlers. + + It does not handle peripherals, and assumes all memory is Normal. + + It does not change processor state from the startup privilege and security + level. + + This has only been tested to work in ARM state. + + By default it assumes exception vectors are located from address 0. + However, if this is not true they can be moved by defining the + _rdimon_vector_base symbol. For example if you have HIVECS enabled you + may pass --defsym _rdimon_vector_base=0xffff0000 on the linker command + line. */ + +#include "arm-acle-compat.h" + +#if (__ARM_ARCH_PROFILE == 'A') + .syntax unified + .arch armv7-a + .arm + + @ CPU Initialisation + .globl _rdimon_hw_init_hook + .type _rdimon_hw_init_hook, %function + +_rdimon_hw_init_hook: + @ Only run the code on CPU 0 - otherwise spin + mrc p15, 0, r4, cr0, cr0, 5 @ Read MPIDR + ands r4, r4, #15 +spin: + bne spin + + mov r10, lr @ Save LR for final return + +#ifdef __ARMEB__ + @ Setup for Big Endian + setend be + mrc p15, 0, r4, cr1, cr0, 0 @ Read SCTLR + orr r4, r4, #(1<<25) @ Switch to Big Endian (Set SCTLR.EE) + mcr p15, 0, r4, cr1, cr0, 0 @ Write SCTLR +#else + @ Setup for Little Endian + setend le + mrc p15, 0, r4, cr1, cr0, 0 @ Read SCTLR + bic r4, r4, #(1<<25) @ Switch to LE (unset SCTLR.EE) + mcr p15, 0, r4, cr1, cr0, 0 @ Write SCTLR +#endif + + bl is_a15_a7 + + @ For Cortex-A15 and Cortex-A7 only: + @ Write zero into the ACTLR to turn everything on. + itt eq + moveq r4, #0 + mcreq p15, 0, r4, c1, c0, 1 + isb + + @ For Cortex-A15 and Cortex-A7 only: + @ Set ACTLR:SMP bit before enabling the caches and MMU, + @ or performing any cache and TLB maintenance operations. + ittt eq + mrceq p15, 0, r4, c1, c0, 1 @ Read ACTLR + orreq r4, r4, #(1<<6) @ Enable ACTLR:SMP + mcreq p15, 0, r4, c1, c0, 1 @ Write ACTLR + isb + + @ Setup for exceptions being taken to Thumb/ARM state + mrc p15, 0, r4, cr1, cr0, 0 @ Read SCTLR +#if defined(__thumb__) + orr r4, r4, #(1 << 30) @ Enable SCTLR.TE +#else + bic r4, r4, #(1 << 30) @ Disable SCTLR.TE +#endif + mcr p15, 0, r4, cr1, cr0, 0 @ Write SCTLR + + bl __reset_caches + + mrc p15, 0, r4, cr1, cr0, 0 @ Read SCTLR + orr r4, r4, #(1<<22) @ Enable unaligned mode + bic r4, r4, #2 @ Disable alignment faults + bic r4, r4, #1 @ Disable MMU + mcr p15, 0, r4, cr1, cr0, 0 @ Write SCTLR + + mov r4, #0 + mcr p15, 0, r4, cr8, cr7, 0 @ Write TLBIALL - Invaliidate unified + @ TLB + @ Setup MMU Primary table P=V mapping. + mvn r4, #0 + mcr p15, 0, r4, cr3, cr0, 0 @ Write DACR + + mov r4, #0 @ Always use TTBR0, no LPAE + mcr p15, 0, r4, cr2, cr0, 2 @ Write TTBCR + adr r4, page_table_addr @ Load the base for vectors + ldr r4, [r4] + mrc p15, 0, r0, c0, c0, 5 @ read MPIDR + tst r0, #0x80000000 @ bis[31] + @ Set page table flags - there are two page table flag formats for the + @ architecture. For systems without multiprocessor extensions we use 0x1 + @ which is Inner cacheable/Outer non-cacheable. For systems with + @ multiprocessor extensions we use 0x59 which is Inner/Outer write-back, + @ no write-allocate, and cacheable. See the ARMARM-v7AR for more details. + it ne + addne r4, r4, #0x58 + add r4, r4, #1 + + mcr p15, 0, r4, cr2, cr0, 0 @ Write TTBR0 + + mov r0, #34 @ 0x22 @ TR0 and TR1 - normal memory + orr r0, r0, #(1 << 19) @ Shareable + mcr p15, 0, r0, cr10, cr2, 0 @ Write PRRR + movw r0, #0x33 + movt r0, #0x33 + mcr p15, 0, r0, cr10, cr2, 1 @ Write NMRR + mrc p15, 0, r0, cr1, cr0, 0 @ Read SCTLR + bic r0, r0, #(1 << 28) @ Clear TRE bit + mcr p15, 0, r0, cr1, cr0, 0 @ Write SCTLR + + @ Now install the vector code - we move the Vector code from where it is + @ in the image to be based at _rdimon_vector_base. We have to do this copy + @ as the code is all PC-relative. We actually cheat and do a BX so + @ that we are at a known address relatively quickly and have to move as + @ little code as possible. + mov r7, #(VectorCode_Limit - VectorCode) + adr r5, VectorCode + adr r6, vector_base_addr @ Load the base for vectors + ldr r6, [r6] + +copy_loop: @ Do the copy + ldr r4, [r5], #4 + str r4, [r6], #4 + subs r7, r7, #4 + bne copy_loop + + mrc p15, 0, r4, cr1, cr0, 0 @ Read SCTLR + bic r4, r4, #0x1000 @ Disable I Cache + bic r4, r4, #4 @ Disable D Cache + orr r4, r4, #1 @ Enable MMU + bic r4, r4, #(1 << 28) @ Clear TRE bit + mcr p15, 0, r4, cr1, cr0, 0 @ Write SCTLR + mrc p15, 0, r4, cr1, cr0, 2 @ Read CPACR + orr r4, r4, #0x00f00000 @ Turn on VFP Co-procs + bic r4, r4, #0x80000000 @ Clear ASEDIS bit + mcr p15, 0, r4, cr1, cr0, 2 @ Write CPACR + isb + mov r4, #0 + mcr p15, 0, r4, cr7, cr5, 4 @ Flush prefetch buffer + mrc p15, 0, r4, cr1, cr0, 2 @ Read CPACR + ubfx r4, r4, #20, #4 @ Extract bits [20, 23) + cmp r4, #0xf @ If not all set then the CPU does not + itt eq @ have FP or Advanced SIMD. + moveq r4, #0x40000000 @ Enable FP and Advanced SIMD + mcreq p10, 7, r4, cr8, cr0, 0 @ vmsr fpexc, r4 +skip_vfp_enable: + bl __enable_caches @ Turn caches on + bx r10 @ Return to CRT startup routine + + @ This enable us to be more precise about which caches we want +init_cpu_client_enable_dcache: +init_cpu_client_enable_icache: + mov r0, #1 + bx lr + +vector_base_addr: + .word _rdimon_vector_base + .weak _rdimon_vector_base +page_table_addr: + .word page_tables + + @ Vector code - must be PIC and in ARM state. +VectorCode: + b vector_reset + b vector_undef + b vector_swi + b vector_prefetch + b vector_dataabt + b vector_reserved + b vector_irq + b vector_fiq + +vector_reset: + adr sp, vector_sp_base + push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} + mov r4, #0 + b vector_common +vector_undef: + adr sp, vector_sp_base + push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} + mov r4, #1 + b vector_common +vector_swi: + adr sp, vector_sp_base + push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} + mov r4, #2 + b vector_common +vector_prefetch: + adr sp, vector_sp_base + push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} + mov r4, #3 + b vector_common +vector_dataabt: + adr sp, vector_sp_base + push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} + mov r4, #4 + b vector_common +vector_reserved: + adr sp, vector_sp_base + push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} + mov r4, #5 + b vector_common +vector_irq: + adr sp, vector_sp_base + push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} + mov r4, #6 + b vector_common +vector_fiq: + adr sp, vector_sp_base + push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} + mov r4, #7 + b vector_common +vector_common: + adr r1, vector_common_adr @ Find where we're going to + ldr r1, [r1] + bx r1 @ And branch there +vector_common_adr: + .word vector_common_2 @ Common handling code + + @ Vector stack + .p2align 3 @ Align to 8 byte boundary boundary to + @ keep ABI compatibility + .fill 32, 4, 0 @ 32-entry stack is enough for vector + @ handlers. +vector_sp_base: +VectorCode_Limit: + @ End of PIC code for vectors + + @ Common Handling of vectors + .type vector_common_2, %function +vector_common_2: + mrs r1, APSR + mrs r2, SPSR + push {r1, r2} @ Save PSRs + + @ Output the vector we have caught + bl out_nl + adr r0, which_vector + bl out_string + adr r0, vector_names + mov r1, #11 + mla r0, r4, r1, r0 + bl out_string + bl out_nl + + @ Dump the registers, these are 4-byte aligned so we can reach them + @ with a simple ADR here. + adr r6, register_names + mov r7, #0 +dump_r_loop: + mov r0, r6 + bl out_string + add r6, r6, #6 + ldr r0, [sp, r7, lsl #2] + bl out_word + bl out_nl + add r7, r7, #1 + cmp r7, #16 + blt dump_r_loop + adr r0, end + bl out_string + + @ And exit + mov r0, #24 + orr r1, r4, #0x20000 + svc 0x00123456 + + @ Output the string in r0 +out_string: + push {lr} + mov r1, r0 + mov r0, #4 + svc 0x00123456 + pop {pc} + + @ Output a New-line +out_nl: + mov r0, #10 + @ Fallthrough + + @ Output the character in r0 +out_char: + push {lr} + strb r0, [sp, #-4]! + mov r0, #3 + mov r1, sp + svc 0x00123456 + add sp, sp, #4 + pop {pc} + + @ Output the value of r0 as a hex-word +out_word: + push {r4, r5, r6, lr} + mov r4, r0 + mov r5, #28 + adr r6, hexchars +word_loop: + lsr r0, r4, r5 + and r0, r0, #15 + ldrb r0, [r6, r0] + bl out_char + subs r5, r5, #4 + bpl word_loop + pop {r4, r5, r6, pc} + +hexchars: + .ascii "0123456789abcdef" + +which_vector: + .asciz "Hit vector:" +end: + .asciz "End.\n" + +vector_names: + .asciz "reset " + .asciz "undef " + .asciz "swi " + .asciz "prefetch " + .asciz "data abort" + .asciz "reserved " + .asciz "irq " + .asciz "fiq " + + @ 4-byte aligned so that we can reach this with a simple ADR above. + .p2align 2 +register_names: + .asciz "apsr " + .asciz "spsr " + .asciz "r0 " + .asciz "r1 " + .asciz "r2 " + .asciz "r3 " + .asciz "r4 " + .asciz "r5 " + .asciz "r6 " + .asciz "r7 " + .asciz "r8 " + .asciz "r9 " + .asciz "r10 " + .asciz "r11 " + .asciz "r12 " + .asciz "r14 " + + .p2align 3 + + + @ Enable the caches +__enable_caches: + mov r0, #0 + mcr p15, 0, r0, cr8, cr7, 0 @ Invalidate all unified-TLB + mov r0, #0 + mcr p15, 0, r0, cr7, cr5, 6 @ Invalidate branch predictor + mrc p15, 0, r4, cr1, cr0, 0 @ Read SCTLR + orr r4, r4, #0x800 @ Enable branch predictor + mcr p15, 0, r4, cr1, cr0, 0 @ Set SCTLR + mov r5, lr @ Save LR as we're going to BL + mrc p15, 0, r4, cr1, cr0, 0 @ Read SCTLR + bl init_cpu_client_enable_icache + cmp r0, #0 + it ne + orrne r4, r4, #0x1000 @ Enable I-Cache + bl init_cpu_client_enable_dcache + cmp r0, #0 + it ne + orrne r4, r4, #4 + mcr p15, 0, r4, cr1, cr0, 0 @ Enable D-Cache + bx r5 @ Return + +__reset_caches: + mov ip, lr @ Save LR + mov r0, #0 + mcr p15, 0, r0, cr7, cr5, 6 @ Invalidate branch predictor + mrc p15, 0, r6, cr1, cr0, 0 @ Read SCTLR + mrc p15, 0, r0, cr1, cr0, 0 @ Read SCTLR! + bic r0, r0, #0x1000 @ Disable I cache + mcr p15, 0, r0, cr1, cr0, 0 @ Write SCTLR + mrc p15, 1, r0, cr0, cr0, 1 @ Read CLIDR + tst r0, #3 @ Harvard Cache? + mov r0, #0 + it ne + mcrne p15, 0, r0, cr7, cr5, 0 @ Invalidate Instruction Cache? + + mrc p15, 0, r1, cr1, cr0, 0 @ Read SCTLR (again!) + orr r1, r1, #0x800 @ Enable branch predictor + + @ If we're not enabling caches we have + @ no more work to do. + bl init_cpu_client_enable_icache + cmp r0, #0 + it ne + orrne r1, r1, #0x1000 @ Enable I-Cache now - + @ We actually only do this if we have a + @ Harvard style cache. + it eq + bleq init_cpu_client_enable_dcache + itt eq + cmpeq r0, #0 + beq Finished1 + + mcr p15, 0, r1, cr1, cr0, 0 @ Write SCTLR (turn on Branch predictor & I-cache) + + mrc p15, 1, r0, cr0, cr0, 1 @ Read CLIDR + ands r3, r0, #0x7000000 + lsr r3, r3, #23 @ Total cache levels << 1 + beq Finished1 + + mov lr, #0 @ lr = cache level << 1 +Loop11: + mrc p15, 1, r0, cr0, cr0, 1 @ Read CLIDR + add r2, lr, lr, lsr #1 @ r2 holds cache 'set' position + lsr r1, r0, r2 @ Bottom 3-bits are Ctype for this level + and r1, r1, #7 @ Get those 3-bits alone + cmp r1, #2 + blt Skip1 @ No cache or only I-Cache at this level + mcr p15, 2, lr, cr0, cr0, 0 @ Write CSSELR + mov r1, #0 + isb sy + mrc p15, 1, r1, cr0, cr0, 0 @ Read CCSIDR + and r2, r1, #7 @ Extract line length field + add r2, r2, #4 @ Add 4 for the line length offset (log2 16 bytes) + movw r0, #0x3ff + ands r0, r0, r1, lsr #3 @ r0 is the max number on the way size + clz r4, r0 @ r4 is the bit position of the way size increment + movw r5, #0x7fff + ands r5, r5, r1, lsr #13 @ r5 is the max number of the index size (right aligned) +Loop21: + mov r7, r0 @ r7 working copy of max way size +Loop31: + orr r1, lr, r7, lsl r4 @ factor in way number and cache number + orr r1, r1, r5, lsl r2 @ factor in set number + tst r6, #4 @ D-Cache on? + ite eq + mcreq p15, 0, r1, cr7, cr6, 2 @ No - invalidate by set/way + mcrne p15, 0, r1, cr7, cr14, 2 @ yes - clean + invalidate by set/way + subs r7, r7, #1 @ Decrement way number + bge Loop31 + subs r5, r5, #1 @ Decrement set number + bge Loop21 +Skip1: + add lr, lr, #2 @ increment cache number + cmp r3, lr + bgt Loop11 +Finished1: + @ Now we know the caches are clean we can: + mrc p15, 0, r4, cr1, cr0, 0 @ Read SCTLR + bic r4, r4, #4 @ Disable D-Cache + mcr p15, 0, r4, cr1, cr0, 0 @ Write SCTLR + mov r4, #0 + mcr p15, 0, r4, cr7, cr5, 6 @ Write BPIALL + + bx ip @ Return + + @ Set Z if this is a Cortex-A15 or Cortex_A7 + @ Other flags corrupted +is_a15_a7: + mrc p15, 0, r8, c0, c0, 0 + movw r9, #0xfff0 + movt r9, #0xff0f + and r8, r8, r9 + movw r9, #0xc0f0 + movt r9, #0x410f + cmp r8, r9 + movw r9, #0xc070 + movt r9, #0x410f + it ne + cmpne r8, r9 + bx lr + + @ Descriptor type: Section + @ Bufferable: True + @ Cacheable: True + @ Execute Never: False + @ Domain: 0 + @ Impl. Defined: 0 + @ Access: 0/11 Full access + @ TEX: 001 + @ Shareable: False + @ Not Global: False + @ Supersection: False +#define PT(X) \ + .word X; +#define PT2(X) \ + PT(X) PT(X + 0x100000) PT(X + 0x200000) PT(X + 0x300000) +#define PT3(X) \ + PT2(X) PT2(X + 0x400000) PT2(X + 0x800000) PT2(X + 0xc00000) +#define PT4(X) \ + PT3(X) PT3(X + 0x1000000) PT3(X + 0x2000000) PT3(X + 0x3000000) +#define PT5(X) \ + PT4(X) PT4(X + 0x4000000) PT4(X + 0x8000000) PT4(X + 0xc000000) +#define PT6(X) \ + PT5(X) PT5(X + 0x10000000) PT5(X + 0x20000000) PT5(X + 0x30000000) +#define PT7(X) \ + PT6(X) PT6(X + 0x40000000) PT6(X + 0x80000000) PT6(X + 0xc0000000) + + .section page_tables_section, "aw", %progbits + .p2align 14 +page_tables: + PT7(0x1c0e) + +#endif //#if (__ARM_ARCH_PROFILE == 'A') diff --git a/libgloss/arm/cpu-init/rdimon-aem.S b/libgloss/arm/cpu-init/rdimon-aem.S index 2aacbeba9..7bd086bbf 100644 --- a/libgloss/arm/cpu-init/rdimon-aem.S +++ b/libgloss/arm/cpu-init/rdimon-aem.S @@ -1,4 +1,4 @@ -/* Copyright (c) 2005-2013 ARM Ltd. All rights reserved. +/* Copyright (c) 2026 ARM Ltd. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -23,520 +23,7 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* This file gives a basic initialisation of a Cortex-A series core. It is - the bare minimum required to get Cortex-A core running with a semihosting - interface. +/* This file is a wrapper for the initialization code. It helps + manage multilibs without affecting the build system. */ - It sets up a basic 1:1 phsyical address to virtual address mapping; - turns the MMU on; enables branch prediction; activates any integrated - caches; enables the Advanced SIMD and VFP co-processors; and installs - basic exception handlers. - - It does not handle peripherals, and assumes all memory is Normal. - - It does not change processor state from the startup privilege and security - level. - - This has only been tested to work in ARM state. - - By default it assumes exception vectors are located from address 0. - However, if this is not true they can be moved by defining the - _rdimon_vector_base symbol. For example if you have HIVECS enabled you - may pass --defsym _rdimon_vector_base=0xffff0000 on the linker command - line. */ - - /* __ARM_ARCH_PROFILE is defined from GCC 4.8 onwards, however __ARM_ARCH_7A - has been defined since 4.2 onwards, which is when v7-a support was added - and hence 'A' profile support was added in the compiler. Allow for this - file to be built with older compilers. */ -#if defined(__ARM_ARCH_7A__) || (__ARM_ARCH_PROFILE == 'A') - .syntax unified - .arch armv7-a - .arm - - @ CPU Initialisation - .globl _rdimon_hw_init_hook - .type _rdimon_hw_init_hook, %function - -_rdimon_hw_init_hook: - @ Only run the code on CPU 0 - otherwise spin - mrc p15, 0, r4, cr0, cr0, 5 @ Read MPIDR - ands r4, r4, #15 -spin: - bne spin - - mov r10, lr @ Save LR for final return - -#ifdef __ARMEB__ - @ Setup for Big Endian - setend be - mrc p15, 0, r4, cr1, cr0, 0 @ Read SCTLR - orr r4, r4, #(1<<25) @ Switch to Big Endian (Set SCTLR.EE) - mcr p15, 0, r4, cr1, cr0, 0 @ Write SCTLR -#else - @ Setup for Little Endian - setend le - mrc p15, 0, r4, cr1, cr0, 0 @ Read SCTLR - bic r4, r4, #(1<<25) @ Switch to LE (unset SCTLR.EE) - mcr p15, 0, r4, cr1, cr0, 0 @ Write SCTLR -#endif - - bl is_a15_a7 - - @ For Cortex-A15 and Cortex-A7 only: - @ Write zero into the ACTLR to turn everything on. - itt eq - moveq r4, #0 - mcreq p15, 0, r4, c1, c0, 1 - isb - - @ For Cortex-A15 and Cortex-A7 only: - @ Set ACTLR:SMP bit before enabling the caches and MMU, - @ or performing any cache and TLB maintenance operations. - ittt eq - mrceq p15, 0, r4, c1, c0, 1 @ Read ACTLR - orreq r4, r4, #(1<<6) @ Enable ACTLR:SMP - mcreq p15, 0, r4, c1, c0, 1 @ Write ACTLR - isb - - @ Setup for exceptions being taken to Thumb/ARM state - mrc p15, 0, r4, cr1, cr0, 0 @ Read SCTLR -#if defined(__thumb__) - orr r4, r4, #(1 << 30) @ Enable SCTLR.TE -#else - bic r4, r4, #(1 << 30) @ Disable SCTLR.TE -#endif - mcr p15, 0, r4, cr1, cr0, 0 @ Write SCTLR - - bl __reset_caches - - mrc p15, 0, r4, cr1, cr0, 0 @ Read SCTLR - orr r4, r4, #(1<<22) @ Enable unaligned mode - bic r4, r4, #2 @ Disable alignment faults - bic r4, r4, #1 @ Disable MMU - mcr p15, 0, r4, cr1, cr0, 0 @ Write SCTLR - - mov r4, #0 - mcr p15, 0, r4, cr8, cr7, 0 @ Write TLBIALL - Invaliidate unified - @ TLB - @ Setup MMU Primary table P=V mapping. - mvn r4, #0 - mcr p15, 0, r4, cr3, cr0, 0 @ Write DACR - - mov r4, #0 @ Always use TTBR0, no LPAE - mcr p15, 0, r4, cr2, cr0, 2 @ Write TTBCR - adr r4, page_table_addr @ Load the base for vectors - ldr r4, [r4] - mrc p15, 0, r0, c0, c0, 5 @ read MPIDR - tst r0, #0x80000000 @ bis[31] - @ Set page table flags - there are two page table flag formats for the - @ architecture. For systems without multiprocessor extensions we use 0x1 - @ which is Inner cacheable/Outer non-cacheable. For systems with - @ multiprocessor extensions we use 0x59 which is Inner/Outer write-back, - @ no write-allocate, and cacheable. See the ARMARM-v7AR for more details. - it ne - addne r4, r4, #0x58 - add r4, r4, #1 - - mcr p15, 0, r4, cr2, cr0, 0 @ Write TTBR0 - - mov r0, #34 @ 0x22 @ TR0 and TR1 - normal memory - orr r0, r0, #(1 << 19) @ Shareable - mcr p15, 0, r0, cr10, cr2, 0 @ Write PRRR - movw r0, #0x33 - movt r0, #0x33 - mcr p15, 0, r0, cr10, cr2, 1 @ Write NMRR - mrc p15, 0, r0, cr1, cr0, 0 @ Read SCTLR - bic r0, r0, #(1 << 28) @ Clear TRE bit - mcr p15, 0, r0, cr1, cr0, 0 @ Write SCTLR - - @ Now install the vector code - we move the Vector code from where it is - @ in the image to be based at _rdimon_vector_base. We have to do this copy - @ as the code is all PC-relative. We actually cheat and do a BX so - @ that we are at a known address relatively quickly and have to move as - @ little code as possible. - mov r7, #(VectorCode_Limit - VectorCode) - adr r5, VectorCode - adr r6, vector_base_addr @ Load the base for vectors - ldr r6, [r6] - -copy_loop: @ Do the copy - ldr r4, [r5], #4 - str r4, [r6], #4 - subs r7, r7, #4 - bne copy_loop - - mrc p15, 0, r4, cr1, cr0, 0 @ Read SCTLR - bic r4, r4, #0x1000 @ Disable I Cache - bic r4, r4, #4 @ Disable D Cache - orr r4, r4, #1 @ Enable MMU - bic r4, r4, #(1 << 28) @ Clear TRE bit - mcr p15, 0, r4, cr1, cr0, 0 @ Write SCTLR - mrc p15, 0, r4, cr1, cr0, 2 @ Read CPACR - orr r4, r4, #0x00f00000 @ Turn on VFP Co-procs - bic r4, r4, #0x80000000 @ Clear ASEDIS bit - mcr p15, 0, r4, cr1, cr0, 2 @ Write CPACR - isb - mov r4, #0 - mcr p15, 0, r4, cr7, cr5, 4 @ Flush prefetch buffer - mrc p15, 0, r4, cr1, cr0, 2 @ Read CPACR - ubfx r4, r4, #20, #4 @ Extract bits [20, 23) - cmp r4, #0xf @ If not all set then the CPU does not - itt eq @ have FP or Advanced SIMD. - moveq r4, #0x40000000 @ Enable FP and Advanced SIMD - mcreq p10, 7, r4, cr8, cr0, 0 @ vmsr fpexc, r4 -skip_vfp_enable: - bl __enable_caches @ Turn caches on - bx r10 @ Return to CRT startup routine - - @ This enable us to be more precise about which caches we want -init_cpu_client_enable_dcache: -init_cpu_client_enable_icache: - mov r0, #1 - bx lr - -vector_base_addr: - .word _rdimon_vector_base - .weak _rdimon_vector_base -page_table_addr: - .word page_tables - - @ Vector code - must be PIC and in ARM state. -VectorCode: - b vector_reset - b vector_undef - b vector_swi - b vector_prefetch - b vector_dataabt - b vector_reserved - b vector_irq - b vector_fiq - -vector_reset: - adr sp, vector_sp_base - push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} - mov r4, #0 - b vector_common -vector_undef: - adr sp, vector_sp_base - push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} - mov r4, #1 - b vector_common -vector_swi: - adr sp, vector_sp_base - push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} - mov r4, #2 - b vector_common -vector_prefetch: - adr sp, vector_sp_base - push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} - mov r4, #3 - b vector_common -vector_dataabt: - adr sp, vector_sp_base - push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} - mov r4, #4 - b vector_common -vector_reserved: - adr sp, vector_sp_base - push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} - mov r4, #5 - b vector_common -vector_irq: - adr sp, vector_sp_base - push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} - mov r4, #6 - b vector_common -vector_fiq: - adr sp, vector_sp_base - push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} - mov r4, #7 - b vector_common -vector_common: - adr r1, vector_common_adr @ Find where we're going to - ldr r1, [r1] - bx r1 @ And branch there -vector_common_adr: - .word vector_common_2 @ Common handling code - - @ Vector stack - .p2align 3 @ Align to 8 byte boundary boundary to - @ keep ABI compatibility - .fill 32, 4, 0 @ 32-entry stack is enough for vector - @ handlers. -vector_sp_base: -VectorCode_Limit: - @ End of PIC code for vectors - - @ Common Handling of vectors - .type vector_common_2, %function -vector_common_2: - mrs r1, APSR - mrs r2, SPSR - push {r1, r2} @ Save PSRs - - @ Output the vector we have caught - bl out_nl - adr r0, which_vector - bl out_string - adr r0, vector_names - mov r1, #11 - mla r0, r4, r1, r0 - bl out_string - bl out_nl - - @ Dump the registers, these are 4-byte aligned so we can reach them - @ with a simple ADR here. - adr r6, register_names - mov r7, #0 -dump_r_loop: - mov r0, r6 - bl out_string - add r6, r6, #6 - ldr r0, [sp, r7, lsl #2] - bl out_word - bl out_nl - add r7, r7, #1 - cmp r7, #16 - blt dump_r_loop - adr r0, end - bl out_string - - @ And exit - mov r0, #24 - orr r1, r4, #0x20000 - svc 0x00123456 - - @ Output the string in r0 -out_string: - push {lr} - mov r1, r0 - mov r0, #4 - svc 0x00123456 - pop {pc} - - @ Output a New-line -out_nl: - mov r0, #10 - @ Fallthrough - - @ Output the character in r0 -out_char: - push {lr} - strb r0, [sp, #-4]! - mov r0, #3 - mov r1, sp - svc 0x00123456 - add sp, sp, #4 - pop {pc} - - @ Output the value of r0 as a hex-word -out_word: - push {r4, r5, r6, lr} - mov r4, r0 - mov r5, #28 - adr r6, hexchars -word_loop: - lsr r0, r4, r5 - and r0, r0, #15 - ldrb r0, [r6, r0] - bl out_char - subs r5, r5, #4 - bpl word_loop - pop {r4, r5, r6, pc} - -hexchars: - .ascii "0123456789abcdef" - -which_vector: - .asciz "Hit vector:" -end: - .asciz "End.\n" - -vector_names: - .asciz "reset " - .asciz "undef " - .asciz "swi " - .asciz "prefetch " - .asciz "data abort" - .asciz "reserved " - .asciz "irq " - .asciz "fiq " - - @ 4-byte aligned so that we can reach this with a simple ADR above. - .p2align 2 -register_names: - .asciz "apsr " - .asciz "spsr " - .asciz "r0 " - .asciz "r1 " - .asciz "r2 " - .asciz "r3 " - .asciz "r4 " - .asciz "r5 " - .asciz "r6 " - .asciz "r7 " - .asciz "r8 " - .asciz "r9 " - .asciz "r10 " - .asciz "r11 " - .asciz "r12 " - .asciz "r14 " - - .p2align 3 - - - @ Enable the caches -__enable_caches: - mov r0, #0 - mcr p15, 0, r0, cr8, cr7, 0 @ Invalidate all unified-TLB - mov r0, #0 - mcr p15, 0, r0, cr7, cr5, 6 @ Invalidate branch predictor - mrc p15, 0, r4, cr1, cr0, 0 @ Read SCTLR - orr r4, r4, #0x800 @ Enable branch predictor - mcr p15, 0, r4, cr1, cr0, 0 @ Set SCTLR - mov r5, lr @ Save LR as we're going to BL - mrc p15, 0, r4, cr1, cr0, 0 @ Read SCTLR - bl init_cpu_client_enable_icache - cmp r0, #0 - it ne - orrne r4, r4, #0x1000 @ Enable I-Cache - bl init_cpu_client_enable_dcache - cmp r0, #0 - it ne - orrne r4, r4, #4 - mcr p15, 0, r4, cr1, cr0, 0 @ Enable D-Cache - bx r5 @ Return - -__reset_caches: - mov ip, lr @ Save LR - mov r0, #0 - mcr p15, 0, r0, cr7, cr5, 6 @ Invalidate branch predictor - mrc p15, 0, r6, cr1, cr0, 0 @ Read SCTLR - mrc p15, 0, r0, cr1, cr0, 0 @ Read SCTLR! - bic r0, r0, #0x1000 @ Disable I cache - mcr p15, 0, r0, cr1, cr0, 0 @ Write SCTLR - mrc p15, 1, r0, cr0, cr0, 1 @ Read CLIDR - tst r0, #3 @ Harvard Cache? - mov r0, #0 - it ne - mcrne p15, 0, r0, cr7, cr5, 0 @ Invalidate Instruction Cache? - - mrc p15, 0, r1, cr1, cr0, 0 @ Read SCTLR (again!) - orr r1, r1, #0x800 @ Enable branch predictor - - @ If we're not enabling caches we have - @ no more work to do. - bl init_cpu_client_enable_icache - cmp r0, #0 - it ne - orrne r1, r1, #0x1000 @ Enable I-Cache now - - @ We actually only do this if we have a - @ Harvard style cache. - it eq - bleq init_cpu_client_enable_dcache - itt eq - cmpeq r0, #0 - beq Finished1 - - mcr p15, 0, r1, cr1, cr0, 0 @ Write SCTLR (turn on Branch predictor & I-cache) - - mrc p15, 1, r0, cr0, cr0, 1 @ Read CLIDR - ands r3, r0, #0x7000000 - lsr r3, r3, #23 @ Total cache levels << 1 - beq Finished1 - - mov lr, #0 @ lr = cache level << 1 -Loop11: - mrc p15, 1, r0, cr0, cr0, 1 @ Read CLIDR - add r2, lr, lr, lsr #1 @ r2 holds cache 'set' position - lsr r1, r0, r2 @ Bottom 3-bits are Ctype for this level - and r1, r1, #7 @ Get those 3-bits alone - cmp r1, #2 - blt Skip1 @ No cache or only I-Cache at this level - mcr p15, 2, lr, cr0, cr0, 0 @ Write CSSELR - mov r1, #0 - isb sy - mrc p15, 1, r1, cr0, cr0, 0 @ Read CCSIDR - and r2, r1, #7 @ Extract line length field - add r2, r2, #4 @ Add 4 for the line length offset (log2 16 bytes) - movw r0, #0x3ff - ands r0, r0, r1, lsr #3 @ r0 is the max number on the way size - clz r4, r0 @ r4 is the bit position of the way size increment - movw r5, #0x7fff - ands r5, r5, r1, lsr #13 @ r5 is the max number of the index size (right aligned) -Loop21: - mov r7, r0 @ r7 working copy of max way size -Loop31: - orr r1, lr, r7, lsl r4 @ factor in way number and cache number - orr r1, r1, r5, lsl r2 @ factor in set number - tst r6, #4 @ D-Cache on? - ite eq - mcreq p15, 0, r1, cr7, cr6, 2 @ No - invalidate by set/way - mcrne p15, 0, r1, cr7, cr14, 2 @ yes - clean + invalidate by set/way - subs r7, r7, #1 @ Decrement way number - bge Loop31 - subs r5, r5, #1 @ Decrement set number - bge Loop21 -Skip1: - add lr, lr, #2 @ increment cache number - cmp r3, lr - bgt Loop11 -Finished1: - @ Now we know the caches are clean we can: - mrc p15, 0, r4, cr1, cr0, 0 @ Read SCTLR - bic r4, r4, #4 @ Disable D-Cache - mcr p15, 0, r4, cr1, cr0, 0 @ Write SCTLR - mov r4, #0 - mcr p15, 0, r4, cr7, cr5, 6 @ Write BPIALL - - bx ip @ Return - - @ Set Z if this is a Cortex-A15 or Cortex_A7 - @ Other flags corrupted -is_a15_a7: - mrc p15, 0, r8, c0, c0, 0 - movw r9, #0xfff0 - movt r9, #0xff0f - and r8, r8, r9 - movw r9, #0xc0f0 - movt r9, #0x410f - cmp r8, r9 - movw r9, #0xc070 - movt r9, #0x410f - it ne - cmpne r8, r9 - bx lr - - @ Descriptor type: Section - @ Bufferable: True - @ Cacheable: True - @ Execute Never: False - @ Domain: 0 - @ Impl. Defined: 0 - @ Access: 0/11 Full access - @ TEX: 001 - @ Shareable: False - @ Not Global: False - @ Supersection: False -#define PT(X) \ - .word X; -#define PT2(X) \ - PT(X) PT(X + 0x100000) PT(X + 0x200000) PT(X + 0x300000) -#define PT3(X) \ - PT2(X) PT2(X + 0x400000) PT2(X + 0x800000) PT2(X + 0xc00000) -#define PT4(X) \ - PT3(X) PT3(X + 0x1000000) PT3(X + 0x2000000) PT3(X + 0x3000000) -#define PT5(X) \ - PT4(X) PT4(X + 0x4000000) PT4(X + 0x8000000) PT4(X + 0xc000000) -#define PT6(X) \ - PT5(X) PT5(X + 0x10000000) PT5(X + 0x20000000) PT5(X + 0x30000000) -#define PT7(X) \ - PT6(X) PT6(X + 0x40000000) PT6(X + 0x80000000) PT6(X + 0xc0000000) - - .section page_tables_section, "aw", %progbits - .p2align 14 -page_tables: - PT7(0x1c0e) - -#endif //#if defined(__ARM_ARCH_7A__) || __ARM_ARCH_PROFILE == 'A' +#include "rdimon-aem-a.S" From patchwork Wed Jun 24 19:58:34 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 137746 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 140654BA23EB for ; Wed, 24 Jun 2026 20:01:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 140654BA23EB Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=rSBErvhV; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=rSBErvhV X-Original-To: newlib@sourceware.org Delivered-To: newlib@sourceware.org Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazlp170110003.outbound.protection.outlook.com [IPv6:2a01:111:f403:c207::3]) by sourceware.org (Postfix) with ESMTPS id 207E74BA2E1E for ; Wed, 24 Jun 2026 20:00:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 207E74BA2E1E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 207E74BA2E1E Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:c207::3 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1782331215; cv=pass; b=wzCPB1JuGcUpewLwHgyS1m0sXbUeG71glbPCBU2SINoCgcX06H52lZs+QqdJi7DcgGpQmvKrspe6BYn1lQEP768z/DeKkfOqSGcKzpntHbdaVR+4iCqEHIKonQJq3bTii5cpewGOC55lugaz1S5riVPASb7aYqOYwX1loDlgz0w= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1782331215; c=relaxed/simple; bh=PUPl9RvF6RDtLdaDtuEwY9fFibjVsfcgY5lmF64VeXU=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=sGn0kgD9Wl8x8UASfQlzHcjV1wdCkY6l0Lqg7aFgM4YVsHrtEg1a49PgperPoBEj/qhp5McKhrzTeGK5UJmq+LuPV1ac9L98Bt+hB0S6UD67g2N1wRKkv8eN0Cf4cKyj4ezwqy7EuocWCmJoS+1WlMlK9MljWq/iBAdtiEPtRFM= ARC-Authentication-Results: i=3; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=rSBErvhV; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=rSBErvhV DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 207E74BA2E1E ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=IKv/tRzqL9yuIsdISC5w0b0XFpmv6qhNlViDqb/W1KeuENaZGV0zzAi+vtuBwWIBCU5UbMbsxl+Cl1ghhNrWpDyDGghDN1OQPtvgU/b8SPUkaiA8bHXj7Tgeelazn72WUpRN1fmeMq1iSQcLKHTxMNmWw5hPF8kd9ao+tQqTlQqOhs6lbv/J2I5F19+DND8i1D6g9IDbmL2ZiNfBeeKXRv6cIU4ZiAUJEbw5CLq4XxsYuTxZlAlqwBpcH6ZbtcSY758WPrAEPzilPHe8tSo93Hwddu1LLMzfRP0GS4AfQZO5D8RvGsHyxDMLKwIjfiSfe01vH3V/IUgbdvlw0ML4Zg== ARC-Message-Signature: i=2; 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=aaANnd0sn/9Sm94+jJk7UdO0m7BKb8WkNz8vvAH+rMs=; b=NsX2FvhALdxP6puM67T+1xA1oeriJCaBrcoV3zL4LbeXEHCob5NVpsI+Dddsm208NN75DZ4PRzA4K8Zf5NBQYx6K+N/v/+ur0VGniPo7UfytGumKhCzyo6Y/fyPr2QqRKzLCTAtIu/3p+NCPoDJYg7dc3Zwgs96ToHJpW9e7Sy10WAKNwDo5asf9G4aUJjdBMiYB5xXXE/oiQmNOZaPOp+OUgpdQcQH4nyKV7g/dD2vq4RHNo1sJwUnkGE9vqvRV5mJ3GDc5vqzRhIyiyLUuWrJmo0ZAn1mL7rur4jmyIUuChOUWF+WsiWVlch0hmuuhzXmcXv37ycBv9myPnxegcA== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aaANnd0sn/9Sm94+jJk7UdO0m7BKb8WkNz8vvAH+rMs=; b=rSBErvhVapjwH6G6Yr39eNQuDBCc8QhyZ0GUOPAD6xkhoHCseGJex4Ishxkii+KXeeIAldKoiyzSJUghcCVQ6x8F/YP2t3K/BTKBdbw1amEgdGtIYjX0UZ+G+wVnodrNpl7cqoQfOVsCCYN5uo9yv11Vb5J457KZRhPsVt1Uorg= Received: from CWLP123CA0186.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:19b::15) by AM8PR08MB6563.eurprd08.prod.outlook.com (2603:10a6:20b:315::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.13; Wed, 24 Jun 2026 20:00:08 +0000 Received: from AM4PEPF00025F99.EURPRD83.prod.outlook.com (2603:10a6:400:19b:cafe::87) by CWLP123CA0186.outlook.office365.com (2603:10a6:400:19b::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.159.14 via Frontend Transport; Wed, 24 Jun 2026 20:00:07 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by AM4PEPF00025F99.mail.protection.outlook.com (10.167.16.8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.181.0 via Frontend Transport; Wed, 24 Jun 2026 20:00:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DDbMp6PqGE3//v1OErEZpPtgIpoGaKfH/HsxuW4ITr/FjUPnpMXnNsWev1xuf5HBM3zlWDm4gdrD6gE7NdC6j+8GgtnFmsg1oS0la3ZlppvQdre+UXyu0821LEMNE+GCNGEwU6+BJ+vuM3uOI8T4dUe4DKhykq8v/8xOyvHMSS8wfr14LKhTDQC6PzMek0zYlNT8ycBR5YaWwM8SbUAfCU/e2s2kf3WnOmjq87KMikWO5tECwbU4ZFjhzzdgpwZGEq3FziPy7zH0/y7A5nQOb5JfMyXi/HuaYjitRYc8noRvZUjhFD4fju3XiGgvMgepfbL92lTgGKGgFT9X6JTGjQ== 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=aaANnd0sn/9Sm94+jJk7UdO0m7BKb8WkNz8vvAH+rMs=; b=ElHLBxoX0FnP8SCh+a4R+W1ZTynQihnbOxNUfAOP4zf/Fl/ky6BV6ch9nQtLrHItQG8Gqh/Bv+XzJSRAXIh9C5rqSkqfqiVGYdTYDcyGHOghOATqvYelqKVps8aGssefuG4ZciWTtkEpDSw/TmfOuh0EWuP7vk/8/0zRtuWJRb60vPtY/8+3Bi12q0QPLbJc3i42Lzu/kYTjGRIEGTzf/qoPnBzDTsxjl9n5hbevKZqueaOatbadwsWnmnxtsU0VI6y/s4SHQOkRaRmgkgOQ/Qchk/AZxCBcUFHDUGuVIfUkDNltJ3kbs5EkubJWkOPfud18Fx9YJb0Gaz0/evohWw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 172.205.89.229) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aaANnd0sn/9Sm94+jJk7UdO0m7BKb8WkNz8vvAH+rMs=; b=rSBErvhVapjwH6G6Yr39eNQuDBCc8QhyZ0GUOPAD6xkhoHCseGJex4Ishxkii+KXeeIAldKoiyzSJUghcCVQ6x8F/YP2t3K/BTKBdbw1amEgdGtIYjX0UZ+G+wVnodrNpl7cqoQfOVsCCYN5uo9yv11Vb5J457KZRhPsVt1Uorg= Received: from AS4P190CA0037.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:5d1::18) by MRWPR08MB11807.eurprd08.prod.outlook.com (2603:10a6:501:9a::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Wed, 24 Jun 2026 19:58:59 +0000 Received: from AM3PEPF0000A797.eurprd04.prod.outlook.com (2603:10a6:20b:5d1:cafe::2b) by AS4P190CA0037.outlook.office365.com (2603:10a6:20b:5d1::18) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.159.14 via Frontend Transport; Wed, 24 Jun 2026 19:58:59 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 172.205.89.229) smtp.mailfrom=arm.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 172.205.89.229 as permitted sender) receiver=protection.outlook.com; client-ip=172.205.89.229; helo=nebula.arm.com; pr=C Received: from nebula.arm.com (172.205.89.229) by AM3PEPF0000A797.mail.protection.outlook.com (10.167.16.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Wed, 24 Jun 2026 19:58:59 +0000 Received: from AZ-NEU-EX04.Arm.com (10.240.25.138) by AZ-NEU-EX03.Arm.com (10.240.25.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Wed, 24 Jun 2026 19:58:59 +0000 Received: from e129018.arm.com (10.57.29.173) by mail.arm.com (10.240.25.138) with Microsoft SMTP Server id 15.2.2562.29 via Frontend Transport; Wed, 24 Jun 2026 19:58:57 +0000 From: Christophe Lyon To: CC: , , "Christophe Lyon" Subject: [PATCH v4 2/3] libgloss: arm: Add hardfault handler for M-profile Date: Wed, 24 Jun 2026 21:58:34 +0200 Message-ID: <20260624195835.206509-2-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260624195835.206509-1-christophe.lyon@arm.com> References: <20260624195835.206509-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM3PEPF0000A797:EE_|MRWPR08MB11807:EE_|AM4PEPF00025F99:EE_|AM8PR08MB6563:EE_ X-MS-Office365-Filtering-Correlation-Id: a9c21bf5-fdf3-4cfb-1b4f-08ded22b2ff8 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|82310400026|23010399003|1800799024|376014|36860700016|18002099003|22082099003|11063799006|3023799007|56012099006; X-Microsoft-Antispam-Message-Info-Original: k3qVp6MyWZeOn428deXXTWM4n8jZMf2f+z2p90EjYOF4IKu9idI/LLpiPmAJMY8CW0p9ikqJa+IpGS4lJAb2R81WumjzeRel94LAqMtK9flyAP+h9VVaY8a8hps+OH/A2sAtW73kpfbdMcndidzdJxRclaAtcUeQkxmxmDrObWCbHQiLmNbosNaOrlA8b/BSrbRUCGdZaPY+4IaWXZjXAZXYMkncNELBRGzg7+ZsKOvOYVINjY41pshNDneGJ5DcLoyfYCb6EovP9+6/crw03LVE0vLIiBTORtXEzmSkdRNJ9N6y682+u5t2eiBH777ancawcTxG3haawOLPA5ZT8gIcDsqLlC863vaFtcazlFIJG5I3yH9HQuYQJr6OZlsqvyEj7kKwiRtiZ3ZpNcooAJtSnkdkMKGDB+GyiBLBfOz8VzX8DESPYvGcjmAhLmRla+suvoRdYsepYcxvJmegOGZ5vc03ljah+Th87lG6x8dnNCTYXfyHMdJbRAAFf7kOXoMXHORFdxilPgAH4buPtWT+KCUVL0UIQqC2pTF7ZkI/SuE4X2M6pr+yReDnv5mka3qgAmu6SR6RXOlD4IEVdmRST3HHNSsLRjdj0LFxBhZoZI74ssb+aHFhcCfQKS/XotiLYYn2GOkS5eF22f6qMYy2Vb9UbEkYZHDlGfuSUBVlFSZf218Kw2RMpBMWXjGU+miHAd8anogg+7Minv3PBw== X-Forefront-Antispam-Report-Untrusted: CIP:172.205.89.229; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:nebula.arm.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(82310400026)(23010399003)(1800799024)(376014)(36860700016)(18002099003)(22082099003)(11063799006)(3023799007)(56012099006); DIR:OUT; SFP:1101; X-Exchange-RoutingPolicyChecked: Xtg3L9qQbEPyO1HBawKhqti4nZ2tMzyL6MAWbcLI4iwxBdzUIx7WeMFu/VlxITanxNSkseIW3/kvuOEjvvHED8PoRi9RB5d9EvbLI/rAhCtJCS702DjOY9xyZePkN/H2oe+HJSBi/DRHTNj6UBsvUw3Rcz6DcNQIuc8N4nTVpNlvRmNrodA4hiwq5RJEIQr07IKqdT1x04LqpExhmW1uNrom5kjrPZ/gsDgADCV7LbUhhaoL6/y4aJY4i0GLoE9y56MXMFsfnRViegydR4BpqWsjIrxx/t232pD1bpg6Me4tszvHP/Oc7nQ7/r2BUVfeoEz8BNrxfiboidbpIufsqA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MRWPR08MB11807 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM4PEPF00025F99.EURPRD83.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 26eb5476-f64f-419f-70ea-08ded22b0858 X-Microsoft-Antispam: BCL:0; ARA:13230040|35042699022|82310400026|1800799024|376014|23010399003|36860700016|14060799003|18002099003|22082099003|11063799006|56012099006|3023799007; X-Microsoft-Antispam-Message-Info: ipViv24tcPSiXwvFtuaukSQ0OL3Frh4UfL9nB+aCrpBDTGeyI5twRrN0D3yw0U7AP5cGlXPh7gTDxI79UG97Ee+ZlamFDg64KgAzVFM2kYEckxBKCqrXo2BTcBGpPZqmZd1rk/+qERAAM4brPbKIBtZJUkwrCVNawilz8AgqhmzfNt1gvqx3f1Zim1dUCv9ML/I5PDxRBW5lMT9Y6r+2giJC3fEkbIm8tAf584kMdhmm1PnXghwIUqxlGlwe3SKqR2wSmCcNVTnbGecAMz0VreRKsVklDEpqgNzdab4mnwLi0dxn7fogi7cB6y6VTL0vpbwwARfyagNE+jQX9BIg7zwqiPTlUgs6+3nyCMbjsCBWDdPbfGLY+Ni5XCm4ht8Dhn0dq/w6UkYlyjcBCgC/fIaYhfuLbI1cfoVBh3r4RmYHKjeUraiMiqd9W2h7FPeIjooblmUmEXEVy52qfMvMtNIvB+QdoYlL6s5HMEm1naBV3daZKeDhPoXW2vDVgBsw2u/ENlhAamHQwbDSjxicyDEUAeZyDb/5fhPEMTyb8H9CRzez7T/Zr265Wi456QffOE7hAV7KxXvPFyvxbbM7VBTb+9T73L07XJT487dDU/gJaMITeRmx9a/RP5KSAXKRhRk0m2hBAFIKD94QkMsaNHdbuKIT5NJXqlouIKkbluozRlnE52Cy8XFiSzXikVnFU4n6a3zwIY3XqpyhmqyfcQ== X-Forefront-Antispam-Report: CIP:4.158.2.129; CTRY:GB; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:outbound-uk1.az.dlp.m.darktrace.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(35042699022)(82310400026)(1800799024)(376014)(23010399003)(36860700016)(14060799003)(18002099003)(22082099003)(11063799006)(56012099006)(3023799007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: at/npoU6XX5sce7T/r3AzoIdllyrDlJb+K8kTTQJ2MO0gmfo4sfFMHOqAG35T+eoUZtgeSZN84iT1CQcX9LgfAlY8nB+Vh8zqhL5ZzxBs4Rj44FZo417Y3uDqtZR69CUfgNiCXWCBLIQ4Il5L0Vb9BdpJ2ssS9e8J6SttGg3bIRsKRJhF/b2IpaVddui3XTRkbCSK/V4iqYwm4qUkJyZeLuONhPCiBAOA/CsvNkYF7r7ALAqdVwZqkLw0Titue0bbwX7iwwX6aptOlQaUlfsbVs67N4KlFr9aHXpwYFTB2Yu/C3g1gu2R3KsyY7TcoQi3ECFI4U5ZE7EnpFDm3hq4SakIGrkUQZhkBT8iHu13l7FHnhlEFs3tvhaAgC8hjL3wrJTgwWWnkKwoJMJcleNYXpn+zTe7XlNxmMmlQb7TCnauPzV//YiuhaqnU738Rzc X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jun 2026 20:00:06.3107 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a9c21bf5-fdf3-4cfb-1b4f-08ded22b2ff8 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[4.158.2.129]; Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: AM4PEPF00025F99.EURPRD83.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6563 X-Spam-Status: No, score=-11.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, GIT_PATCH_0, SPF_HELO_PASS, SPF_NONE, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: newlib-bounces~patchwork=sourceware.org@sourceware.org After reaching a hardfault, the simulator enters an infinite loop unless we map the handler to 'abort'. The patch adds this minimal setup for M-profile in the new libgloss/arm/cpu-init/rdimon-aem-m.S and introduces the new libgloss/arm/elf-mprofile-mps2.specs to add the mapping to the right memory address. 2026-05-29 Andre Vieira Christophe Lyon libgloss/ * Makefile.in: Add entry for arm/mprofile-mps2.specs. * arm/Makefile.inc: Add entry for mprofile-mps2.specs. * arm/cpu-init/rdimon-aem-m.S: New file. * arm/cpu-init/rdimon-aem.S: Include rdimon-aem-m.S. * arm/elf-mprofile-mps2.specs: New file. --- libgloss/Makefile.in | 1 + libgloss/arm/Makefile.inc | 3 ++- libgloss/arm/cpu-init/rdimon-aem-m.S | 39 ++++++++++++++++++++++++++++ libgloss/arm/cpu-init/rdimon-aem.S | 1 + libgloss/arm/elf-mprofile-mps2.specs | 26 +++++++++++++++++++ 5 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 libgloss/arm/cpu-init/rdimon-aem-m.S create mode 100644 libgloss/arm/elf-mprofile-mps2.specs diff --git a/libgloss/Makefile.in b/libgloss/Makefile.in index 5146a7880..c03ea4e6b 100644 --- a/libgloss/Makefile.in +++ b/libgloss/Makefile.in @@ -2255,6 +2255,7 @@ TEXINFO_TEX = ../texinfo/texinfo.tex @CONFIG_ARM_TRUE@ arm/aprofile-validation-v2m.specs \ @CONFIG_ARM_TRUE@ arm/aprofile-ve-v2m.specs \ @CONFIG_ARM_TRUE@ arm/aprofile-ve.specs arm/pid.specs \ +@CONFIG_ARM_TRUE@ arm/mprofile-mps2.specs \ @CONFIG_ARM_TRUE@ arm/iq80310.specs @CONFIG_ARM_TRUE@arm_libgloss_linux_a_SOURCES = \ @CONFIG_ARM_TRUE@ arm/linux-syscalls0.c \ diff --git a/libgloss/arm/Makefile.inc b/libgloss/arm/Makefile.inc index 41fce3c99..5c740edcb 100644 --- a/libgloss/arm/Makefile.inc +++ b/libgloss/arm/Makefile.inc @@ -47,7 +47,8 @@ multilibtool_LIBRARIES += %D%/librdpmon.a %D%/aprofile-validation.specs \ %D%/aprofile-validation-v2m.specs \ %D%/aprofile-ve-v2m.specs \ - %D%/aprofile-ve.specs + %D%/aprofile-ve.specs \ + %D%/mprofile-mps2.specs multilibtool_DATA += \ %D%/rdimon-crt0.o \ %D%/rdimon-crt0-v2m.o diff --git a/libgloss/arm/cpu-init/rdimon-aem-m.S b/libgloss/arm/cpu-init/rdimon-aem-m.S new file mode 100644 index 000000000..611849077 --- /dev/null +++ b/libgloss/arm/cpu-init/rdimon-aem-m.S @@ -0,0 +1,39 @@ +/* Copyright (c) 2026 ARM Ltd. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the company may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/* This file gives a basic initialisation of an M-profile core. + + We define a hardfault handler, required to prevent the simulator + from entering into an infinite loop. This handler is located at + address 0xc by default when linking with mprofile-mps2.specs which + uses --section-start=.hardfault_handler_addr=0xc. */ + +#if (__ARM_ARCH_PROFILE == 'M') + /* On M-profile, call abort in case of hardfault: this causes the + simulator to abort execution instead of going into an infinite + loop. */ + .section .hardfault_handler_addr, "a" + .word abort +#endif diff --git a/libgloss/arm/cpu-init/rdimon-aem.S b/libgloss/arm/cpu-init/rdimon-aem.S index 7bd086bbf..208257fe0 100644 --- a/libgloss/arm/cpu-init/rdimon-aem.S +++ b/libgloss/arm/cpu-init/rdimon-aem.S @@ -27,3 +27,4 @@ manage multilibs without affecting the build system. */ #include "rdimon-aem-a.S" +#include "rdimon-aem-m.S" diff --git a/libgloss/arm/elf-mprofile-mps2.specs b/libgloss/arm/elf-mprofile-mps2.specs new file mode 100644 index 000000000..edaf71917 --- /dev/null +++ b/libgloss/arm/elf-mprofile-mps2.specs @@ -0,0 +1,26 @@ +# rdimon.specs +# +# Spec file for AArch32 M profile baremetal newlib with version 2 of +# the AngelAPI semi-hosting using the SVC trap instruction. +# +# This version supports extensibility through an extension mechanism. + +%rename link_gcc_c_sequence rdimon_link_gcc_c_sequence + +%rename link old_link + +*link: +--section-start=.hardfault_handler_addr=0xc %(old_link) + +*rdimon_libc: +%{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano} + +*rdimon_libgloss: +%{!specs=nano.specs:-lrdimon} %{specs=nano.specs:-lrdimon_nano} + +*link_gcc_c_sequence: +%(rdimon_link_gcc_c_sequence) --start-group %G %(rdimon_libc) %(rdimon_libgloss) --end-group + +*startfile: +crti%O%s crtbegin%O%s cpu-init/rdimon-aem.o%s %{!pg:rdimon-crt0%O%s} %{pg:rdimon-crt0%O%s} + From patchwork Wed Jun 24 19:58:35 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 137747 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 742A44BA23D0 for ; Wed, 24 Jun 2026 20:01:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 742A44BA23D0 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=BPQ2dYwa; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=BPQ2dYwa X-Original-To: newlib@sourceware.org Delivered-To: newlib@sourceware.org Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010030.outbound.protection.outlook.com [52.101.69.30]) by sourceware.org (Postfix) with ESMTPS id DC3AE4BA23C7 for ; Wed, 24 Jun 2026 20:00:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DC3AE4BA23C7 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org DC3AE4BA23C7 Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=52.101.69.30 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1782331227; cv=pass; b=QMwCEUwoXhrSk86BxD7ZbLjyH5sIj43Z8q2tkLW7H4t+4ja8NDu1PiRERreNF1k/qVPLeCfTAZlFH51hTdatBKgHLtlTE++uYjccqdil1k9Nylj/jzCIFqYiwTvlm4yaOF4EGGHRfdUWvLPawpaanW5cvAZt8aqvMIF/L8XGHZg= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1782331227; c=relaxed/simple; bh=+HbK9/bVVoUE5lw+/XQhpH2TFRTtOB8NBIMrhfj/75o=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=ZZsKYJK+E7JhVQKkyskUv2wLSX18egj9ARKCv5UPSCTeeYC1knHwpu1LOf1pghW+iesAfj/EV22VDW4wL/saWD+QO+8e0Ilvj12jg+0cWioA4E5RZtbOJkSC+7qT2WwN6Fd3SF8lIqznGUGYGJ/NowsSrVYB19F5dbZn/2w/2A8= ARC-Authentication-Results: i=3; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=BPQ2dYwa; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=BPQ2dYwa DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DC3AE4BA23C7 ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=Mv+V8PJtwRo7/MvXX89kRTAVo3GFPvVWlFlQRLL8/sm6wjUjTJuG8L7e2lFLcGNln7slLyJ30QYNGvI8x8GaTSZlCawUinKg32JLW+aendNepfcAKWPHcTwQb6O7ZtLo2evUrVei8+RQFgE4CvDprpDvmjsBdppJx1CXA5yykXVB1M72J8QSdn77QD2709OVLNWvDZvLka23hquuA3UpuiN4wXjQ7YVoDG7XwTz7AC0SljGg4jOiMKnGd4wlw6DFO96bgwydtVvi/AhmoGCY7bzaD6/XdBcn2KGaAXPE0AjMDL8XKvyQIRd81CEA0SQlwPYi3aJCBVKwg2RVWQXN7g== ARC-Message-Signature: i=2; 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=FIc9STo/CtvlygpoTso4CZe+0JurHa7g0Sd/HSZqu0U=; b=ElWEnSkHMruWR9eGpbqWyoGnOCbQOXXZjatzPpDGQ3zBbBWMUQKCee7nbu+JOwqTHYdhcDrlfn2Ufr2OsbPwthOYRjVkiaRVMgwiYXZnqhziLYxPjrvfyEZLjIZoHvjETxOAdymJ0yexFC/cclwKK2nugvF3wAhZ5f857GH67bLIMM4+EemXV1PEg+6ZoI9rvfTrzUH4TsgCu3U4CZT7pNoh2pJbC575BC+cw16XKnNv6eUJeBsKT1SEawX7Ha51Cg8Y2WGc+/McYI8vL6ddTlZ4i83ubQfc4wEmYzKgArWPKwIYcTD847Ccca72PtmhJ8+CKg8ENGC0MHg5C8wUXw== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FIc9STo/CtvlygpoTso4CZe+0JurHa7g0Sd/HSZqu0U=; b=BPQ2dYwa8oUT2tpDZgnhkhINUzJgdDERwHgGH/nXIDPb3sZpYO8g6QbpbDKyT/NZwt9HYVp1foJQPk4rQgS5UDWGROHAcY+MBwhsmem1OT7OGXBWYgTIlbrYz4WvBHi/oIhKD6sNSgAnI+DkubFRxBV8uoPb9CL4Ec06Fwvsf2A= Received: from AS4P190CA0027.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:5d0::16) by DB9PR08MB11309.eurprd08.prod.outlook.com (2603:10a6:10:607::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.16; Wed, 24 Jun 2026 20:00:15 +0000 Received: from AM4PEPF00027A5E.eurprd04.prod.outlook.com (2603:10a6:20b:5d0:cafe::32) by AS4P190CA0027.outlook.office365.com (2603:10a6:20b:5d0::16) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.159.16 via Frontend Transport; Wed, 24 Jun 2026 20:00:15 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by AM4PEPF00027A5E.mail.protection.outlook.com (10.167.16.72) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Wed, 24 Jun 2026 20:00:14 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kruc63BmXVlIDHIKNBBcwOlR2aLa++0AX6wrBAYTgj5u6yG7IZ1RCvLdDwkjouDWFFZMcjR/Dpjk39JFqQEbDFpoIQ4mS/lSMhFy6DZBdXJZVczvpSayIQ5E+k7+XV6+seVdDio0VdSppDDwVEZ1enQFgSuma6QghQeTJ3rIozhZscflpCWbUPzJ+U3Zq9jgzOeYKF9UdoJmu6hUrPVP/fFD11ll3J/81RTEuy6rOXnMK+IOBSn70A5elhtit0C0iJ+LZQp1B+c0uZZVHQaTH9UE9IKOR1XRAwG52Wt2s1AVVPbRFVrdsQphIWTqMzbOfDaxsvE+/WRMXmREpunxyg== 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=FIc9STo/CtvlygpoTso4CZe+0JurHa7g0Sd/HSZqu0U=; b=qXYLywe+4WfxDyUJFB3j6a3PMta655OALhz5domoNKDdDOUukoZ46BwLwtY4aRFRs0FQcYypdjEH4tvM85GzwiA5KrqEAmY6sL9sXIYtKgbONH9F7QXANCPAUsoypwTLg3a/3/UEqhhAxfdIqWbBIBS2UXeNwvVpddefF18dkYww2SCGcQrUW9l+UyldQMvCCvjFES8JeBd9o/kNsvMrXI4IyefYr/KhGghHMt5JDGcNlrcDsgXRzMInEKukMpWhr6qcWypgSrp0tnoGeOVDQr6GhfYNwvnKoJj5IyEtmM9/SlWVHd0SxpDcjUv6kXHWsyh9ptLdjBSZGpyEgh08ow== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 172.205.89.229) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FIc9STo/CtvlygpoTso4CZe+0JurHa7g0Sd/HSZqu0U=; b=BPQ2dYwa8oUT2tpDZgnhkhINUzJgdDERwHgGH/nXIDPb3sZpYO8g6QbpbDKyT/NZwt9HYVp1foJQPk4rQgS5UDWGROHAcY+MBwhsmem1OT7OGXBWYgTIlbrYz4WvBHi/oIhKD6sNSgAnI+DkubFRxBV8uoPb9CL4Ec06Fwvsf2A= Received: from AS9PR06CA0667.eurprd06.prod.outlook.com (2603:10a6:20b:49c::12) by AS8PR08MB9148.eurprd08.prod.outlook.com (2603:10a6:20b:57f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.14; Wed, 24 Jun 2026 19:59:09 +0000 Received: from AM3PEPF0000A799.eurprd04.prod.outlook.com (2603:10a6:20b:49c:cafe::66) by AS9PR06CA0667.outlook.office365.com (2603:10a6:20b:49c::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.159.14 via Frontend Transport; Wed, 24 Jun 2026 19:59:09 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 172.205.89.229) smtp.mailfrom=arm.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 172.205.89.229 as permitted sender) receiver=protection.outlook.com; client-ip=172.205.89.229; helo=nebula.arm.com; pr=C Received: from nebula.arm.com (172.205.89.229) by AM3PEPF0000A799.mail.protection.outlook.com (10.167.16.104) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Wed, 24 Jun 2026 19:59:09 +0000 Received: from AZ-NEU-EX04.Arm.com (10.240.25.138) by AZ-NEU-EX03.Arm.com (10.240.25.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Wed, 24 Jun 2026 19:59:02 +0000 Received: from e129018.arm.com (10.57.29.173) by mail.arm.com (10.240.25.138) with Microsoft SMTP Server id 15.2.2562.29 via Frontend Transport; Wed, 24 Jun 2026 19:59:00 +0000 From: Christophe Lyon To: CC: , , "Christophe Lyon" Subject: [PATCH v4 3/3] arm: Enable FPU for M-profile Date: Wed, 24 Jun 2026 21:58:35 +0200 Message-ID: <20260624195835.206509-3-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260624195835.206509-1-christophe.lyon@arm.com> References: <20260624195835.206509-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM3PEPF0000A799:EE_|AS8PR08MB9148:EE_|AM4PEPF00027A5E:EE_|DB9PR08MB11309:EE_ X-MS-Office365-Filtering-Correlation-Id: 9a483072-89a8-4a47-3513-08ded22b34c5 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|36860700016|82310400026|23010399003|1800799024|376014|18002099003|22082099003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info-Original: b+zV0nO5EqAqRx7v0gjviAsY+wkEroQ40n1eWk8z8Zxw2cobQR2w5rLPSGdzF3zw+W1ii5fxW+dA5Kbm2IgjnPNk+biCHz+4Azom2doP2idbBunxMgioocDhNSQWf9QUeaQaXMitcei6vNwJ9cD/mvVYsC78J+x0Ycv/wzXkBFMSfLIKbQ09WPGVp8gssLJXx4qpXth3Ot0Tn/uSQ2MoZuC8Hn4T6v8nINazBrN0B8Psoa99zOp9i7DG5d1o5zAOkpKA/oolOvr61f+6MI6LocaO2ATRw2n3rT9SL6+zKroMqfo0oyxekoGICgQ5xlgKRftZtELFOQ03s195fwJ7n2wqpXxek3CiUV74F5AbzKrPhjF29JIzzQdBZ/JBDbm4aJ1nhpKHrZOn23oDuUVNBwJeSu4gRpCgLHneq0SLN0KIB6prSYd+OEnqATON3eZIgA1fpoWdJmDd30sVqZHffp2KBeOyRtynzTYyZYiIZKyZmMhYRFeULqMKJbS2/GfTjuUEXSesQ/ClQ3HPTsGgzef1phGVhT02iiXkldUKESYmvIoTL0xjXY/RFRATOSvs6Z0lFD1sJpO1EaLIV2Z0TnpafNE47PQbLslpRul6if+pon99VfMgmIHcPTVUd1lfidPldacuBWS4uGAtxNEbSDWNc30dsPtLCAnlH0UXO3C4YJzeHkxZJUyJ3mA1vZZ8tFgUCkG2S8UzZY10hcrtQw== X-Forefront-Antispam-Report-Untrusted: CIP:172.205.89.229; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:nebula.arm.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(36860700016)(82310400026)(23010399003)(1800799024)(376014)(18002099003)(22082099003)(56012099006)(11063799006); DIR:OUT; SFP:1101; X-Exchange-RoutingPolicyChecked: sbjShmd+v3GrVab7MPfXwJBIbezSl8RpwcpbuiJNLgcPWPXsPvqtchcZje6neJZFsWB2diKCtG+aGXiKcLhbZM0TAv/kBpzRXg8VyxXiVdkQcY1Zyj6ik8YVmsNyVbLrd9qVQfrlSHeKsfUG3csByJKg4wWnfZ3Z+ATXAh8iSiZwl6nau2jdxKpyXwByh4Yk0lZ/wEFOk91ImFDrIyD4+d0wls47zMiK7jWw1EYETHRXZlfM2+nYoMXDMecGcCgGe0e6ro8AqIOQePs3TQcL3eKKfUpQi1mI60w0Tg8+Z4+nOrec8ZAMmpJM3mdc+wsfbA1MkLKBd5qNMDmv2Hlljw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9148 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM4PEPF00027A5E.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 9fe3d726-d13f-4c28-e1ba-08ded22b0e41 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|23010399003|82310400026|1800799024|36860700016|35042699022|14060799003|22082099003|18002099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: DPaNP/Wx8ly/zK1q5yO8tXzacRMNzJ/2GKKeZbuALeh3lPfU3+uJrSVFOHKZvPckNWqs1H1tKhz+ERS65vl+pSdNTE4aLF/i2THsjkbdiSqCMtEVmBUIYKX8Jn6J8Elk10F02fLJK5xKm1gCN4YrhDa0V1syh/y7vIP3ifEOzffuwqw2mYc6CrZcHXu1ydYPOrW9/IuufhE+fk+2u1b8ngA4p7wjfWHels3qtNVG824VYgP13yqHFesJQRLcqFFcoVkANtu9ttMCGqpMDRXRIB35luEcYD1r5qZXqXvikzmCmC7Q/Ixg6hp06xwIv4TMMraSxMlZXhctPHW5kpkApqFkL2d7WPbDG8A5Fu9wtfXuyWD/p36nrwstgqxejqeje2kIYolfECns/yKVzhMU04dFzp5Zj2goK2iXdveuCn6bFdd3O+1/qlcK96YRbUFcDkJTlNHzFesFGJx4Ar5Xw1lUcsYy7k6nqW5qa+SRkIwq8f8OdzJEN9HLoVYMGRdB8cEPIAXfdxsDNTkNp0kxSnjmLdIAQ2ID0U5EFMFtfJyr2gTwS0JtLu8eS0xYULzskcon62LyLjH//WhYyLPSvg/C8OquxldfcuyaoEsXDXh8Oo7F61I122Mo9Tl6N0wGIG7qb7tgC1kK/NFEEDujBfzEMft4DFq1elDIYDX6+kVPBQp2Aw8ok7J8rW/McYj57iQy9Mai6qWmtStg4KAaWA== X-Forefront-Antispam-Report: CIP:4.158.2.129; CTRY:GB; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:outbound-uk1.az.dlp.m.darktrace.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(376014)(23010399003)(82310400026)(1800799024)(36860700016)(35042699022)(14060799003)(22082099003)(18002099003)(11063799006)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: oDvyh7dU/Tezzztbf72Tfxf4LCTr+uxcPIiHjCxRqtNW4wI3hkxOD3a5AKV6G0D14ZNHi9qbfck80rydqd4ID2rMGL8l28zL8pKABgq0X/QiTgv8qKwj8I6l/zoKi0fpOi4+hwWXYPfyweNaJb0iWZNAa1RPdrVzZ6fe70aMt06nXowsBPAzRKjimosjMFvhJrP7s5QHupUnS1S7IU9Bh72LS0rgrcuxDrNMPSFVBhFOjYgsfGWGvNjrORN9wvCXcOZDq8np5B1QZk37y7biQOOSDkiuY23ambBlTZQzISKKQr6KwvKM7Uyu8SEGv/1x0ld8Wg3SxItbndT3PSXk/RFN947HRNDTJWrQQDoXWaArHjVpRxFL5+3YFlyUO/erJiecr6bnaH7IrFwCSZyEkVYIDdJ896fzZpSx50utmY7bXIgkqc0wsWV79DPk+SQr X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jun 2026 20:00:14.3664 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9a483072-89a8-4a47-3513-08ded22b34c5 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[4.158.2.129]; Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: AM4PEPF00027A5E.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB11309 X-Spam-Status: No, score=-11.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: newlib-bounces~patchwork=sourceware.org@sourceware.org Before using the FPU, we must grant access to it. This helps when running the GCC testsuite on a simulator where FPU access is not granted by default. This patch grants full access, we may want to consider granting only unprivileged access later. While updating crt0.S, include arm-acle-compat.h and stop using __ARM_ARCH_7A__. 2026-05-29 Christophe Lyon * libgloss/arm/cpu-init/rdimon-aem-m.S: Enable full FPU access on M-profile. * libgloss/arm/crt0.S: Call _rdimon_hw_init_hook for M profile too. --- libgloss/arm/cpu-init/rdimon-aem-m.S | 29 +++++++++++++++++++++++++++- libgloss/arm/crt0.S | 9 +++------ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/libgloss/arm/cpu-init/rdimon-aem-m.S b/libgloss/arm/cpu-init/rdimon-aem-m.S index 611849077..c495efc2d 100644 --- a/libgloss/arm/cpu-init/rdimon-aem-m.S +++ b/libgloss/arm/cpu-init/rdimon-aem-m.S @@ -28,9 +28,36 @@ We define a hardfault handler, required to prevent the simulator from entering into an infinite loop. This handler is located at address 0xc by default when linking with mprofile-mps2.specs which - uses --section-start=.hardfault_handler_addr=0xc. */ + uses --section-start=.hardfault_handler_addr=0xc. + + Enable the FPU when __ARM_FP is set. */ #if (__ARM_ARCH_PROFILE == 'M') + .syntax unified + .thumb + + @ CPU Initialisation + .globl _rdimon_hw_init_hook + .type _rdimon_hw_init_hook, %function + +_rdimon_hw_init_hook: + /* Enable FPU for M-profile only . */ +#if __ARM_FP + /* Read CPACR */ + ldr r0, =0xE000ED88 + ldr r1, [R0] + /* Enable full access to CP10 and CP11. */ + orr r1, r1, #(0xFF << 20) + str r1, [R0] +#if __ARM_ARCH >= 800 + ldr r0, =0xE002ED88 + str r1, [R0] +#endif + dsb + isb +#endif + bx lr + /* On M-profile, call abort in case of hardfault: this causes the simulator to abort execution instead of going into an infinite loop. */ diff --git a/libgloss/arm/crt0.S b/libgloss/arm/crt0.S index b9e768007..cad002d2b 100644 --- a/libgloss/arm/crt0.S +++ b/libgloss/arm/crt0.S @@ -1,6 +1,7 @@ #include "newlib.h" #include "arm.h" #include "swi.h" +#include "arm-acle-compat.h" /* ANSI concatenation macros. */ #define CONCAT(a, b) CONCAT2(a, b) @@ -250,12 +251,8 @@ FUNC_START _start FN_EH_START - /* __ARM_ARCH_PROFILE is defined from GCC 4.8 onwards, however __ARM_ARCH_7A - has been defined since 4.2 onwards, which is when v7-a support was added - and hence 'A' profile support was added in the compiler. Allow for this - file to be built with older compilers. We only call this for A profile - cores. */ -#if defined (__ARM_ARCH_7A__) || (__ARM_ARCH_PROFILE == 'A') + /* We only call this for A and M profile cores. */ +#if (__ARM_ARCH_PROFILE == 'A') || (__ARM_ARCH_PROFILE == 'M') /* The init hook does not use the stack and is called before the stack has been set up. */ #ifdef ARM_RDI_MONITOR bl _rdimon_hw_init_hook