From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id CkyDN8kzP2cTYTkAWB0awg (envelope-from ) for ; Thu, 21 Nov 2024 08:21:13 -0500 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=HOTMAIL.DE header.i=@HOTMAIL.DE header.a=rsa-sha256 header.s=selector1 header.b=N4zWoO8m; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id B12BC1E259; Thu, 21 Nov 2024 08:21:13 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FORGED_MUA_MOZILLA,FREEMAIL_FROM, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.0 Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (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 5DC201E1CC for ; Thu, 21 Nov 2024 08:21:09 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D154B3857BA5 for ; Thu, 21 Nov 2024 13:21:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D154B3857BA5 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=HOTMAIL.DE header.i=@HOTMAIL.DE header.a=rsa-sha256 header.s=selector1 header.b=N4zWoO8m Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazolkn190110001.outbound.protection.outlook.com [IPv6:2a01:111:f403:d201::1]) by sourceware.org (Postfix) with ESMTPS id 608333858280 for ; Thu, 21 Nov 2024 13:20:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 608333858280 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=hotmail.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=hotmail.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 608333858280 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:d201::1 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1732195234; cv=pass; b=N0Aoxfk1RIKts8tdnUfBLkesty/KKG+TO9WMlFp6cWKB3BlqSvGkQiXOkg1wN7KbUiuGWkjb1g5xbm9lkEA0xpnVdaKdr3JWVQeUKSVuK2x4nf8UmgOejLMsGR7r/b6PiruVbOosdJzVYAIEwXxqFbBFKaCxblM8PKydfILIWYk= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1732195234; c=relaxed/simple; bh=PhgulvlbKWabRyj4Ms/NfhvL6USDpyNcD6aSem4sfJ4=; h=DKIM-Signature:Message-ID:Date:Subject:To:From:MIME-Version; b=l6IKlEmJEd0EJp6Geq2s4ybAed2uX95gYdjj3hhjtKSTdqpy+CXhuSxmgl2hh7PqxIbQE4ZD/B5mphrFQEH2oyqwAkUSBZJ3amz/bOv5QqbkAdnlSNKXzeVlHGiUrRdKsk1cmtNfE12+qe2933wgTxZhdqZdogsP6cDmprdMk60= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 608333858280 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=H4EZp2UlfVurTpGNXkAlawwepDZKpdC7Mhl1L2FK/MSObJOCtTzo+/anQ396JTEOx8H6sOUtkZd1ye22ymRBxH6hl0o6H8E/SP3PUiQYTo2sPldWxpsedr0N1lWpj3I2ubEMHzJs9nZMYZMbzNOMq7v1FcSaDrCpFzS60Wg0h4a5kAizhwa9yX6sF7Qa6TDeAbAORxdjZPszZlP3Zs903lxlqEJ5cBx5IP39ln7SFFdfiHVvaWPlBv94iga43bI6cnfV6KnNVBkv8VOy6cp2DhZHF6p0Vu4wQnXIRCpgH9qXSxw0mx482tM+a4QogTzTble/j5HwD6bTEBaLlztntg== 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=7elFD406zBAeucHfP6/bk7v1Si60uf7aigtxEZhXY9k=; b=hWJrZ4NJO62PerY2NM9+F84EsBZUfWkkyjCrUE3dMk3zwNzxauq7npvvEcG2tl+MOJaSWlRL0KL4LMj6kygyaq+uSFIWvo3uCXrag0Dzz6scTzfyJZIbhnpskbmkhtJ3R3fJ8/TXLp4+/wQS/qGXtzRZR5KPIhlqN2cnpo5fMCOy79P7iBLzLtrQrZY+VIajGA/hEPaEHcBDv/ENLilwKG1iV2DnBNo6OVA6Cs9PVLcW3SWr6N42RRjbbjF1JdPVNg9ZLY0eJwQQPVOe2IzhBC80ppPAngMXmk63NwRuTxWb7icPcaN+jxjosVUZQg8FluijTugggLx9aSDYEbdXZQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=HOTMAIL.DE; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7elFD406zBAeucHfP6/bk7v1Si60uf7aigtxEZhXY9k=; b=N4zWoO8mGd1GmK+4Ubkv8mWyyI5GYOfdWNjxVt+CmUzY7Wk0SX47wg+pBVP4HxOIi311k3g145jydH+vPlbm7PYzKkV9ykATIuL9Cl9n6eE8X40e3m9M4RGfPf41LlxPnU93KEuN0t3FkrGLVaUJ6LwlL3M0vAbWoiMzfpZOgT+vZBTN5SCdFmrFcNrxIHObFySQYOK/70Y3GDFAj5SOzZKhJ/tFU7F/jRraHspiTGj9ZLElbMAnNh7Ue8wOnMOOQ5ts7S5S76LiBUz5aWndkfJk/aLaP1ZvRBMi7IWlMC3LTyiypg7+PXr7pWrIWccZsQidyVfzHmPeEgJaA3BNBg== Received: from DU2PR08MB10263.eurprd08.prod.outlook.com (2603:10a6:10:491::6) by AS1PR08MB7450.eurprd08.prod.outlook.com (2603:10a6:20b:4de::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8158.22; Thu, 21 Nov 2024 13:20:31 +0000 Received: from DU2PR08MB10263.eurprd08.prod.outlook.com ([fe80::c2a3:fed5:607f:20c8]) by DU2PR08MB10263.eurprd08.prod.outlook.com ([fe80::c2a3:fed5:607f:20c8%5]) with mapi id 15.20.8158.023; Thu, 21 Nov 2024 13:20:31 +0000 Message-ID: Date: Thu, 21 Nov 2024 14:21:34 +0100 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] gdb: handle DW_AT_entry_pc pointing at an empty sub-range To: Andrew Burgess , gdb-patches@sourceware.org References: <34cfe440ffd0e53843bfaf92494d29a6951fa9fd.1732114887.git.aburgess@redhat.com> Content-Language: en-US From: Bernd Edlinger In-Reply-To: <34cfe440ffd0e53843bfaf92494d29a6951fa9fd.1732114887.git.aburgess@redhat.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: FR0P281CA0258.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:b5::10) To DU2PR08MB10263.eurprd08.prod.outlook.com (2603:10a6:10:491::6) X-Microsoft-Original-Message-ID: <83761674-8da8-41f2-8852-4f52abdcc1e3@hotmail.de> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR08MB10263:EE_|AS1PR08MB7450:EE_ X-MS-Office365-Filtering-Correlation-Id: 97a7f16f-30cb-45c1-d2a6-08dd0a2f4631 X-Microsoft-Antispam: BCL:0; ARA:14566002|15080799006|7092599003|6090799003|5072599009|8060799006|19110799003|461199028|440099028|3412199025|4302099013|1602099012|10035399004; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Y1ZwZmx4UVp3VGpGNVEzZzQ0c3pTSnpSMjdrak12UjZJc2VOR1dndFdmNHJv?= =?utf-8?B?RnR2K2twRElDRDJ1TE1wTXlCeCtpVDc3eUtIT0dKT2R3MWtiR0I1bzJQN3U3?= =?utf-8?B?OTc0VXdpMTRXb1IzM1N0ZERQcDUvNWQvamVHVDZNUW0rMEhJeUdiSXdEdzFU?= =?utf-8?B?Vmk1UitJZ3JkSGNLSXppMWpsUTl3citsMVZyL1BVS1NLWmliQUFtNXhXRGEr?= =?utf-8?B?ZDdHc1ZTdXYzTzN6OHFEdzVzSUpTdG9vZk9VR201UzgvZGJjZDZ1VjRGNXFV?= =?utf-8?B?aXN4MDY3VzBtV2diNytXeWJIb3RVS21rQmNVck01QVNsRU9SMjI5dDNaRERh?= =?utf-8?B?UkRmWFZESnJrM0ZMZUgzOGdtRllnRzZQcmV3RzBYWTRRdnNYYzQ3ejZ5NHlT?= =?utf-8?B?aXhVKzZJeVlyMWhLQ256bUNHM2ZHSEZaNHVHWHhtN3llZTI5cmUvQysrMzlK?= =?utf-8?B?cjJ5QlFNNjdMK3QrZStBRUF5ZHRHV0dvckQxdVNMSjhIWDY0QTFSTDRIR0dL?= =?utf-8?B?K0o1clJ1YUxnV0JPMDZobGxPem9jVStHMnRmNnFOVUJJS0ZOYzVITGhXWXRH?= =?utf-8?B?eTZZT2orT0FUL243YTc2eXA2K2k2LzhFS2Z1cUg4NGtrNnRncEEveUVTK2Mx?= =?utf-8?B?L2QycTdrUWlTRWxZb0RLVVF5aCs5Rk10QWtMWWF1TVI1bVlTc2t5M05HOHB0?= =?utf-8?B?b3c2OFdXdXNpS0IvNXJSSU5temtOdFlYUmJUSFgvb05CTGx2dHRZWTJQZWhZ?= =?utf-8?B?ZXlLNUNXNTVIcUZGb04vcjJFTHlBQUJsbnlvZkNQbFNJc0Qyd0RYb0I0Q1pP?= =?utf-8?B?clF5a1FudnArKzYwWTYxdlRaQ25mWlVaY05zMksxa2ZNMFlZWDcyUkpNQXJo?= =?utf-8?B?bGdzMUhPUFBkakZaM3VOMHhmTWN2dlMxWURtSmo4bU1IKzdVdGltRmxlWjE1?= =?utf-8?B?eVVrVHJ0aHBqT3ZCeUFBckFCdHphc3U4S1RhN05PN3dyaTlZaUt1ZEdaS29S?= =?utf-8?B?bkFIVW0xci9PQXM1NVRvaFZQdjgwZCtscURuNVR6Ri9vS3ZlOHVDcy8wdjdV?= =?utf-8?B?N0ZaTmlYcTdmVUl5Vm9OcVRLZjIwRzRZUllmVzlxaks1bVRGbVp3WmR6d0Zs?= =?utf-8?B?Ym93ZFZ4cUkrSW9KQ2NCWit6SHJXOVZ4Yk4vZHN0bjg3WXpEaDNyMDExa2JH?= =?utf-8?B?Y0krS3dXZHN1bnZyOVdKSmxIRER0aFB4UGx5a0EvYkdFeWRLanhZUTYwS0Vx?= =?utf-8?B?YTBtcUllNGtJSTFGSjJaR3RzaldkVnhsem12MGt5alVleW9IYVhMa0syVExh?= =?utf-8?B?S2pLaUFCUzhjdGkxZU91QmxIZjN3RG5uYW1qRS9seTBXWnlpd3ZJNUhDaDNa?= =?utf-8?B?cVFlc3ZUamxSdnh5emZUYkh2NXcyWVREREhSelczUGNGTHVEOWY2VFh0SVZY?= =?utf-8?B?aUpvcWU4SktTRktmYXBNN0tWYzlHb0gxSWFmcm9NSTFuVERSclRwdHJpenQ4?= =?utf-8?B?clBvRWcydXlweEZBNndzVUlVbWcwVFExalExVnNBKzV5dW55REZ5WEVCd0ww?= =?utf-8?Q?7QWbh2IMjU09W9285/ikkBKsFqbiUik4LmbiQJw/O0EoWp?= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NC9EV3ZtenJOaXVPQ3NDUkpKTGNYYlEyRE1VbjVmV0xsaDRJbWNTbWUvL25u?= =?utf-8?B?cFJUaFlYYTlIY21vWnRobGdWVzBmQ0NZcm56UHZLOWMwdS94KzMxSU5LUElX?= =?utf-8?B?RUFlWEJ5L3pVSllQaXp4c1FLWmR1UndEbUVVZ0ZXcVJVVXlzVmpPSDV5Y1lU?= =?utf-8?B?Tlk5MUZzUVppejZ2UytIQ3Z6Tlg3dFJIOVAycEQrMjdxa0I4QmNTY0tnblUx?= =?utf-8?B?UnVaY0szWU0yaUxSNkdkUjQ4Y0RXYjh5bmZ0cVVaMTBwbUNNWUh4TjJiYWpI?= =?utf-8?B?eW44L1ZzcVA2TVVneFloTUJVN1dwSGlxcVYvcnVuVmlTQm83K1FFSU1vSkwv?= =?utf-8?B?TkV0bndLVUZ6MzZLYXRDbTB5VWpZa1FsaG5VVmJJQjA5YmIwVm1DeDZSS1l3?= =?utf-8?B?NHQzMG1XeE03S0w4VVhGelAzLzAxUHdTMEVGOXJibHBXaGxmT3NYTk5tNjIw?= =?utf-8?B?bE1CaVMxYVhUb3RQTmFtVGxrenVmNytvYXVUTDViZXdDMnN6Z1FpRnA4MVQz?= =?utf-8?B?Yk14TTdBTlYzbjF6UnoxVnFvTmxRR2lIK3VHS3RxdzNjVjVmUkphV0hDb3ND?= =?utf-8?B?TnVsMnEzOGpJMVlKNjM5SzFkY1o1TzJLbjNMUENxdkRoZ2JLcHpRZjQrQTZW?= =?utf-8?B?VG5mRWZwVGwxS3QrcDJMZ1BpN0JvdjFLUCs2a3F1TS8rdXo0SzVsV3FTMkI0?= =?utf-8?B?K2V2alB2U01wUkhvZ0paREoyZCtPZTVGTTRNQXA3VXQ0a2ZaQkl1S3V1Wmdk?= =?utf-8?B?S29KRFNHd24zckh6dExaMEVFZUZhRGh3NlhrNHNHQ0N3ZFJKRms4RWovVmk3?= =?utf-8?B?NGVsV2U4cGhBTmovUDhGbmZiN3Rmc2xIOW5rTFlnNUFFVkhRSmNXYUpqMGlj?= =?utf-8?B?VGMxaUIrazdkY2VOV1RIUSs3bVpnRWM0YURpcklpNnZFTUFOU0dQZERWczYx?= =?utf-8?B?NWJjamhWeGhEMVlPL1hBZVoyNHpJRHM5ZzFURkYzSm9yaUp5Q3lJZVVEUDJm?= =?utf-8?B?SkNmeE5hUWNOWlNNZ2YyUEh2WklvUGVXandOeDhtOERNc2FjUFd5czZkRm1u?= =?utf-8?B?dE4wZ0ZNSy8rQ21pNzVPYnA1ZjBvdVNIWXhzeHJFWGpyYUVMTlQ1QXhCSGpK?= =?utf-8?B?MHIreCt4bnR0SnRWSzJ0YmRQRXNSVmUwRmNLZlVpUWE5YmVMd0Y1WmdCZC9j?= =?utf-8?B?UkVHN1M0OVA3SmZqR1pIZFdNejdZZ05td3lDYzdQeEtxTW9ENVo0TTJhc1pp?= =?utf-8?B?QUN5dlV1WjdnejFaMU96Q0xoWlo1QytqTFFLb2MwWk1DSHNPTVRZV3ZNdGdC?= =?utf-8?B?c1R3clpoeGJGWjNKdERIQ1N3Y2lMRFdqTFZxRmhRdEhZbElxM1huWnNxR0do?= =?utf-8?B?SWxCQUpGaXNaS0Z1VDh2UVRVWnNkNVorU2JxR3N6THVxOXFhTVJHM1RNQ0J3?= =?utf-8?B?Y3gvWERwRUZuZGFXUm1kSFoxM2IxOXNJd1JUb0dNdGY2QURGZFVtRnZlZVVs?= =?utf-8?B?WEFhUlNOZ2tya1Q5Z2V6MXA0OTRWWmFLSHh3dVJ6RXVTOE9hTG9rblVPU1ly?= =?utf-8?B?ZFU0eFNzRGFpbnBSRDNOTTVHRVJjenNCOXRGR0ROejVuSkkxUitpRGU1ZGZP?= =?utf-8?B?bFYwcFVFZjd1OXBnYzNiRHJrTnFVTEYzU0Q3eWpoYUNyOUpFYUdSaXRXaVc0?= =?utf-8?B?NUpSMFN2c1g3cngrRmUwcCtVOTBGUlJBcEhIblNLMHhkdzJvUVJiZVRNYmdE?= =?utf-8?Q?K5Q9ohYgyMPZX6g49/00H3R0NCWwXyOf1hpFiYF?= X-OriginatorOrg: sct-15-20-7719-20-msonline-outlook-de33f.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: 97a7f16f-30cb-45c1-d2a6-08dd0a2f4631 X-MS-Exchange-CrossTenant-AuthSource: DU2PR08MB10263.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Nov 2024 13:20:31.8603 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR08MB7450 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 Hmm, sorry, but I think this goes in the wrong direction. On 11/20/24 16:01, Andrew Burgess wrote: > The test gdb.cp/step-and-next-inline.exp creates a test binary called > step-and-next-inline-no-header. This test includes a function > `tree_check` which is inlined 3 times. > > When testing with some older versions of gcc (I've tried 8.4.0, 9.3.1) > we see the following DWARF representing one of the inline instances of > tree_check: > > <2><8d9>: Abbrev Number: 38 (DW_TAG_inlined_subroutine) > <8da> DW_AT_abstract_origin: <0x9ee> > <8de> DW_AT_entry_pc : 0x401165 > <8e6> DW_AT_GNU_entry_view: 0 > <8e7> DW_AT_ranges : 0x30 > <8eb> DW_AT_call_file : 1 > <8ec> DW_AT_call_line : 52 > <8ed> DW_AT_call_column : 10 > <8ee> DW_AT_sibling : <0x92d> > > ... > > <1><9ee>: Abbrev Number: 46 (DW_TAG_subprogram) > <9ef> DW_AT_external : 1 > <9ef> DW_AT_name : (indirect string, offset: 0xe8): tree_check > <9f3> DW_AT_decl_file : 1 > <9f4> DW_AT_decl_line : 38 > <9f5> DW_AT_decl_column : 1 > <9f6> DW_AT_linkage_name: (indirect string, offset: 0x2f2): _Z10tree_checkP4treei > <9fa> DW_AT_type : <0x9e8> > <9fe> DW_AT_inline : 3 (declared as inline and inlined) > <9ff> DW_AT_sibling : <0xa22> > > ... > > Contents of the .debug_ranges section: > > Offset Begin End > ... > 00000030 0000000000401165 0000000000401165 (start == end) > 00000030 0000000000401169 0000000000401173 > 00000030 0000000000401040 0000000000401045 > 00000030 > ... > > Notice that one of the sub-ranges of tree-check is empty, this is the > line marked 'start == end'. As the end address is the first address > after the range, this range cover absolutely no code. > > But notice too that the DW_AT_entry_pc for the inline instance points > at this empty range. > > Further, notice that despite the ordering of the sub-ranges, the empty > range is actually in the middle of the region defined by the lowest > address to the highest address. The ordering is not a problem, the > DWARF spec doesn't require that ranges be in any particular order. > > However, this empty range is causing issues with GDB newly acquire > DW_AT_entry_pc support. > > GDB already rejects, and has done for a long time, empty sub-ranges, > after all, the DWARF spec is clear that such a range covers no code. > > The recent DW_AT_entry_pc patch also had GDB reject an entry-pc which > was outside of the low/high bounds of a block. > > But in this case, the entry-pc value is within the bounds of a block, > it's just not within any useful sub-range. As a consequence, GDB is > storing the entry-pc value, and making use of it, but when GDB stops, > and tries to work out which block the inferior is in, it fails to spot > that the inferior is within tree_check, and instead reports the > function into which tree_check was inlined. > > I've tested with newer versions of gcc (12.2.0 and 14.2.0) and with > these versions gcc is still generating the empty sub-range, but now > this empty sub-range is no longer the entry point. Here's the > corresponding ranges table from gcc 14.2.0: > Yeah, maybe not in this test case, but that is not true in general, a quick check with gcc-15 shows that there still a number of such empty range table entries in the gdb executable itself. Note that ignoring these entry_pc values is completely wrong, and my patch series handles exactly these empty subranges, by not ignoring them in the dwarf reader, and the debug experience is completely normal when this happens. Furthermore, I think that having a break point at these PC values has some benefit, because it is the earliest point in time, when all the input parameter values of the inline function are available, and can be inspected by gdb. I think now it is time to consider merging the rest of my patch. Bernd.