From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id OLjVFhOXsmocKjMAWB0awg (envelope-from ) for ; Tue, 22 Sep 2026 10:56:19 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=mNCtJT/c; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=mNCtJT/c; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 4A7E91E01F; Tue, 22 Sep 2026 10:56:19 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 41A2D1E01F for ; Tue, 22 Sep 2026 10:56:17 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 40A124BB24CE for ; Tue, 22 Sep 2026 14:56:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 40A124BB24CE 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=mNCtJT/c; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=mNCtJT/c Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010007.outbound.protection.outlook.com [52.101.69.7]) by sourceware.org (Postfix) with ESMTPS id 3A6FA4BB1C31 for ; Tue, 22 Sep 2026 14:55:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3A6FA4BB1C31 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 3A6FA4BB1C31 Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=52.101.69.7 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1790088932; cv=pass; b=nHy/1KVvy8og4dUdJnz+7GIlusYfY3xFyULCEGONu0hLhj/cP90FZXofCmC0ax3G3tN27BgAJ9q7KLuQG1EmrtAce8E/sDTMHLf8SEVn2p28dGDOxBoaMo2PWmAuGW7lov0BpYvmriLM2ycXPP7htPl62/92wU/LV+AEC4Rygsk= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1790088932; c=relaxed/simple; bh=nOC5qk2vUtKASnmfhxPOO+gafGWw36ftJYbfbwLPN/E=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=iIx9riBWnddrO386r2pCXSl1Q4IzwtA2tWEq0o3iYBvccLNq6Yl65te/JeZbtS+6A/dOz7lKNEFsyya2OsdaYIv0O07eOgyKJRatsESIHkrUMOn53aWVjrDlIneCJhJ0HxGnpVa16T8auTAs2JmWap2izy2+LWT2acizVyRdOqY= 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=mNCtJT/c; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=mNCtJT/c DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3A6FA4BB1C31 ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=eah7dJU3VW74ln45zQf+hlekJ55QH9tdBZ86OlKTcCqa3EmNm/9DUT4kWpWGDSsdejJEBggfy6w0xAM3vyCFro4BoXi3SxU5S3PofLHPjO9XpBURxdwms956vB1U0YJzy5KlAIlJNVtsNEk6sjiEOn4I0KnEeSX/TnkqhtD6mrygKbpdxz+0ZVLEAEGzFXo81Q87u7NotgusNcPBKNeHoQCr4k0iP8OLp+CNYMa60E8zvrATl7dNzOPMfZPzC+ydLobAJyAFXkchBU7rkrEf+a3DfIoB+QX07Qonp52NFTg2SWwrZdWZGWxPaec/gXu3eboNvzAh/Frb4YTl1JFRSw== 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=LnFbzIKFmqhFmDOmxDS4BHFSaB7McMPMA2lvQ+ta5GM=; b=fz9TJnawh2tp0nlkxAW5ezchjCnhA4q3biHaIYTLfHhlWQd9FbdZAefG37sVqGqLQCNABN2pzIoLd51PgU6seZuvHpXvUcCE49Poc2qUyvNFQLxulxxodxLDIKuyc8EiPk6yC8oORl15wJWbp+mO4unqehLACHS2j8JXV1aJmxsNjcSfrJ+Fp3+eS8jpGOp5xsVFEbs4AgIq5wX3vMJIacAUNGnlQNrd/A/7gLtfznKZFDWO573rhzQVC/1VJf1SQ006IWTWE+jdPf56gsYYvjQj6EJQBf4LpdpxV88XTw8jeTtd6j3lVjca0zEYd9rd/gSe8fVfNETG/f/Byr4O4w== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=redhat.com 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=LnFbzIKFmqhFmDOmxDS4BHFSaB7McMPMA2lvQ+ta5GM=; b=mNCtJT/cyK4VDmRT7mvr1lIMPAdv/Sor29sGKL3T2FpGHh70TMPyjMuzpCxzzhNFYaWJiqmZEnVowdovLPIiFhFXMP7nMTVA4hs7TQsW6zThLAokLm7MzrabzfEZbDBLowRC3Rt7QsSBfhi+amOLV4aF0/3zaG/CY3GIFZZJyJI= Received: from PA7P264CA0446.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:398::29) by PAVPR08MB9064.eurprd08.prod.outlook.com (2603:10a6:102:2ff::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.9; Tue, 22 Sep 2026 14:55:18 +0000 Received: from MI3PEPF00008499.eurprd03.prod.outlook.com (2603:10a6:102:398:cafe::81) by PA7P264CA0446.outlook.office365.com (2603:10a6:102:398::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.451.13 via Frontend Transport; Tue, 22 Sep 2026 14:55:16 +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 MI3PEPF00008499.mail.protection.outlook.com (10.167.240.184) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.451.8 via Frontend Transport; Tue, 22 Sep 2026 14:55:15 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Gcm9xhSVRAAwP5AoZ0mjTFFYCngu9dIJX2m4A5e818OnQwaEs5C/AhVTbl2dvyL0mhmrD9dEDLQL/O+2RxEzmbB64g3mQ/uJOawvfb9lPbe1CpmNLBfZHx7iu5/5p1G3RM/+Js396LX/stzIza9Jy3+4sQOfmkDQTgmm+YTwCvXNiSaLWl07kuezcgnUJ+zMJyznG5NgkgyrnMYF/VAFR2gcZWojv55ErxRH2zaRcRz62xaIsc+dX/XXqIkz13ydS+CKKzCzJXHfxp+psQi7ZSSSuBb/pi4Paz+5uZkXwanUcWCfH3nUWcPcWZm2CilMxzP6aYNz1QM0fGrvruKR5A== 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=LnFbzIKFmqhFmDOmxDS4BHFSaB7McMPMA2lvQ+ta5GM=; b=Ypw/4XpEIZNREbl0rKsd/o9yq8b/k5zPCt27ym6SPF9+aUxHxbYARZW+24qr4uApN+BZq6vEZ/h8dl0z25QcWoeIQH2aY/PowytgghlWFYJvuJSpo3kO351rqMr/TwE6o4dvVxHIlIMY9fZGZLSsUIOcL4LAJAbRVzz55aYupfM9G2g+NamtHXOoASBD85lglQQLSshhVqEiAddlcPemPmqPHGiWWaVGUwmXzLvM1b155UvM1KN8mA5vA3hRHixe7Ke4N3xGCKUqHZK/aeMy5Sx1XVWe7bpwqWp0wKq6QmtrjAAXiCGPqPXUikIH/CWtOBzZBqHA+ETNiIQ0NzuEZw== 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=LnFbzIKFmqhFmDOmxDS4BHFSaB7McMPMA2lvQ+ta5GM=; b=mNCtJT/cyK4VDmRT7mvr1lIMPAdv/Sor29sGKL3T2FpGHh70TMPyjMuzpCxzzhNFYaWJiqmZEnVowdovLPIiFhFXMP7nMTVA4hs7TQsW6zThLAokLm7MzrabzfEZbDBLowRC3Rt7QsSBfhi+amOLV4aF0/3zaG/CY3GIFZZJyJI= Received: from PAZP264CA0205.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:237::15) by DB9PR08MB8291.eurprd08.prod.outlook.com (2603:10a6:10:3dd::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.13; Tue, 22 Sep 2026 13:51:50 +0000 Received: from MA3PEPF00000405.eurprd04.prod.outlook.com (2603:10a6:102:237:cafe::76) by PAZP264CA0205.outlook.office365.com (2603:10a6:102:237::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.428.16 via Frontend Transport; Tue, 22 Sep 2026 13:51:50 +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 MA3PEPF00000405.mail.protection.outlook.com (10.167.241.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.8 via Frontend Transport; Tue, 22 Sep 2026 13:51:50 +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; Tue, 22 Sep 2026 13:51:49 +0000 Received: from PF4S4363.arm.com (10.0.144.159) by mail.arm.com (10.240.25.138) with Microsoft SMTP Server id 15.2.2562.29 via Frontend Transport; Tue, 22 Sep 2026 13:51:49 +0000 From: Matthieu Longo To: CC: Andrew Burgess , Tom Tromey , Matthieu Longo Subject: [PATCH v3 5/8] gdb/linux: refactor /proc mapping parsing to use array_view Date: Tue, 22 Sep 2026 14:50:47 +0100 Message-ID: <20260922135050.236941-6-matthieu.longo@arm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260922135050.236941-1-matthieu.longo@arm.com> References: <20260922135050.236941-1-matthieu.longo@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: MA3PEPF00000405:EE_|DB9PR08MB8291:EE_|MI3PEPF00008499:EE_|PAVPR08MB9064:EE_ X-MS-Office365-Filtering-Correlation-Id: fa35a998-9781-4d76-1ee2-08df18b98336 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|376014|1800799024|36860700016|82310400026|23010399003|6133799003|56012099006|11063799006|18002099003|22082099003|10067099003; X-Microsoft-Antispam-Message-Info-Original: UvVdq2DsaEHcSQ8X/dlMMnoox8B+zvCzVaDSKhYDAnh6jT08XLGBx47eCTplTwqyhqo9mmrw+UvFrvwKF8w87JJli8yyZPnDz7OTMnRfTEPSKWgK73JraYkMcDli92nRQDoR+ZvTaGYIcXE02UxCbCftL2H8CsHeMmpvucFkYwWDwlWZSCEhwTYPNlMnhqLegwKxUO/ul5DAPp+OOxf2ogA76jowHYHlqUIrEsTRR1Dk1nH0fHbZPKVG27MgiLGo50N8ev/LTMV8weO2YqmMeUsQn3oiEOGGGiJJOx0sLsREkVsgjW85CMP4znKpeRHiFvK24Flm+OpDu0MH92/g5GjSf9BYpm2bzmVdaP1FWge5QluPNP9Msxh15nDfUDl0Eht/at4J8cwMryMbMQ+L+Rtmi4YWpW6Xzscg/0UO0PqygbRsLVIlCBN+MEFHS8GyouixhYKkn6K9/JzJ2O6ky8am1yQovXy6l6SPtN6pqfa/2FJpAU1zvd2X+CZQACIepqe4LYrlPjDpKmxyZx8/D0JRfQ0SLDxqkB+jLF363x02EwRQnj0cHnlP3JB77yC4qC2g5sbCOa4RZET/pWV1DNtEgKPPm8hclnQIuE3UrL05bSK/bWQ2t9KQ9iCODZE0ndGvJyAWWtUgoxySrOqeOfnnD3Hr22UwuFCXoDWUguN/cPFuAvlxR3XYJ5RATn9Slp1argMRjwcDRQ19w8lh2A== 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)(376014)(1800799024)(36860700016)(82310400026)(23010399003)(6133799003)(56012099006)(11063799006)(18002099003)(22082099003)(10067099003); DIR:OUT; SFP:1101; X-Exchange-RoutingPolicyChecked: t4VArVdswa2cXQydbyV0gBoU+/dvovsShAx5XTAWsyBEXSCdx/HxkSHGUPaG3X2rSxtCG4r+GfZu/Qx1YdhfX3J9CQ7mMVFCdrYthEqy/jiSk8Klwvon67MJMKdgsW3+i1XxcTSPIAe68Pb53KTvFNx1Y7mhGRWFzlJppR5TPAjh/LzsWu65KTbQfW1lYlQamgYKmgRDF3gfROEaMA/uKPBACtzdgTgJxktVQQdWKeih/ktjLcWCTWpV2efs0wFzBIZNXLRrbXY82QqpVhS/rl7cpm+F0SuXYYGdgMIwTe4x376UUVqF79/PQDLH2+HJ1gukebB7Ogv8s+of+5VmBg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB8291 X-MS-Exchange-Transport-CrossTenantHeadersStripped: MI3PEPF00008499.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: ebe662fd-8564-4c02-b18d-08df18b0a6e2 X-Microsoft-Antispam: BCL:0; ARA:13230040|14060799003|36860700016|82310400026|23010399003|35042699022|1800799024|376014|10067099003|6133799003|18002099003|22082099003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: NN1OWQEdS9Ajoj0QX1l/dQINi+ECVOLXii55RG2xAuwm2yzlhZAcZXc5M4QPKS3QFq/C/3YANYMUId6GbpQGMtPkipQCrIgBIymYqGy5QHB0AqL/a9sbOr5D+9NnZPAXikTkt9QGpyCBcUUUdWWlB3fgK7Z8cfLCIZtq3WfL4zMd6EYGEqxQqT0QRauuG+7bMibEvMRsN4eI2ITd6Lyd1wiB2W7c7UMi6mSWqcMSBECv4DWXyMeLCMxMFGt9F232G/qAjuYLzA16JnqvIewIXha0y+x5m4ZUguS4+XVkt4zjfU6XZzwLHNBjkpakcx0hTY5AUXFEX4KTVtUfQWeLKGmS0Ucd/qS/HFybNhC773VQ/TWtNOPXN9BTV2WQb+wMVZJfSQX8YDFhpxrnKget5IBCROmZpTIn7tv259d6TEg+jDKhzkiKMJ0RTDiUKrw76HnAUPWOnxCFgyxi0UYfvG6o+ZJq+SA2QEJBX08WtS1P6uY/P7Vm8X8ce4h4LZoJcokEY3zBeVQxM8BTs8Q/J2M7feC9NtKhmqg4LOr79YHlvMgbT5CeZ78GGhO5eUZ4VlwSKiiUk2kUk346K2MrZsUp/x20DsDC04dA/F9OQPi68Jekn/J4FtqP9+/jolZZTv76brGYIXPA388o4B/6SO3WWn+INuVR912QtWRnKTkpy7v2iaVzIkFO+/wq8gN9NDWKzzBxcQTPGvSu7n8tnw== 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)(14060799003)(36860700016)(82310400026)(23010399003)(35042699022)(1800799024)(376014)(10067099003)(6133799003)(18002099003)(22082099003)(56012099006)(11063799006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: OyzcJRABeilBA0H5WdT7mrKipZQ3Zl+uvgSWBC+T24JTtI2q8USQN8jC68xkrEwwVPRGReyVMWgMpgW8jLyGLyz5OewuJhPx97i9io3mTUuQl86GMOO93vtcciGEw9dipWIagvQDchgp7DRcR0HoFNO4G8j/upZXPpR+94ofi0GTBKtpfXCVEZju84RMkUorAmyss16VI5jGtc9mSQuC3ZPRygyDWKDj1sSowi3KpbQ4cllh1/Gh+SvSFldp/vTZxmpoug9lpKubYKNkwfMtWFdFBRz6dRuFP5/EXlWj4Hrfm0pMTKO/S0fKQ3ubeC7jZP7NkDdWSQiqzZ08q4s2NPbqvdsUQHVrHEYKkTC6kvpfoJiXr3rjd7e0DXCqyJX0Uq0tGfhas988M7ZOpbEBS7A2JjIqLABXr2hJ08z4iCNwiSkBj6C/QfbVrXieIliM X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2026 14:55:15.7282 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fa35a998-9781-4d76-1ee2-08df18b98336 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: MI3PEPF00008499.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB9064 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org Refactor read_mapping and smaps parsing to operate on gdb::array_view instead of relying on NUL-terminated strings and strtok_r to split mapping headers. Track the amount of data returned by target_fileio_read_stralloc and use extract_next_field to iterate over mapping lines. Update read_mapping to parse fields using bounded iterators and diagnose malformed addresses, separators, offsets, and inode values. Adjust the callers of parse_smaps_data accordingly. --- gdb/linux-tdep.c | 167 +++++++++++++++++++++++++++++------------------ 1 file changed, 103 insertions(+), 64 deletions(-) diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c index bd4c1d5540f..772b561eb96 100644 --- a/gdb/linux-tdep.c +++ b/gdb/linux-tdep.c @@ -510,35 +510,60 @@ struct mapping /* Service function for corefiles and info proc. */ static mapping -read_mapping (const char *line) +read_mapping (gdb::array_view line) { struct mapping mapping; - const char *p = line; - mapping.addr = strtoulst (p, &p, 16); - if (*p == '-') - p++; - mapping.endaddr = strtoulst (p, &p, 16); + decltype(line)::const_iterator it = line.begin (); + decltype(line)::const_iterator it_next; - p = skip_spaces (p); - const char *permissions_start = p; - while (*p && !c_isspace (*p)) - p++; - mapping.permissions = std::string (permissions_start, - (size_t) (p - permissions_start)); + mapping.addr = strtoulst (it, &it_next, 16); + if (it == it_next) + error (_("failed to parse start address")); + else + it = it_next; - mapping.offset = strtoulst (p, &p, 16); + if (*it++ != '-') + error (_("expected separator '-'")); - p = skip_spaces (p); - const char *device_start = p; - while (*p && !c_isspace (*p)) - p++; - mapping.device = {device_start, (size_t) (p - device_start)}; + mapping.endaddr = strtoulst (it, &it_next, 16); + if (it == it_next) + error (_("failed to parse end address")); + else + it = it_next; - mapping.inode = strtoulst (p, &p, 10); + /* Skip spaces. */ + it = std::find_if_not (it, line.cend (), c_isspace); - p = skip_spaces (p); - mapping.filename = p; + it_next = std::find_if (it, line.cend (), c_isspace); + mapping.permissions = std::string (it, it_next); + it = it_next; + + mapping.offset = strtoulst (it, &it_next, 16); + if (it == it_next) + error (_("failed to parse offset")); + else + it = it_next; + + /* Skip spaces. */ + it = std::find_if_not (it, line.cend (), c_isspace); + + it_next = std::find_if (it, line.cend (), c_isspace); + mapping.device = std::string (it, it_next); + it = it_next; + + mapping.inode = strtoulst (it, &it_next, 10); + if (it == it_next) + error (_("failed to parse inode")); + else + it = it_next; + + /* Skip spaces. */ + it = std::find_if_not (it, line.cend (), c_isspace); + + mapping.filename = it; + /* Ensure that the line ends with '0'. */ + *line.end () = '\0'; return mapping; } @@ -985,8 +1010,9 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args, if (mappings_f) { xsnprintf (filename, sizeof filename, "/proc/%ld/maps", ptid.lwp ()); + LONGEST len = 0; gdb::unique_xmalloc_ptr map - = target_fileio_read_stralloc (NULL, filename); + = target_fileio_read_stralloc (NULL, filename, &len); if (map != NULL) { gdb_printf (_("Mapped address spaces:\n\n")); @@ -1001,12 +1027,13 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args, current_uiout->table_header (0, ui_left, "objfile", "File"); current_uiout->table_body (); - char *saveptr; - for (const char *line = strtok_r (map.get (), "\n", &saveptr); - line != nullptr; - line = strtok_r (nullptr, "\n", &saveptr)) + gdb::array_view content (map.get (), len); + for (auto it = content.begin (); it != content.end ();) { - struct mapping m = read_mapping (line); + auto [line, next_line_begin] + = extract_next_field (content, it, '\n'); + it = next_line_begin; + mapping m = read_mapping (line); ui_out_emit_tuple tuple_emitter (current_uiout); current_uiout->field_core_addr ("start", gdbarch, m.addr); @@ -1559,20 +1586,22 @@ parse_smaps_key_value (const char *keyword, const char *line, into the SMAPS vector. */ static std::vector -parse_smaps_data (const char *data, +parse_smaps_data (gdb::array_view data, const std::string &maps_filename) { - char *line, *t; - - gdb_assert (data != nullptr); - - line = strtok_r ((char *) data, "\n", &t); - std::vector smaps; - while (line != NULL) + for (auto it = data.begin (); it != data.end ();) { + auto [region_header_line, next_line_begin] + = extract_next_field (data, it, '\n'); + it = next_line_begin; + + /* Parse a region's header. */ + mapping m = read_mapping (region_header_line); + struct smaps_vmflags v; + memset (&v, 0, sizeof (v)); int read, write, exec, priv; int has_anonymous = 0; int mapping_anon_p; @@ -1580,8 +1609,6 @@ parse_smaps_data (const char *data, ULONGEST rss = -1; ULONGEST swap = -1; - memset (&v, 0, sizeof (v)); - struct mapping m = read_mapping (line); mapping_anon_p = mapping_is_anonymous_p (m.filename); /* If the mapping is not anonymous, then we can consider it to be file-backed. These two states (anonymous or @@ -1614,7 +1641,8 @@ parse_smaps_data (const char *data, /* Try to detect if region should be dumped by parsing smaps counters. */ - for (line = strtok_r (NULL, "\n", &t); + char *line, *t; + for (line = strtok_r (it, "\n", &t); line != NULL && line[0] >= 'A' && line[0] <= 'Z'; line = strtok_r (NULL, "\n", &t)) { @@ -1679,26 +1707,31 @@ parse_smaps_data (const char *data, } } } + /* Save the smaps entry to the vector. */ - smaps_data map; - - map.start_address = m.addr; - map.end_address = m.endaddr; - map.filename = m.filename; - map.vmflags = v; - map.read = read? true : false; - map.write = write? true : false; - map.exec = exec? true : false; - map.priv = priv? true : false; - map.has_anonymous = has_anonymous; - map.mapping_anon_p = mapping_anon_p? true : false; - map.mapping_file_p = mapping_file_p? true : false; - map.offset = m.offset; - map.inode = m.inode; - map.rss = rss; - map.swap = swap; - - smaps.emplace_back (map); + smaps_data map; + + map.start_address = m.addr; + map.end_address = m.endaddr; + map.filename = m.filename; + map.vmflags = v; + map.read = read? true : false; + map.write = write? true : false; + map.exec = exec? true : false; + map.priv = priv? true : false; + map.has_anonymous = has_anonymous; + map.mapping_anon_p = mapping_anon_p? true : false; + map.mapping_file_p = mapping_file_p? true : false; + map.offset = m.offset; + map.inode = m.inode; + map.rss = rss; + map.swap = swap; + + smaps.emplace_back (map); + + if (line == nullptr) + break; + it = line; } return smaps; @@ -1716,15 +1749,17 @@ linux_process_address_in_memtag_page (CORE_ADDR address) ptid_t ptid = get_ptid_for_slash_proc (); std::string smaps_file = string_printf ("/proc/%ld/smaps", ptid.lwp ()); + LONGEST len = 0; gdb::unique_xmalloc_ptr data - = target_fileio_read_stralloc (NULL, smaps_file.c_str ()); + = target_fileio_read_stralloc (NULL, smaps_file.c_str (), &len); if (data == nullptr) return false; /* Parse the contents of smaps into a vector. */ + gdb::array_view content (data.get (), len); std::vector smaps - = parse_smaps_data (data.get (), smaps_file); + = parse_smaps_data (content, smaps_file); for (const smaps_data &map : smaps) { @@ -1805,22 +1840,24 @@ linux_find_memory_regions_full (struct gdbarch *gdbarch, std::string maps_filename = string_printf ("/proc/%ld/smaps", ptid.lwp ()); + LONGEST len = 0; gdb::unique_xmalloc_ptr data - = target_fileio_read_stralloc (NULL, maps_filename.c_str ()); + = target_fileio_read_stralloc (NULL, maps_filename.c_str (), &len); if (data == NULL) { /* Older Linux kernels did not support /proc/PID/smaps. */ maps_filename = string_printf ("/proc/%ld/maps", ptid.lwp ()); - data = target_fileio_read_stralloc (NULL, maps_filename.c_str ()); + data = target_fileio_read_stralloc (NULL, maps_filename.c_str (), &len); if (data == nullptr) return false; } /* Parse the contents of smaps into a vector. */ + gdb::array_view content (data.get (), len); std::vector smaps - = parse_smaps_data (data.get (), maps_filename); + = parse_smaps_data (content, maps_filename); for (const smaps_data &map : smaps) { @@ -3263,14 +3300,16 @@ linux_address_in_shadow_stack_mem_range ptid_t ptid = get_ptid_for_slash_proc (); std::string smaps_file = string_printf ("/proc/%ld/smaps", ptid.lwp ()); + LONGEST len = 0; gdb::unique_xmalloc_ptr data - = target_fileio_read_stralloc (nullptr, smaps_file.c_str ()); + = target_fileio_read_stralloc (nullptr, smaps_file.c_str (), &len); if (data == nullptr) return false; + gdb::array_view content (data.get (), len); const std::vector smaps - = parse_smaps_data (data.get (), smaps_file); + = parse_smaps_data (content, smaps_file); auto find_addr_mem_range = [&addr] (const smaps_data &map) { -- 2.55.0