From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id vZWtGg6c12pYLDsAWB0awg (envelope-from ) for ; Tue, 20 Oct 2026 12:51:26 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=ScaNmeSp; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 5081F1E050; Tue, 20 Oct 2026 12:51:26 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HTML_MESSAGE, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [IPv6:2620:52:6:3111::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 C5BCF1E04D for ; Tue, 20 Oct 2026 12:51:23 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 897224BA9015 for ; Tue, 20 Oct 2026 16:51:21 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 897224BA9015 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=ScaNmeSp Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.11]) by sourceware.org (Postfix) with ESMTPS id 7E1444BA23DB for ; Tue, 20 Oct 2026 16:50:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7E1444BA23DB Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 7E1444BA23DB Authentication-Results: sourceware.org; arc=fail smtp.remote-ip=192.198.163.11 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1792515044; cv=fail; b=XOhLTRPoJ/8lvZ3Cxq5F6+DZzNQnvwypHpp2e9Co7eFO+WPqxyzp6r0WdqYPH9s2Ohdq97NBrgnuQvCYX1W3V4NZ1voMzcdHfP4wkWyeEeeTgtqz6rR2uohkhKXymlg4JjGTbGSWAgJ0OHIWP4zMsA10dzk8Onef5aSKUe9Mojw= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1792515044; c=relaxed/simple; bh=3ZH6QG7pduC/9sevFwLlxZJvgPJCfcpQc6EgzOq6FNU=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=pvjuI2E0YwJY7YmlMN+98kxXx7bSJ2QVX7nXppnfixYdrWYbS+vRf11Jpz0JdIXHPA5knHncZn6Thz2yPOliR3XsMKJyOoF79eTCF5O2iWlQMY90ALQxVzsHqLrlGu6v8xG52YK4GyihOocu30U1qTo285+jtYKcb0FYfeJjiKw= ARC-Authentication-Results: i=2; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=ScaNmeSp DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7E1444BA23DB DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1792515044; x=1824051044; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=3ZH6QG7pduC/9sevFwLlxZJvgPJCfcpQc6EgzOq6FNU=; b=ScaNmeSpZte0Egl5zxKoXqIo6GOCKE4OBXtZZulGHeQ8WpF3eQoGtNGm KeU7hypYxORSe4GvusOIhkzYy8cuHqz4RF39zyqgG4eg3ZUfjBArgHqkq riCQPPPelWeKG9UKGo031x4cQMKLd+1x9hLmeBxEeZCTM3LOZMMCzqLWd RV4/7NLR3OnLh34IONdWVV/l+DQ/ewMKeay1+b/G+UypcWrX2eG5DCSJc wPcxJNiCeIyycN7XWBwauPWXYMz+7XW+hfuEg7846zfA+eOW4tVGxwNIe zXkrCKn25X0AfPmET2ZDTQcRUt1I09uLOAGNvbfOXSe/dNxhhjbY+o71Z w==; X-CSE-ConnectionGUID: aZ7yxh3bRV+hghfrTWoKow== X-CSE-MsgGUID: FEb2kbrRRmisnbydBhGPdQ== X-IronPort-AV: E=McAfee;i="6800,10657,11941"; a="1125752" X-IronPort-AV: E=Sophos;i="6.27,168,1787036400"; d="scan'208,217";a="1125752" Received: from fmviesa011.fm.intel.com ([10.60.135.151]) by fmvoesa105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Oct 2026 09:50:42 -0700 X-CSE-ConnectionGUID: Z1tgUjiFTMWMd41rgoO8dQ== X-CSE-MsgGUID: LiVW+4mlTNG3g9J+skWDJg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.27,168,1787036400"; d="scan'208,217";a="4681749" Received: from orsmsx901.amr.corp.intel.com ([10.22.229.23]) by fmviesa011.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Oct 2026 09:50:42 -0700 Received: from ORSMSX901.amr.corp.intel.com (10.22.229.23) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.49; Tue, 20 Oct 2026 09:50:26 -0700 Received: from ORSEDG901.ED.cps.intel.com (10.7.248.11) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.49 via Frontend Transport; Tue, 20 Oct 2026 09:50:26 -0700 Received: from DM5PR21CU001.outbound.protection.outlook.com (52.101.62.33) by edgegateway.intel.com (134.134.137.111) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.49; Tue, 20 Oct 2026 09:50:25 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vBpzVq7NuzSLkzmXr6jhzBYUXa9Az2mUIunr+OcaNkh1u+WnO9oR6hbCUqi+JoVE44Vbbi1TfeGVvgsaXk60ZTPZYvfgnjyY0xcGlkHHxCrh1se6x8zO+Qo+it4dif0dwJS8mnOYb9A6K3PYo3TyzeSDZomSsBfOzHJACd3XoA6QYM0J2AkWQP+TI/0g2WJA0I8rMOqnf22InoT6E+dTN56nG526Z1IcixfA1hkIQlVBSXjaw+d2x2p/ZLHwdwhpms2VYH+nRAuOhnyUPmR7Xg9k32cbWDm86WxfeQ+lSHtjSvBqClP/rymHmHzu6Srg/oBeI0MlBZkd5F7ymgUtDQ== 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=ZFy3GrNIEvANC+nQ8F0RvW1T96ktPxGFIPg1Nw0n18Y=; b=bRoYIWKVzp5TE/cPzC35W8mDbkT1dIw6hywSj+bBsmeNrDtsem4StVHbZ5MW5qDJn/4IxOgb65LYmmwRJj4sswMtaWdTU2B5Bb9ZFsThdkGIfYvL4Fxu/35/2H6PqErMYV8Eb2boIhsZFQDuY3uPpg4T61EluhY0XGwzAJmJ7L05WzsQaYc/WFrAVANjGC4+5eKj3z5H2W9m6TzlTuOgzBCw6/6qDSnmps7JLfmaIMmg5Na1NvEuQowsUac0/osWQKT04/LndWDHSSHar7hJly8C8C8bTSmFYtBqR4oHOA1RCpYD4Qc7GXr52YGpF8iR+W5ZKe2hSU4Yds1p6peq1w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from SA1PR11MB6968.namprd11.prod.outlook.com (2603:10b6:806:2be::22) by PH0PR11MB7471.namprd11.prod.outlook.com (2603:10b6:510:28a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.15; Tue, 20 Oct 2026 16:50:17 +0000 Received: from SA1PR11MB6968.namprd11.prod.outlook.com ([fe80::ab18:2ee7:3448:d71a]) by SA1PR11MB6968.namprd11.prod.outlook.com ([fe80::ab18:2ee7:3448:d71a%7]) with mapi id 15.21.0522.017; Tue, 20 Oct 2026 16:50:15 +0000 From: "Bouhaouel, Mohamed" To: Guinevere Larsen , "gdb-patches@sourceware.org" CC: "Ijaz, Abdul B" Subject: Re: [PATCH 1/1] gdb, infcall, breakpoint: Handle cycles in conditional expr evaluation Thread-Topic: [PATCH 1/1] gdb, infcall, breakpoint: Handle cycles in conditional expr evaluation Thread-Index: AQHdUntJamz+qzjxzUezJYo0m4itcbcFQceAgAF8r8g= Date: Tue, 20 Oct 2026 16:50:15 +0000 Message-ID: References: <20261002143505.38658-1-mohamed.bouhaouel@intel.com> <8b70f4a3-cb1e-4fcc-b222-4c153833a4fc@redhat.com> In-Reply-To: <8b70f4a3-cb1e-4fcc-b222-4c153833a4fc@redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: authentication-results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SA1PR11MB6968:EE_|PH0PR11MB7471:EE_ x-ms-office365-filtering-correlation-id: 80296078-484e-4140-1fef-08df2eca3729 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|23010399003|1800799024|376014|366016|6133799003|22082099003|18002099003|13003099007|8096899003|4143699003|5023799004|11063799006|261009223027099003|10067099003|38070700021|56012099006; x-microsoft-antispam-message-info: ho74Oa/L3h3e806nSSpdGcWFsXhiQGgDQ+JcHrcyMRXIgPMQqGV730HF5sg0MUQHPSoxeVhuHyOEGHCZIbgwGsRSi7wMotUJdv3eXTa1ZcgS53grXAY1zUH567XoGMr2ccy2mSAc411VSrHFLxr526/xhR3JTONti06aKhTOuSDK95D3GPioxseCAQXeUo17Xr9upbzf2s2sD2n9rCKTYhwkmL0QFw5Tc3MzsEYV7CH6xIMApfh44UaIdfhWG+0rOM0ioxYNczONzyaomZkOaxVQFswyY/1NhsOlP6uR2JsEvlKMT2F7tPb7YaNeom4luxImJrTKqCqDWvddlKP5NPzcnbKWJTZ7EdR/HZ77NvjjJVL5IY7Ouw9D3ZWd+JDiJzwmNfoZ10f3+3LnUzkp57j8e216yDXDA13wvH/GmdwbK7yEfCpnkSNoNl15oBhh/LgAJUl7QI7a5gAAiD0zbWJQ5sVkFdaKRNokUIR4OalQgXULpiwj6q5jykucEnEtXi2crvuHNUTiAaGA5Urpjl6pKZmoapjHpY3FwsOPC7SqaE6/gOjgcKorcBG6lxa759zgi8XUV9+V7yAtsVWXhmETx1Qws4x7Etpaco+mXyjXt9P/yxuT9axARQ4qzKRZUNNpr+Z/t6EGE2pJtxOkPTp85KUMgaTsl8sWApzNRDgemWF66m/M9SgAQf/1cbR1 x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SA1PR11MB6968.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(23010399003)(1800799024)(376014)(366016)(6133799003)(22082099003)(18002099003)(13003099007)(8096899003)(4143699003)(5023799004)(11063799006)(261009223027099003)(10067099003)(38070700021)(56012099006); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?CyDL3VYlWVaG0zOZ9I27I3PiY3XF/aZdqYmjEMhdMxPtD5vmDwJBRTGEdslN?= =?us-ascii?Q?B9YGDYxVH13kqJnNjK1eiQDIOiUaExsexXo4A7Ojh4+uRK7dI63A1JzMOExM?= =?us-ascii?Q?UUDWUSXPP5Q0p9Cdv+KiykPIfS002PW42OHDLCXT4sD8D6BBajZT5pnw1k9C?= =?us-ascii?Q?+A8hWNofjScC+gR2TMbwXHQHk277imlDcK+SdeJ5ZfHOmqssKP+t74yW25Ad?= =?us-ascii?Q?q4MkXwzx15VX5OfXphW02Lft64ey1HkW37T1PqL3hXaZ+LB3ayxNZb4mAB+g?= =?us-ascii?Q?/G5IZmG19LYOVi7BY0rscDDZbvPydMhzQgBKqD/bQIj5bJVhx+YajizoaOM4?= =?us-ascii?Q?FpSAymlrwM9nxPDLCDtx7Ff+lu729NBf3DXISVYztaH/aJw5S9Yi8c5ifmzE?= =?us-ascii?Q?OIGy9R5W21hOUgrZa8g9vtBM6HAcYYrYeXbN+b+ptECA1+V50F7NHE4yqnPw?= =?us-ascii?Q?kebv4DV7cj6X5hRPwSG41EoGqymBUF3Nahqt9RwFpQv0A51sku4n3QRxX0AG?= =?us-ascii?Q?qm39xYXy8Sh7Yai/dlNsA4gF08VutATDe/pp4Dds71C2f0bxu7ZVpiWRuU7M?= =?us-ascii?Q?W/aKEbu/6PQEpBTbVhdxRz7uc04+foHcUs6hC/nUh3OsiBpMvH4E2eW1wOqg?= =?us-ascii?Q?3hbyswkU9bmWpY1R6nmYxsEGiOmFgn6tGwXj+wPOoVGXIqYsTBjEiQCCnyyE?= =?us-ascii?Q?OyI3V3hbzVOJs5A1YN7M/q1C6d1MkPjjtrk/ySmAiwv9ecQTFyWqHW//XG1z?= =?us-ascii?Q?iIxjSE0CCtm8MZs4N9RExGiOqHzdnvkqW6RAOIXO8spfzIR84MS+Aa8l/kxQ?= =?us-ascii?Q?Qo3ZZoKukxnLUIRBnyeWULxuTVsHNOURS4opMmiQwNqx+2BjimVBgYz2BN7Y?= =?us-ascii?Q?L8kxu2RfS8ah/XOME6F7oBwufWWWxwrfJtdEeZ6N4ZXCK7rzHsLyZXMhQPWh?= =?us-ascii?Q?ojf7cTh/3IwS31N1E3NDinrQYoi3Gk16OSei48q6Py1sRqo/t3lbJadVwFbU?= =?us-ascii?Q?SIhol/ypOTW6lhnRfnaqiBG+bthA3t4cs2u+vZx1fiZQMsZb0VaA3BtOBtuf?= =?us-ascii?Q?fhFmWb4idYZpeqmR0kray8DczL63cbw2+m3OGhajodxezwzMsg7YA5tz7H//?= =?us-ascii?Q?fOxft/6yaDAXlkTp7JGtxujWAjxQJTxxjnJ1aT3XkZL/NAn3vTPulmauxEvf?= =?us-ascii?Q?Er4MSVyUEvpIrLccoshuWktKq86lrZcuBfvRuKXS67McHNFfI9mUAIeb2rFf?= =?us-ascii?Q?jUFnhK8Nz4tXzchIsspYfgBQZu57NBiQzoJPuYQzfA/vZ1dVGH3ZKnkZ1Jsz?= =?us-ascii?Q?IMOB2YPafPhxTlJ4TSWUMUmpicQA9DMXrJAM8wt/HBZ0Qt7WgRf/FlOzCnns?= =?us-ascii?Q?WGAKg57Zt8BhqheDP2BsqUlxJ3UiEq6eltHWF5rYqcQP1eJO71bV23BMOW1y?= =?us-ascii?Q?LXe2AzG2KImaSRmcUidNi2V6eTOGxcycqjEx+F9pNROmLBi/3hztKEl+ghw9?= =?us-ascii?Q?yBfxHKM1ovTvO3ayTcApe86DJ//tG8If3gsLNOkGcNPYz92PTj2J7w//v2nM?= =?us-ascii?Q?v4p1jXFnixTwtHs2XnTEl2fThmCg10a74Uj2gjWIyav+PDBPjoOVQD+qarww?= =?us-ascii?Q?HmqGBl56ffKmOlMk67X8kInZjcsPMxuQhlceMINrl/hnYArb1OW0VgbrYy57?= =?us-ascii?Q?fTrEqwVnGjd9PoEzrrNqZcbxKMoyvEWrDe4rEMJmwM2KdQe5ZeQ/SQ4+QOzJ?= =?us-ascii?Q?G1PPlDvtQQ=3D=3D?= Content-Type: multipart/alternative; boundary="_000_SA1PR11MB6968291F7ECF212747439EEDE4672SA1PR11MB6968namp_" MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: kj66wy95RdIdcS3lxzxb4HBSObyyIzXAWjPU0fn/I6WMvG25r5EtT9IZ+iyQpxvgLYNGN5WPTz6Zti0OqIfcn5v3Ht9JFr5XEIn4HOuaMnKIahraVDiAmdcx3BCjD0DF7CFWC4BvnKBdawcizCcYlkVjQ5W7YOIYpXBKGWhxcEtoG1op28B7b3EarUfLwmdcT6driESSGa/f5HdTfE3ogBGy2RxwQbw0GNjiNcPA5rwcdXy/ZkgfIDVGtq8NpmO4D+5VPf1YOlfATxbu0AuqJI8JeXTizaNzutmLhigXFOXRX+iI0Gf1Hb9doCT0b3xVDFmRV2n+UnnuI4ZsRK+nZw== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SA1PR11MB6968.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 80296078-484e-4140-1fef-08df2eca3729 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Oct 2026 16:50:15.3408 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: lBaB4NpC+nd9ZPQnuRgllLuUXwVDWjOTOlyZ/WfaC9hdpKAqRNzz+RQ9Ee8ypedUdk8T3uxnjjM/UfiW3M6Ec5nUO+VfMcwMemXa9otWqUs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB7471 X-OriginatorOrg: intel.com 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 --_000_SA1PR11MB6968291F7ECF212747439EEDE4672SA1PR11MB6968namp_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Larsen, Thanks for testing, and looking into this. > Why do we want a breakpoint to trigger if we're evaluating an inferior > function call? Stopping inside an inferior call made from a breakpoint condition is an existing, intentional behavior: The manual documents that an inferior call = can be interrupted by a breakpoint or watchpoint, and gdb.threads/infcall-from-bp-cond-simple.exp (run_bp_cond_hits_breakpoint) explicitly checks that GDB stops at a breakpoint hit from within a conditio= n's inferior call. Changing that would be a user-visible behavior change, which I'd rather not mix into this fix. I'll add your Tested-By tag in the next version. Thanks, --Mohamed ________________________________ From: Guinevere Larsen Sent: Monday, October 19, 2026 7:57 PM To: Bouhaouel, Mohamed ; gdb-patches@sourcewar= e.org Cc: Ijaz, Abdul B Subject: Re: [PATCH 1/1] gdb, infcall, breakpoint: Handle cycles in conditi= onal expr evaluation On 10/2/26 11:35 AM, Mohamed Bouhaouel wrote: > Take the following scenario: > > (gdb) break foo if foo (1) =3D=3D 2 > (gdb) run > > The program stops at 'foo', then GDB tries to evaluate the condition. > The condition triggers an inferior call of 'foo', which causes a stop at > 'foo' again, and GDB is stuck in this infinite cycle. > > The same issue exists also for indirect cycles, e.g., > > (gdb) break foo if bar (1) > (gdb) break bar if foo (1) > (gdb) run > > To avoid this, check for cycles just before evaluating a breakpoint > condition. If a breakpoint is hit again while its own condition is > being evaluated, the evaluation of that condition is aborted with an > error message. > > With the patch, the behavior becomes: > > (gdb) break foo if foo (1) =3D=3D 2 > Breakpoint 2 at 0x55555555514c: file infcall-from-bp-cond-cycle.c, lin= e 27. > (gdb) continue > Continuing. > Error in testing condition for breakpoint 2: > Aborting expression evaluation for the conditional bp: > A cycle was detected during the evaluation. > > Breakpoint 2, foo (a=3D1) at infcall-from-bp-cond-cycle.c:27 > 27 return a + add_one (a); > Error in testing condition for breakpoint 2: > The program being debugged stopped while in a function called from GDB. > Evaluation of the expression containing the function > (foo) will be abandoned. > When the function is done executing, GDB will silently stop. > (gdb) backtrace > #0 foo (a=3D1) at infcall-from-bp-cond-cycle.c:27 > #1 > #2 foo (a=3D11) at infcall-from-bp-cond-cycle.c:27 > #3 0x00005555555551af in main () at infcall-from-bp-cond-cycle.c:47 Hi! Thanks for working on this! I have a question, which may be somewhat silly, but... Why do we want a breakpoint to trigger if we're evaluating an inferior function call? To me, it seems like stopping on a call that wasn't generated by the inferior's execution is an anti-feature, but I recognize that this is based on my preference. If we agree that stopping on this isn't useful, then there's no need to look for cycles, making the fix simpler. If stopping is useful, I don't have comments on the changes themselves, they look ok tome, but I don't know enough to give a review tag, but I can confirm that it fixes the issue and doesn't cause problems, so feel free to add my test tag: Tested-By: Guinevere Larsen -- Cheers, Guinevere Larsen it/its she/her (deprecated) > --- > gdb/breakpoint.c | 14 +++- > gdb/gdbthread.h | 10 ++- > gdb/infcall.c | 2 +- > gdb/infrun.c | 6 +- > .../gdb.base/infcall-from-bp-cond-cycle.c | 51 +++++++++++++ > .../gdb.base/infcall-from-bp-cond-cycle.exp | 71 +++++++++++++++++++ > 6 files changed, 147 insertions(+), 7 deletions(-) > create mode 100644 gdb/testsuite/gdb.base/infcall-from-bp-cond-cycle.c > create mode 100644 gdb/testsuite/gdb.base/infcall-from-bp-cond-cycle.exp > > diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c > index 0f5360c4ce5..a4ca10a95fe 100644 > --- a/gdb/breakpoint.c > +++ b/gdb/breakpoint.c > @@ -6047,8 +6047,18 @@ bpstat_check_breakpoint_conditions (bpstat *bs, th= read_info *thread) > { > try > { > - scoped_restore reset_in_cond_eval > - =3D make_scoped_restore (&thread->control.in_cond_eval, tru= e); > + /* Check if we are already evaluating the same condition. Th= is > + would lead to an infinite cycle. */ > + std::vector &cond_eval_bps > + =3D thread->control.cond_eval_bps; > + if (std::find (cond_eval_bps.begin (), cond_eval_bps.end (), = b) > + !=3D cond_eval_bps.end ()) > + error (_("Aborting expression evaluation for the " > + "conditional bp:\n" > + "A cycle was detected during the evaluation.")); > + > + cond_eval_bps.push_back (b); > + SCOPE_EXIT { cond_eval_bps.pop_back (); }; > condition_result =3D breakpoint_cond_eval (cond); > } > catch (const gdb_exception_error &ex) > diff --git a/gdb/gdbthread.h b/gdb/gdbthread.h > index 51e9ae1b3f0..640c4a0fc2e 100644 > --- a/gdb/gdbthread.h > +++ b/gdb/gdbthread.h > @@ -234,8 +234,16 @@ struct thread_control_state > step" behaves like "on" or "off". */ > int stepping_command =3D 0; > > + /* A list of conditional breakpoints (if any) that the thread is evalu= ating. > + This list is tracking breakpoint hits during expression evaluation = to make > + sure we don't run into cycles. */ > + std::vector cond_eval_bps; > + > /* True if the thread is evaluating a BP condition. */ > - bool in_cond_eval =3D false; > + bool in_cond_eval () const > + { > + return !cond_eval_bps.empty (); > + } > > private: > /* Function the thread was in as of last it started stepping. */ > diff --git a/gdb/infcall.c b/gdb/infcall.c > index 4c40f6cb06e..f4f15a946a6 100644 > --- a/gdb/infcall.c > +++ b/gdb/infcall.c > @@ -865,7 +865,7 @@ run_inferior_call (std::unique_ptr s= m, > > /* Setup a timer (if possible, and if the settings allow) to prev= ent > the inferior call running forever. */ > - bool direct_call_p =3D !call_thread->control.in_cond_eval; > + bool direct_call_p =3D !call_thread->control.in_cond_eval (); > infcall_timer_controller infcall_timer (call_thread, direct_call_= p); > > /* Inferior function calls are always synchronous, even if the > diff --git a/gdb/infrun.c b/gdb/infrun.c > index 47966cf72db..c35e6d20532 100644 > --- a/gdb/infrun.c > +++ b/gdb/infrun.c > @@ -2458,7 +2458,7 @@ user_visible_resume_ptid (int step) > resume_ptid =3D inferior_ptid; > } > else if (inferior_ptid !=3D null_ptid > - && inferior_thread ()->control.in_cond_eval) > + && inferior_thread ()->control.in_cond_eval ()) > { > /* The inferior thread is evaluating a BP condition. Other threa= ds > might be stopped or running and we do not want to change their > @@ -4711,7 +4711,7 @@ fetch_inferior_event () > /* Is the current thread performing an inferior function call as pa= rt > of a breakpoint condition evaluation? */ > bool in_cond_eval =3D (inferior_ptid !=3D null_ptid > - && inferior_thread ()->control.in_cond_eval); > + && inferior_thread ()->control.in_cond_eval ()); > > /* If the thread is in the middle of the condition evaluation, wait= for > an event from the current thread. Otherwise, wait for an event = from > @@ -4780,7 +4780,7 @@ fetch_inferior_event () > function call as part of a condition evaluation, then we > don't want to stop all the other threads. */ > if (ecs.event_thread =3D=3D nullptr > - || !ecs.event_thread->control.in_cond_eval) > + || !ecs.event_thread->control.in_cond_eval ()) > { > stop_all_threads_if_all_stop_mode (); > > diff --git a/gdb/testsuite/gdb.base/infcall-from-bp-cond-cycle.c b/gdb/te= stsuite/gdb.base/infcall-from-bp-cond-cycle.c > new file mode 100644 > index 00000000000..a9e270dc968 > --- /dev/null > +++ b/gdb/testsuite/gdb.base/infcall-from-bp-cond-cycle.c > @@ -0,0 +1,51 @@ > +/* Copyright 2025-2026 Free Software Foundation, Inc. > + > + This file is part of GDB. > + > + This program is free software; you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation; either version 3 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU General Public License for more details. > + > + You should have received a copy of the GNU General Public License > + along with this program. If not, see .= */ > + > +int > +add_one (int a) > +{ > + return ++a; /* cond-bp-line. */ > +} > + > +int > +foo (int a) > +{ > + return a + add_one (a); > +} > + > +int > +bar (int a) > +{ > + return a + 100; > +} > + > +int > +baz (int a) > +{ > + return --a; > +} > + > +int > +main () > +{ > + int a =3D 10; > + int b =3D add_one (a); > + b +=3D foo (b); > + b =3D bar (b) + baz (b); > + > + return 0; > +} > diff --git a/gdb/testsuite/gdb.base/infcall-from-bp-cond-cycle.exp b/gdb/= testsuite/gdb.base/infcall-from-bp-cond-cycle.exp > new file mode 100644 > index 00000000000..c67192165b0 > --- /dev/null > +++ b/gdb/testsuite/gdb.base/infcall-from-bp-cond-cycle.exp > @@ -0,0 +1,71 @@ > +# Copyright 2025-2026 Free Software Foundation, Inc. > + > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation; either version 3 of the License, or > +# (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program. If not, see . > +# > +# Test that GDB is able to detect a cycle when evaluating a conditional > +# breakpoint. In such a case, GDB should report the cycle and abort the > +# evaluation. > + > +require {!target_info exists gdb,cannot_call_functions} > + > +standard_testfile .c > + > +if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } { > + return -1 > +} > + > +set bp_line [gdb_get_line_number "cond-bp-line"] > +set conditional_bps [dict create \ > + direct-line [list "$bp_line if foo (1) =3D=3D 2"] \ > + direct-func [list "foo if foo (1) =3D=3D 2"] \ > + indirect-2 [list "foo if bar (1)" \ > + "bar if foo (1)"] \ > + indirect-3 [list "bar if baz (1)" \ > + "baz if add_one (1)" \ > + "add_one if bar (1)"]] > + > +foreach_with_prefix name [dict keys $conditional_bps] { > + set bps [dict get $conditional_bps $name] > + clean_restart $testfile > + if {![runto_main]} { > + return > + } > + foreach bp $bps { > + gdb_breakpoint $bp > + } > + gdb_test "continue" "A cycle was detected during the evaluation.*" > + > + delete_breakpoints > + set keep_going 1 > + set itr 0 > + while {$keep_going && $itr < 10} { > + set keep_going 0 > + gdb_test_multiple "backtrace" "check dummy frames: itr $itr" -lbl { > + -re "\r\n#$::decimal (?=3D\r\n)" { > + set keep_going 1 > + exp_continue > + } > + -re -wrap "" { > + pass $gdb_test_name > + } > + } > + if {$keep_going} { > + gdb_test "continue" "Continuing\\." "skip dummy frame: itr $itr" > + } > + incr itr > + } > + gdb_assert {!$keep_going} "no dummy frames left" > + > + gdb_continue_to_end > +} ________________________________________ Intel Deutschland GmbH = Registered Address: Dornacher Strasse 1, 85622 Feldkirchen, Germany = Tel: +49 (89) 99143-0 = www.intel.de = Managing Directors: Candice Moore, Jeffrey Schneiderman, Ramachandran Sitar= aman Chairperson of the Supervisory Board: Sonja Pierer Registered Seat: Munich Commercial Register B: Amtsgericht Munich HRB 186928 This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies. --_000_SA1PR11MB6968291F7ECF212747439EEDE4672SA1PR11MB6968namp_ Content-Type: text/html; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable
Hi Larsen,

Thanks for testing, and looking into this.

> Why do we want a breakpoint to trigger if we're evaluating an inferior=
> function call?

Stopping inside an inferior call made from a breakpoint condition is an
existing, intentional behavior: The manual documents that an inferior call = can
be interrupted by a breakpoint or watchpoint, and
gdb.threads/infcall-from-bp-cond-simple.exp (run_bp_cond_hits_breakpoint)
explicitly checks that GDB stops at a breakpoint hit from within a conditio= n's
inferior call.  Changing that would be a user-visible behavior change,= which
I'd rather not mix into this fix.

I'll add your Tested-By tag in the next version.

Thanks,
--Mohamed

 


From: Guinevere Larsen <= guinevere@redhat.com>
Sent: Monday, October 19, 2026 7:57 PM
To: Bouhaouel, Mohamed <mohamed.bouhaouel@intel.com>; gdb-patc= hes@sourceware.org <gdb-patches@sourceware.org>
Cc: Ijaz, Abdul B <abdul.b.ijaz@intel.com>
Subject: Re: [PATCH 1/1] gdb, infcall, breakpoint: Handle cycles in = conditional expr evaluation
 

On 10/2/26 11:35 AM, Mohamed Bouhaouel wrote:
> Take the following scenario:
>
>    (gdb) break foo if foo (1) =3D=3D 2
>    (gdb) run
>
> The program stops at 'foo', then GDB tries to evaluate the condition.<= br> > The condition triggers an inferior call of 'foo', which causes a stop = at
> 'foo' again, and GDB is stuck in this infinite cycle.
>
> The same issue exists also for indirect cycles, e.g.,
>
>    (gdb) break foo if bar (1)
>    (gdb) break bar if foo (1)
>    (gdb) run
>
> To avoid this, check for cycles just before evaluating a breakpoint
> condition.  If a breakpoint is hit again while its own condition = is
> being evaluated, the evaluation of that condition is aborted with an > error message.
>
> With the patch, the behavior becomes:
>
>    (gdb) break foo if foo (1) =3D=3D 2
>    Breakpoint 2 at 0x55555555514c: file infcall-from-bp= -cond-cycle.c, line 27.
>    (gdb) continue
>    Continuing.
>    Error in testing condition for breakpoint 2:
>    Aborting expression evaluation for the conditional b= p:
>    A cycle was detected during the evaluation.
>
>    Breakpoint 2, foo (a=3D1) at infcall-from-bp-cond-cy= cle.c:27
>    27   return a + add_one (a);
>    Error in testing condition for breakpoint 2:
>    The program being debugged stopped while in a functi= on called from GDB.
>    Evaluation of the expression containing the function=
>    (foo) will be abandoned.
>    When the function is done executing, GDB will silent= ly stop.
>    (gdb) backtrace
>    #0  foo (a=3D1) at infcall-from-bp-cond-cycle.c= :27
>    #1  <function called from gdb>
>    #2  foo (a=3D11) at infcall-from-bp-cond-cycle.= c:27
>    #3  0x00005555555551af in main () at infcall-fr= om-bp-cond-cycle.c:47

Hi! Thanks for working on this!

I have a question, which may be somewhat silly, but...

Why do we want a breakpoint to trigger if we're evaluating an inferior
function call? To me, it seems like stopping on a call that wasn't
generated by the inferior's execution is an anti-feature, but I
recognize that this is based on my preference.

If we agree that stopping on this isn't useful, then there's no need to
look for cycles, making the fix simpler. If stopping is useful, I don't
have comments on the changes themselves, they look ok tome, but I don't
know enough to give a review tag, but I can confirm that it fixes the
issue and doesn't cause problems, so feel free to add my test tag:

Tested-By: Guinevere Larsen <guinevere@redhat.com>

--
Cheers,
Guinevere Larsen
it/its
she/her (deprecated)

> ---
>   gdb/breakpoint.c       =             &nb= sp;          | 14 +++-
>   gdb/gdbthread.h       &= nbsp;           &nbs= p;           | 10 ++-
>   gdb/infcall.c       &nb= sp;            =              |&= nbsp; 2 +-
>   gdb/infrun.c       &nbs= p;            &= nbsp;           &nbs= p; |  6 +-
>   .../gdb.base/infcall-from-bp-cond-cycle.c   = ;  | 51 +++++++++++++
>   .../gdb.base/infcall-from-bp-cond-cycle.exp   | = 71 +++++++++++++++++++
>   6 files changed, 147 insertions(+), 7 deletions(-)
>   create mode 100644 gdb/testsuite/gdb.base/infcall-from-bp-= cond-cycle.c
>   create mode 100644 gdb/testsuite/gdb.base/infcall-from-bp-= cond-cycle.exp
>
> diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
> index 0f5360c4ce5..a4ca10a95fe 100644
> --- a/gdb/breakpoint.c
> +++ b/gdb/breakpoint.c
> @@ -6047,8 +6047,18 @@ bpstat_check_breakpoint_conditions (bpstat *bs,= thread_info *thread)
>        {
>          try
>            {
> -           scoped_r= estore reset_in_cond_eval
> -           &nb= sp; =3D make_scoped_restore (&thread->control.in_cond_eval, true); > +           /* Check= if we are already evaluating the same condition.  This
> +           &nb= sp;  would lead to an infinite cycle.  */
> +           std::vec= tor<breakpoint *> &cond_eval_bps
> +           &nb= sp; =3D thread->control.cond_eval_bps;
> +           if (std:= :find (cond_eval_bps.begin (), cond_eval_bps.end (), b)
> +           &nb= sp;   !=3D cond_eval_bps.end ())
> +           &nb= sp; error (_("Aborting expression evaluation for the "
> +           &nb= sp;          "conditional= bp:\n"
> +           &nb= sp;          "A cycle was= detected during the evaluation."));
> +
> +           cond_eva= l_bps.push_back (b);
> +           SCOPE_EX= IT { cond_eval_bps.pop_back (); };
>            = ;  condition_result =3D breakpoint_cond_eval (cond);
>            }
>          catch (const gdb= _exception_error &ex)
> diff --git a/gdb/gdbthread.h b/gdb/gdbthread.h
> index 51e9ae1b3f0..640c4a0fc2e 100644
> --- a/gdb/gdbthread.h
> +++ b/gdb/gdbthread.h
> @@ -234,8 +234,16 @@ struct thread_control_state
>        step" behaves like &quo= t;on" or "off".  */
>     int stepping_command =3D 0;
>  
> +  /* A list of conditional breakpoints (if any) that the thread = is evaluating.
> +     This list is tracking breakpoint hits during= expression evaluation to make
> +     sure we don't run into cycles.  */
> +  std::vector<breakpoint *> cond_eval_bps;
> +
>     /* True if the thread is evaluating a BP condi= tion.  */
> -  bool in_cond_eval =3D false;
> +  bool in_cond_eval () const
> +  {
> +    return !cond_eval_bps.empty ();
> +  }
>  
>   private:
>     /* Function the thread was in as of last it st= arted stepping.  */
> diff --git a/gdb/infcall.c b/gdb/infcall.c
> index 4c40f6cb06e..f4f15a946a6 100644
> --- a/gdb/infcall.c
> +++ b/gdb/infcall.c
> @@ -865,7 +865,7 @@ run_inferior_call (std::unique_ptr<call_thread_= fsm> sm,
>  
>         /* Setup a timer (if p= ossible, and if the settings allow) to prevent
>         the inferior call runn= ing forever.  */
> -      bool direct_call_p =3D !call_thread-&g= t;control.in_cond_eval;
> +      bool direct_call_p =3D !call_thread-&g= t;control.in_cond_eval ();
>         infcall_timer_controll= er infcall_timer (call_thread, direct_call_p);
>  
>         /* Inferior function c= alls are always synchronous, even if the
> diff --git a/gdb/infrun.c b/gdb/infrun.c
> index 47966cf72db..c35e6d20532 100644
> --- a/gdb/infrun.c
> +++ b/gdb/infrun.c
> @@ -2458,7 +2458,7 @@ user_visible_resume_ptid (int step)
>         resume_ptid =3D inferi= or_ptid;
>       }
>     else if (inferior_ptid !=3D null_ptid
> -        && inferior_thread= ()->control.in_cond_eval)
> +        && inferior_thread= ()->control.in_cond_eval ())
>       {
>         /* The inferior thread= is evaluating a BP condition.  Other threads
>         might be stopped or ru= nning and we do not want to change their
> @@ -4711,7 +4711,7 @@ fetch_inferior_event ()
>       /* Is the current thread performin= g an inferior function call as part
>          of a breakpoint = condition evaluation?  */
>       bool in_cond_eval =3D (inferior_pt= id !=3D null_ptid
> -           &nb= sp;          && inferi= or_thread ()->control.in_cond_eval);
> +           &nb= sp;          && inferi= or_thread ()->control.in_cond_eval ());
>  
>       /* If the thread is in the middle = of the condition evaluation, wait for
>          an event from th= e current thread.  Otherwise, wait for an event from
> @@ -4780,7 +4780,7 @@ fetch_inferior_event ()
>            = ;   function call as part of a condition evaluation, then we
>            = ;   don't want to stop all the other threads.  */
>            if (= ecs.event_thread =3D=3D nullptr
> -           &nb= sp; || !ecs.event_thread->control.in_cond_eval)
> +           &nb= sp; || !ecs.event_thread->control.in_cond_eval ())
>            = ;  {
>            = ;    stop_all_threads_if_all_stop_mode ();
>  
> diff --git a/gdb/testsuite/gdb.base/infcall-from-bp-cond-cycle.c b/gdb= /testsuite/gdb.base/infcall-from-bp-cond-cycle.c
> new file mode 100644
> index 00000000000..a9e270dc968
> --- /dev/null
> +++ b/gdb/testsuite/gdb.base/infcall-from-bp-cond-cycle.c
> @@ -0,0 +1,51 @@
> +/* Copyright 2025-2026 Free Software Foundation, Inc.
> +
> +   This file is part of GDB.
> +
> +   This program is free software; you can redistribute it a= nd/or modify
> +   it under the terms of the GNU General Public License as = published by
> +   the Free Software Foundation; either version 3 of the Li= cense, or
> +   (at your option) any later version.
> +
> +   This program is distributed in the hope that it will be = useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warra= nty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbs= p; See the
> +   GNU General Public License for more details.
> +
> +   You should have received a copy of the GNU General Publi= c License
> +   along with this program.  If not, see <http://www.gnu.org/licenses/>.&nbs= p; */
> +
> +int
> +add_one (int a)
> +{
> +  return ++a; /* cond-bp-line.  */
> +}
> +
> +int
> +foo (int a)
> +{
> +  return a + add_one (a);
> +}
> +
> +int
> +bar (int a)
> +{
> +  return a + 100;
> +}
> +
> +int
> +baz (int a)
> +{
> +  return --a;
> +}
> +
> +int
> +main ()
> +{
> +  int a =3D 10;
> +  int b =3D add_one (a);
> +  b +=3D foo (b);
> +  b =3D bar (b) + baz (b);
> +
> +  return 0;
> +}
> diff --git a/gdb/testsuite/gdb.base/infcall-from-bp-cond-cycle.exp b/g= db/testsuite/gdb.base/infcall-from-bp-cond-cycle.exp
> new file mode 100644
> index 00000000000..c67192165b0
> --- /dev/null
> +++ b/gdb/testsuite/gdb.base/infcall-from-bp-cond-cycle.exp
> @@ -0,0 +1,71 @@
> +# Copyright 2025-2026 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modif= y
> +# it under the terms of the GNU General Public License as published b= y
> +# the Free Software Foundation; either version 3 of the License, or > +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<= br> > +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License > +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +#
> +# Test that GDB is able to detect a cycle when evaluating a condition= al
> +# breakpoint.  In such a case, GDB should report the cycle and a= bort the
> +# evaluation.
> +
> +require {!target_info exists gdb,cannot_call_functions}
> +
> +standard_testfile .c
> +
> +if { [prepare_for_testing "failed to prepare" $testfile $sr= cfile] } {
> +    return -1
> +}
> +
> +set bp_line [gdb_get_line_number "cond-bp-line"]
> +set conditional_bps [dict create \
> +    direct-line [list "$bp_line if foo (1) =3D=3D= 2"] \
> +    direct-func [list "foo if foo (1) =3D=3D 2&qu= ot;] \
> +    indirect-2 [list "foo if bar (1)" \
> +           &nb= sp;      "bar if foo (1)"] \
> +    indirect-3 [list "bar if baz (1)" \
> +           &nb= sp;      "baz if add_one (1)" \
> +           &nb= sp;      "add_one if bar (1)"]]
> +
> +foreach_with_prefix name [dict keys $conditional_bps] {
> +    set bps [dict get $conditional_bps $name]
> +    clean_restart $testfile
> +    if {![runto_main]} {
> +     return
> +    }
> +    foreach bp $bps {
> +     gdb_breakpoint $bp
> +    }
> +    gdb_test "continue" "A cycle was de= tected during the evaluation.*"
> +
> +    delete_breakpoints
> +    set keep_going 1
> +    set itr 0
> +    while {$keep_going && $itr < 10} {
> +     set keep_going 0
> +     gdb_test_multiple "backtrace" &quo= t;check dummy frames: itr $itr" -lbl {
> +         -re "\r\n#$::de= cimal  <function called from gdb>(?=3D\r\n)" {
> +           &nb= sp; set keep_going 1
> +           &nb= sp; exp_continue
> +         }
> +         -re -wrap "&quo= t; {
> +           &nb= sp; pass $gdb_test_name
> +         }
> +     }
> +     if {$keep_going} {
> +         gdb_test "conti= nue" "Continuing\\." "skip dummy frame: itr $itr"<= br> > +     }
> +     incr itr
> +    }
> +    gdb_assert {!$keep_going} "no dummy frames le= ft"
> +
> +    gdb_continue_to_end
> +}

____________= ____________________________

Intel Deutsc= hland GmbH

Registered A= ddress: Dornacher Strasse 1, 85622 Feldkirchen, Germany

Tel: +49 (89) 99143-0 =

= www.intel.de

Managing Directors: Candice Moore= , Jeffrey Schneiderman, Ramachandran Sitaraman

Chairperson of the Supervisory Bo= ard: Sonja Pierer

Registered S= eat: Munich Commercial Register B: Amtsgericht Munich HRB 186928

This e-mail and any attachments m= ay contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.

--_000_SA1PR11MB6968291F7ECF212747439EEDE4672SA1PR11MB6968namp_--