From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id UwBFB01K4mkg9x4AWB0awg (envelope-from ) for ; Fri, 17 Apr 2026 10:57:17 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=efficios.com header.i=@efficios.com header.a=rsa-sha256 header.s=selector1 header.b=YENuBBUT; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 0350A1E093; Fri, 17 Apr 2026 10:57:17 -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 021DB1E093 for ; Fri, 17 Apr 2026 10:57:15 -0400 (EDT) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 8C57B4AA3971 for ; Fri, 17 Apr 2026 14:57:14 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8C57B4AA3971 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=efficios.com header.i=@efficios.com header.a=rsa-sha256 header.s=selector1 header.b=YENuBBUT Received: from YQZPR01CU011.outbound.protection.outlook.com (mail-canadaeastazlp170100000.outbound.protection.outlook.com [IPv6:2a01:111:f403:c104::]) by sourceware.org (Postfix) with ESMTPS id 861B34C318A4 for ; Fri, 17 Apr 2026 14:53:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 861B34C318A4 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=efficios.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=efficios.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 861B34C318A4 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:c104:: ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1776437615; cv=pass; b=aQSrVgdoomZ0IYWVY3UkjjUBCdoYm+VE4/Iy+Vbs/3OFbNjwo93i+vk8SLC77qfFOg1ctyJLgyWslbKeqoQZFNQblSvul0AWico1mSpMYD+76KgZHeGeWCPvE39TSeDIFkpJxMalknpYMcNDVJWBRZ7e2/qbHruLXWW5gCpYMlE= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1776437615; c=relaxed/simple; bh=MAEV8JE6bP4O6v0dMrZtcM6mVyl+g6TXxZo4dpSuBns=; h=DKIM-Signature:Message-ID:Date:Subject:To:From:MIME-Version; b=g8KeGUSxsDEvWLCMvKdGdmo+pXfHE6jW5lrdlTIhhC8a/RKiGdKz95cpXHcEhpZqNZDxL5Hojpu/BfbkreNDNm/tjY4JBORTRi5YO125ScZnBMho/ULHVdPecgp8zsR00sJhuSDbGM3xAEe9vpuwRzgDbbKMTWvDtt2KcOF08/8= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 861B34C318A4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZPRzt3aXEkvq3tJVu9PEmiGpzXoXupQf/R+2LwM6FBxFGLNxMejyn0yQNTsKMjfAOoMRIDtvgpYiBOetWdOHMVVgpiBJauu7wywv4uCxv4zTCyIi36w3b5peubt7dYxzCsvGai/PNg7X56zYcC3803uNHDiPZkYoERZDnG1C66QAbFbVFRhg2yv6zQD+0OHCbcCRWVuYjVHvCBiAkBdw+XO8kOdFSldkpGb2u6IE7KsRThLCdKdvdHbYHkfC8YBwElGu1jh+ofiACh1uvDd2MkwVVWPFsYvnFA76h/emU4T0Nd0VTWhuEm75zVuOOgdSJkv/SwefOaJBynPuTRUrYg== 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=3kWzuBGJqeUIku2+qEXMSg6zT9Fa/T+RVNX8OVypu9Y=; b=foqlX2mGppuzf9FathE3rnx2Uspid63Ke6QDWjLDz9/E8RXlBJLN7PheAnjYqYmd1a/H6XX4DNHNRgaoiSAFWl4OgGqEVSQxABg2Fjgn1GTDEtITJ8+vdt5Eb/i8tY/kP6HpXw1aiWIH7Es3GwEur894XA2LnZnCKb7b7+GXUTe55/ybsR7uqTIHiFuF5gVXOdH9Yrkh+ZDcP5TDunpMQsBMVDhifdonoCMiFi5rYX2PpsMZrCBM6IJvN4Ia/OwqZZ+11OpRC/DWfq3l9/oQgIbJASDbc1SJmpFQiKEui3kWnHJmtBOtHKZcQTCkwv7uIEsA0mq9aFrwtagjq/rcAg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=efficios.com; dmarc=pass action=none header.from=efficios.com; dkim=pass header.d=efficios.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=efficios.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3kWzuBGJqeUIku2+qEXMSg6zT9Fa/T+RVNX8OVypu9Y=; b=YENuBBUTuWUQH54v02YIqCULp+/KO2rlCz2av+GdT5YJK8Wu5bKtmt5sStJiakmI1+OEz/HuGTOfljNlGj3P5XQOLXm2eWjMd02Vemb4Ri2wFLxwebsgsQ0lnlmQct2kP3iNhNxyzV2p/q85CcxkmxKzQJm4DDTYmfL3EeffMDa5bZXT+AGCdmGC57zMxRdfySRiGnaC1huerGHo3et+K/tJXPUVJVDNq8NP6PWmcG/WuJddGWS+y63qlR8OmswuPx+1OuYYx6xWl645l8GhyK+SyGW/lT3ynP1rRp03nz71YlJoUrp4mZ6im3dLmA2hV5LwJkHA0Y4dKZg+dzFidA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=efficios.com; Received: from YQXPR01MB5418.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:2c::6) by YT3PR01MB8196.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:9d::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9818.25; Fri, 17 Apr 2026 14:53:26 +0000 Received: from YQXPR01MB5418.CANPRD01.PROD.OUTLOOK.COM ([fe80::bbfa:179f:fdc8:b15d]) by YQXPR01MB5418.CANPRD01.PROD.OUTLOOK.COM ([fe80::bbfa:179f:fdc8:b15d%5]) with mapi id 15.20.9818.023; Fri, 17 Apr 2026 14:53:26 +0000 Message-ID: <047e7bef-99a8-4956-96fe-0738c5552240@efficios.com> Date: Fri, 17 Apr 2026 10:53:23 -0400 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 05/11] gdb, gdbserver: split iterate_over_lwps in for_each_lwp and find_lwp To: Andrew Burgess , gdb-patches@sourceware.org Cc: Simon Marchi References: <20260416202408.422441-1-simon.marchi@efficios.com> <20260416202408.422441-6-simon.marchi@efficios.com> <87mrz1esmi.fsf@redhat.com> Content-Language: fr From: Simon Marchi In-Reply-To: <87mrz1esmi.fsf@redhat.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: YQZPR01CA0040.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:86::10) To YQXPR01MB5418.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:2c::6) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: YQXPR01MB5418:EE_|YT3PR01MB8196:EE_ X-MS-Office365-Filtering-Correlation-Id: c14ba2d2-6e8f-480c-1af1-08de9c911471 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|376014|1800799024|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: +H5eTbyosJw0Q96bWfS7bNWZvXL+xPbniomR5jrLMjL27enbteJhWFWQpr4uicgQ+cy3fS0F+xtirnvZdPOX8601t1ytnVPNhtQhhA+cHEYrC2Lf4ZhZRkptK0I0mknb+1mpa3Ug32O6kvH4kp6aiWmcm+g/1VMdo71DWwsxjQG2L7+48DImp32KJh7FWJbPVFiXXVYeg4h3w4OCyV+piHoeEnnI0TrVr7BqNZ1pn4b7xjdKL7l9OE7D0BlM/Jwgr9VB6nTxZLSSQpazrJrdjgl1Y+jgWvHRNMnwTMJ57lQRBDC98YgwHpCQ9NcxH9X/s7kLfZ4o4jd/m523GdiOoOsrQdluA8c1LFqtMG3OXFQWKyOaI5tpJG8miqfD+i6VSts9eT+pHDEd+coRpO4MztxGR4IVvgaVERCHyXce6N4TzLJKDuCKwp1HD/TsKqowcKI9bJSIMseg1jlOR8RJIZKAJZJREiniCQyxZs79P1qNAZCpNtNAwW+fzxebQ385vD50ShmZlJ0lDScQpGBTxdIz056mcamxtK+0CwwO1wvXWF+6roeBb8shCjYzeTNUSHLjZHAqCaFm/lV9c45C0zvHvka4MLj3LpygmUHnZ1eJCBATCSmSc+Lwi/OmGufe7kXLgjaxSUmafHXOG2BKA0gDFLx802waZ06Tzryp6OsIUGcI7FoChJxkCAf8+71TLP1CP0KMHvqt1A9VsAHLiNQvNB3HEL/KQ0jWFLZ9fYo= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:YQXPR01MB5418.CANPRD01.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(56012099003)(18002099003)(22082099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?S2hoalB2VTNDNDREdXNtUHhwRkxaUHA0cnZRSGxQR3hmWEo4a0ZpaDNDR0NV?= =?utf-8?B?c0VIeVBZQmQxUTN4eWxwZGVkN29Pb1RzbW5ERzY0VGlWeXZYS2h2Sk1GZHdn?= =?utf-8?B?OThyeVJxblRzZlowRzBxZDZWek1IZHlSaG11dkpKL2FpVHkyL3dMN2VjTzZj?= =?utf-8?B?Z0ZXOHNvSXZPS1V2TGxSRHJleXh1UUFVM3V1Uytidy9JV1RJYjRMR1p3NnZG?= =?utf-8?B?eG93TGVkM0NqeDZvRW9yeGJuRFM1aFhpRy81UzF1eldpVWdTOFpWeG9uUzhW?= =?utf-8?B?Tkp2ZnRhSG9nTWpXdHNTZ2ozWWZKdHRoejFkd0NyL3pWeC9UT3QrN2RzY0x0?= =?utf-8?B?RFM0SEdYV2tXUEhaM1cwUEdPNVZERk16UUlqV2huR1BQUmJUaW1NYXRRdWI4?= =?utf-8?B?Wkp3K21sUFdlRGcrb3FkNmgwRUQrWDEvOE5UUmtDcmp2WEt4VXIySWZQVnNT?= =?utf-8?B?M1Q4bTJOb0hLMzNIRjhJY3R2TkJ2NHVuSm5sbWFKbDlQV3dza0N3aitKQ0dY?= =?utf-8?B?WWdOTkI4ZW9tQlVkeWdsbEFCS2QvMllSa2cwd21ncU91Ry9jUzA0bnk0c2cv?= =?utf-8?B?VWJHeXIzUkQ3SzBJVmE3cjV1R0xtSStjb2F4enNtbkhzakdpemxFK1h6VGY4?= =?utf-8?B?MjEvRUpSZFBoQjB3Q3dQTC9CcWJudUtxVGZmTUtIS05SWVBxN3Z1ZUJHVUx4?= =?utf-8?B?aUQxM1VlSUZRWmxYSlVKTldIeHJHY25FUzJJcWxzTUVac1VpL2VlOVpzNCth?= =?utf-8?B?YzBsVzlhallPODBCemhFdDVhekNwa3Y5dzJYa2VMbnNjSFZFd01TWTNQczZK?= =?utf-8?B?TFBpaEhEN3dHdTFPVXRpTkVxRk8rVVlRajJyNnNFZzBlczhleHg2ektWTTJ1?= =?utf-8?B?TlUwQ0dkcUREL3Bzcko2cWJ5NlpFR2R2RExEYzhtTjhrbzhCSXJRZjBwK0VD?= =?utf-8?B?Y3Yxb0tzd3dhbDd6Rkp5aFhYdGNxS2daRzNRemo0TnNsNHdmOGdiVmRPR2l1?= =?utf-8?B?SW9QOTJBdXRwb3AvaHQwWWdTOWFkN3lvWjZ2OENyYTJPNk1FWnRFVllhdTRL?= =?utf-8?B?bGJYaDZWTEhNVlhRakhLRllYditjc0VYYzZOV0RTU0lObXEvTkJGLzZ4YUVU?= =?utf-8?B?Q3BPZ0w5L2hkWU1UTzFjcWVjVzZWS0o1bHFMbk1UaGRwUGdTc2NkUERKVDBS?= =?utf-8?B?azRMVHQ2K0JzMThWU20wZWF4ZXQ4WjN3M2swSkQ2UkVkSStDc3hXUkxFNzlw?= =?utf-8?B?T1pwTDBFdDVYNm8yZWQ4U2k1WVZ3KzJqZjhnVWszWCtGSGVkU2ZXdiszck9U?= =?utf-8?B?Z0VHOENETkwxcjhGTWlsd21WQ3NjTnNLM3ppTWN1R3NnZm1lNmo0R0J5YStD?= =?utf-8?B?a216dFFEdmZibzM0dldBQUdkZ2sxYVljWFhaTmJwZ0NTczZObEhUNGJrREo3?= =?utf-8?B?TmJlZEYyN2s2ZmNiVnV5eXhvQVo3QVFFWVNyLzcrZG9OZVFVaUI3b2I5UmRt?= =?utf-8?B?MXVVKzhwVXhKa0xhOFpWMloveGdnbU9sdWMvd0N1eE95SExSbVVDU3h4MWlR?= =?utf-8?B?V2ZpcXJkanoxSUdZbDNsS0ZYR2tldzUweWdVcTBTN1ZWZlduNHhiUFEzN1A3?= =?utf-8?B?WjZFQ2M2bE45WGpNUmFzV0hSVVZYRFc2WnVZZWlNMGJyZHJ5NDZSRjFMSjVl?= =?utf-8?B?d0JlbXBjYTBPMVNiY3lMeUk5WERZNWxxWlZQK2dSaXBKUWxyWkFnZzZLUVBR?= =?utf-8?B?MkwxU2oyTUVTaEx3UGszR1lEUENMYWVCYWY4cnBMLzA4QmV4VlhKcEVMQnJG?= =?utf-8?B?eitRUVo5aUlGV0FHUEZkUlFXYlpKTkZ5alJ1V20zTmJFM21ZMlczbWp2RGha?= =?utf-8?B?NktYTFphMlBPN2xlT3hEblRyTm5mcXdKOE1UM2pUaDVSamVKUGkvWEgwZzJO?= =?utf-8?B?YVVWRFJvWmw1T2k1SUQ5cEJMREI0cHJUVlhWY0pNYzlQaGlodW1nUFZtdHpL?= =?utf-8?B?d2VQV1Y1MTR1TnNSbHIxM2tkMlM1MWtPMmVPRG5UYnVCcm9DTGxJYXc5Z2tU?= =?utf-8?B?UHZuR085WnNxeGo1Mk5RbldNK1g3RDlVbkZKelpDdVd6Lzg5N1lvUnpMK2JW?= =?utf-8?B?OExkVVdBU3RmbXlweUFEVlJGeTBoUFZZamowdDhLTUg1Nyt1ZzJ6WUtTWHZq?= =?utf-8?B?bEpBeHF3WHJiNDM1Y2hBVlpGMmpCMDJudVJuVGJKRlBFeHdtYnUzMG1mNXhF?= =?utf-8?B?YVY3REN5bER1VnBWbDN5c1hqUE1hZEpPL1VVbHlSVzUrSG1VZEN1bkN3MkUw?= =?utf-8?B?SDhpeGJrc2dxMUdQVnlsWVB4QVNoUFUwWEdRSW1xUG8rYmRna0R1QT09?= X-OriginatorOrg: efficios.com X-MS-Exchange-CrossTenant-Network-Message-Id: c14ba2d2-6e8f-480c-1af1-08de9c911471 X-MS-Exchange-CrossTenant-AuthSource: YQXPR01MB5418.CANPRD01.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Apr 2026 14:53:26.1965 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4f278736-4ab6-415c-957e-1f55336bd31e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: fg9qVOrCACHxozQMK16FhAELSgeKIJMk+oQ7Mq2rdpycEPTUUXmTJYd67aKDh71xXHk5mpCiF6LQq+3sfPmzQA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: YT3PR01MB8196 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 On 4/17/26 7:25 AM, Andrew Burgess wrote: > Simon Marchi writes: > >> From: Simon Marchi > > >> Subject: Re: [PATCH 05/11] gdb, gdbserver: split iterate_over_lwps in for_each_lwp and find_lwp > > The subject line should say 'into' maybe? Ok, fixed that in all other commits too. >> >> Even though it works, I have always been mildly annoyed by >> iterate_over_lwps being used for both iterating over all lwps and >> finding one lwp matching a criterion. I think it would be clearer to >> have two functions for the two use cases. Then it would be 100% clear >> at the call site what the intention is. It would be clear that a >> callback returning bool is meant to be a predicate for the find >> function, while a callback returning void is meant to be a callback for >> the "for each" function. >> >> Therefore, split iterate_over_lwps in two: >> >> - find_lwp to find the first lwp matching a boolean predicate (and the >> given ptid filter) >> - for_each_lwp to apply a function on all lwps (optionally filtering by >> ptid or pid) >> >> The callbacks given to for_each_lwp can now return void. >> >> Introduce some overloads for for_each_lwp, for the various common use >> cases: >> >> - filtering by ptid >> - filtering by pid >> - no ptid/pid filter >> >> find_lwp and two overloads of for_each_lwp are actually only used in >> gdb/linux-nat.c, so make them local to that file. Only the pid variant >> of for_each_lwp is used in shared code. >> >> The pattern used in this patch serves as the basis for subsequent >> patches that split other "iterate over" functions the same way. >> >> Change-Id: I49d3af0916622300cc81e3c32d22e1aff13cf38f >> --- >> gdb/arm-linux-nat.c | 38 ++-- >> gdb/linux-nat.c | 276 +++++++++++++++-------------- >> gdb/nat/aarch64-linux-hw-point.c | 17 +- >> gdb/nat/linux-nat.h | 16 +- >> gdb/nat/loongarch-linux-hw-point.c | 18 +- >> gdb/nat/x86-linux-dregs.c | 15 +- >> gdb/ppc-linux-nat.c | 22 +-- >> gdb/s390-linux-nat.c | 22 +-- >> gdbserver/linux-low.cc | 20 +-- >> 9 files changed, 208 insertions(+), 236 deletions(-) >> > >> @@ -2940,7 +2953,7 @@ select_event_lwp (ptid_t filter, struct lwp_info **orig_lp, int *status) >> >> /* Return non-zero if LP has been resumed. */ > > This comment needs updating now a bool is returned. Fixed. >> -static int >> +static bool >> resumed_callback (struct lwp_info *lp) >> { >> return lp->resumed; > >> diff --git a/gdb/nat/linux-nat.h b/gdb/nat/linux-nat.h >> index 42c0467191fe..4414749b93de 100644 >> --- a/gdb/nat/linux-nat.h >> +++ b/gdb/nat/linux-nat.h >> @@ -46,17 +46,15 @@ extern tribool have_ptrace_getregset; >> >> extern ptid_t current_lwp_ptid (void); >> >> -/* Function type for the CALLBACK argument of iterate_over_lwps. */ >> -using iterate_over_lwps_ftype = gdb::function_view; >> +/* Function type for the CALLBACK argument of for_each_lwp. */ >> >> -/* Iterate over all LWPs. Calls CALLBACK with its second argument set >> - to DATA for every LWP in the list. If CALLBACK returns nonzero for >> - a particular LWP, return a pointer to the structure describing that >> - LWP immediately. Otherwise return NULL. This function must be >> - provided by the client. */ >> +using for_each_lwp_ftype = gdb::function_view; >> >> -extern lwp_info *iterate_over_lwps (ptid_t filter, >> - iterate_over_lwps_ftype callback); >> +/* Iterate over all LWPs, calling CALLBACK for every LWP. >> + >> + Only consider the LWPs with that pid. */ > > Maybe: "Only consider the LWPs that match PID." would be better? Fixed. >> + >> +extern void for_each_lwp (int pid, for_each_lwp_ftype callback); >> >> /* Return the ptid of LWP. */ >> > > Approved-By: Andrew Burgess Thanks, Simon