From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id VED1InAiJWrHIjoAWB0awg (envelope-from ) for ; Sun, 07 Jun 2026 03:49:04 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; secure) header.d=gmx.de header.i=ronald.hecht@gmx.de header.a=rsa-sha256 header.s=s31663417 header.b=SZJMua0M; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 7A1FC1E024; Sun, 07 Jun 2026 03:49:04 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,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 E12CF1E024 for ; Sun, 07 Jun 2026 03:49:03 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 21A754C3188F for ; Sun, 7 Jun 2026 07:49:03 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 21A754C3188F Authentication-Results: sourceware.org; dkim=pass (2048-bit key, secure) header.d=gmx.de header.i=ronald.hecht@gmx.de header.a=rsa-sha256 header.s=s31663417 header.b=SZJMua0M Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by sourceware.org (Postfix) with ESMTPS id 1BAF24B7A1CC for ; Sun, 7 Jun 2026 07:48:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1BAF24B7A1CC Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmx.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 1BAF24B7A1CC Authentication-Results: sourceware.org; arc=none smtp.remote-ip=212.227.15.19 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780818517; cv=none; b=DnUTF7PeDMqX5aJuMSoKB8yXBjlNneaVDe1fHTjMl9x1ZDEKQFvCQZ4J+oi/J45L4wuWKCJTNfHYOo9BGVytliZT9Y8lqWpdia9xrB755EXWkACGQnIYAbnO0lWLAQxqZsyRFpzQ8p2FCNxZWME6APBL5XQHzPBdkE6KwKTEjmI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780818517; c=relaxed/simple; bh=yOkWBtSMahLhVYDMJzn6qcE9I/jOdFKnl5j4DGd7V/Q=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=xkM5N+XMKmdGHAJPeW0543tNIAc9whOXg9OFjBHXZeV4JdxFgp/SsCmPt0gkkhdvrfe96vmeeb3cD4vIanKcqx26yzobRt3fbXdjRjBUv3/TlHmstqrKmpBR0aPA+wOss5GpH0XR3oq/SaiZmTpFRJJVXOhgcWFKBhed63hwrnw= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, secure) header.d=gmx.de header.i=ronald.hecht@gmx.de header.a=rsa-sha256 header.s=s31663417 header.b=SZJMua0M DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1BAF24B7A1CC DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1780818515; x=1781423315; i=ronald.hecht@gmx.de; bh=DzQwxvYvKR3BUa6uH82uMFF7m41JeAtdRES5BmM6rzA=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=SZJMua0M5N4RzNXP7/K2XfXzLgNpxNthKZseWK2F4DDsIihHsN0D9cjysxOtQEQD lhp9jh3C2oy7OjFz+J1DZpkVUV5PabOQznJHFbTLJwJbiN7H4kAGANzeQQShfpvD/ pg/We+k/TqW6B7oJLEKYa3mw/XWG7XybpI1bOA76SMGeBQwIl78HBpUygrmriqrzD A7IJQl5SDuatr3xIuDWH2LcNwJSOl/7HDWDew+L1tlRptszGfUPIWC3tYT/TxOlnz OvwIufouzNmHRHBM4jMU7lir66w8kfxSEDaRAL+b+8oaDWYCcraxyHBtcM6D8EOf3 Zf8GYaoN0gwPXbH/ZA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MORAa-1wtsQX2WnG-00Hi4t; Sun, 07 Jun 2026 09:48:35 +0200 From: Ronald Hecht To: gdb-patches@sourceware.org Cc: Ronald Hecht Subject: [PATCH v2] gdb: z80: Fix endless backtrace loop and assertion crashes Date: Sun, 7 Jun 2026 09:48:01 +0200 Message-ID: <20260607074801.32477-1-ronald.hecht@gmx.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260606124038.110fa3b3@f42-zbm-amd> References: <20260606124038.110fa3b3@f42-zbm-amd> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:3db4qs0O05iuD/YcBJJIJbWX64gJGrp9XqZkNxQ6jU817TQ/X2y k3anBFRFPtGIaAsXwRYpQEUHmnYD+Wmb4SOni7WHKq+gjr/R2low72PH2baimRdJ9Ju8XGY Yy/0yv987SoQFmGeakI5xSPhOUvddA1Eg4J2U5v4BDQB4FapAS8B/qdQNWhQeYXKyZAmIMw yuMzeETkE9Vu2e5AnBelA== UI-OutboundReport: notjunk:1;M01:P0:n0CKa6COI10=;xmWK+7SjBntwnwGG8U0r2iCQ7mf vnChjYbwR8cCs5mYEeyxtth0W1aNCXMgB8n4lQITbOzQRm+0CqB4HaPF67DZRXgHU/qgKbnKw HqoE+T6Df+tlbc1pVlIVy/CuQ0DQO0X+Ov769JQns2OIJVQlRlkhTc3UImpQ4wiNsVK/DMyw3 hSvN0xcbcPOQgmo5hpAgcsPvpjVaJuJMrOTzuvY8/7dsnIHeWbq3AFxwW64xsdTBSNjwihkAa 7XJzpD4oJH4DYMFgCYgI9Kny20MSIRWb6mX5ztLnx9UbMO1WaDBJfYAVlWV92PkWpK27/yUhY XDQf3ujEZWryuIFsa4I0wavkE2/oo1R0RdyYzRRwl9qXgv5KVQjkhfNMnhDTKsTPrpvT9RAA4 +z0M3zAL4WCmYQsv3rNXIFsEvTW5M8ATITlYYHPmFAVMB0VIrz8DrBVY+awGGvucr0+9+gkRK /K/AN4o1T4kzD6MR5///cgAz3PvHLfmeOcIhjbIcz2SadNov2vwWakE56EGHnp5tQ8EXkyu+R 9JqGe/K+WBDY6gOibj2/ytc0PPAzd1wreGDQZMDAIcbDg2tcFWxWfWYBR+6jszCwaRJ8OIeNR u9tKAlMTuNPa6cmfjjetNQBbeMs5TQdNi4N0KE0j9b4Z7mjYED68LecdDaHi1crykiVHB/z3r pokIF7V2BP6d4R4vplPeCiZ73RDf1MRMmm5ejUsdgG/N1s0hRY0E0GMUPxGUodDTOZvbwMMr7 o3kgUN4mdpMvMpQKo8JNQ6zRnKAIV7+yvhH2jnGPdsbz/L2HfJ/yEd3e8la/6DWaIUpHkRfkD wTKzULFDd3W4oT+NiEEHWi6rYOSVVjNdiyzrKtJ+dHaLPuSoHRoqJp1U8/QQsVyX82IxsjRbi Mb5htnSq3azZdpe1K4gNmdgeYfr2gRobhTLi5nOJvpN5/LQPHacJlYnmGqk0PjzAJvBPNDY/P 9VeGwWRN08Zn0gBaAJdUHqwc0ggLHRndvysjnduNL38m1iCu7bQnsHv4gc7cgtHSxGrPQ41l3 yfd3Js5y36FpjRLxVHmgqXIb0fw7jLE4+EKBmfcKk0Vq8DqsYETnwGmMXW9d+azxYlW9UfFio lBhUcIo4txs6UZ1iLYx2KY3/a7IjsMTObq+aNLvrpVOdQMWZrI/3cH/Lb5B7uNFAdektqvcm3 sHHe/n/cYWmD+XPHGiRd8mcYdGbHI9RjldzXGWI/BaNULgKj46r4YTDSF9Upt2cX+C7100NnQ z4S3/+EZT05eHR/KuUGHHMAlwEVX18VU7A+rFVv0lyyBAMXJVU3jGutLBuf97IpYXeryrYEAQ sQJL3UVP3ndTa6fPrSTlZMJck64q+PJgV5cDaz/ucr2LDysms9T9JaPfuHmCgHiEFKx3uRnP0 AlEhwF/GGwsxIdM/LS42/Goclh7ySy9ElEDJVT2L0WRPwvzbOq7nrdT5YnvNCC0YcZZz7mdko JjlAI9CBQkPjChQzxEQu83b2JiqKvz7ha7q4rvVM2/XF3cNziyTHn2ISSR4gMdVDKBCFJhXx4 ZzO1qojpeT0Y5sV/zGIYvWm4AXAk+smp6JaQ2pYTLUwPrT5rSEern+CNQsU14Fpp9GzSuBEZU qg51yla2JTnpcdBYJXzpPx2RF3nsy2fBWTYisKeVZ2YQmwqwXsw1QY5ofQRCIgI8QZPttoyV0 wwF4ESrhwe/TdyVCiwROl/HgIIERC8a7i3LRLGSmX3D6jsslQCImPPUlrfE26h0ROiM42dm+f PZ6+MUIvna0dCjGaDxtX9Z0qhO+bNREupmvy5O15v8nGCLuVOXWuCWkfd0gCQxwa6OqTn10pz D/O/GE7oWYvVclQfWpVHVSy8F4q5oxzXxG3o0hW1JlIr9tuTCCupcUr6MV8j2jlF2EhFxrOjU F6kyQeWXXQm3D2YZVlOShWO97Eo80XXrh9c+5OEHP1yMeP3xtTSuIhoZQVH0ySStMi6Y39a3m ECkYppuTI7TJ1fzDF7aXrQWkSgkoISgTsjbPvuFOOxNPnsLKqye38rdSaWKebMabYa21BIhDU zFy/urAPjSS6ENaf/+ER7IRuVbp9GRZIE+qJIRAIU/uIfI9zB0j9uHg1MZASvnCGSEmAejaSL lhvoqjcAUeyh6cJIPPV80Ifk1KDkrflGVw5hPd1ihDwqNNM37kLUHlUUBsQ4nqnm/WFVGAlfP nu2YVhJ4AtxGU9ar/EELCtuEasGA74dlLsgYFV3YwLKTV6jhx+bgnDpi1Nt4L9GNHQ5kuW341 7osCEA2IcFC6FsUbjPaDMD4zgiXf9bJLHuN0Lb1IuZoT6OA3+CgLQ2yNXbgP9PbEq+RxaYPqH ZMrddK9R2nXSpoHnmz9FOklmFoi76Ny274KQ4SRTCfXFTjdlrwiuASLYMu5Cr3E70HEnL3Uzh 5OVkxd1XOJWZO6LQP3YIUgeyO9ADXXenNTU20eNWDeHmPDDWxele60oHsLlT/mynDpcNJN2md 5dcEWW1z5Ss2whMfto2Kjr5gOzuCeoCzAiFNZhYfr54A3gOgq2MbtHrvox3u91lfmKN+vkio6 EpMuaeTvRctMKhqALoOPJGAXC93wvJP+GysAGSTtktM6Ps1gmmr2vb6HTVd+GKLhjc2OOONcm IpOdfHxF4O2xFJlI6AEjCP4kpmoelCUcm8F9rJwlHa0FZN4SHXxav2oYAbEgrAYOnMpahcsvR ckPwNHzNzY7i8ljpTN2ii+dHAHUXuPecWlBEujz7eXnpiprsueBmy3ocgbBg0luHOzPRdHCix It/V0YFlSzuqhsS8jy4kQrzq8D6ahp46OPeLGTJtgJ/0N4so4wkyYLylJV3pXEhmwsZa++CJt wPJ5R0w2l5obIdgdWzJWH4eC/mjUCLaBrFftu3r/3yvk8Is2egnhIBP0EOElgF/ypfFaECzM7 diEDce+ljKkBUIEuQ+nu16FFC6DWABvRT5Z3dvd3GkECByXa71lcXsq+PoW560tjF3/bIMb+O BqCJOGeX4bmHG8oIh4LQBWvX08YE9NHOKljj3bqGXZy7FHeBVCaxnObhD67DM9KpHHyc7uwj7 /hb3Hx5A9h9zaFNKJXavw2UR7Ml6gltHDSapQUSLWbg5uJwMHGoSa4hap8BOGgEG/TBH2HoON 6qICybJDNFE4x9wnWLS0Jde0JwsC2v4vrOobvmG+wRUhrpoz4BgVMFXwFtfqum1EUM7RgZz/e /3kEMkNzZaTpV3jwR6QuLJiRqEmZ7BpcbMyPj9xMHx8ifzkWA7o5EZ1lpaoK26LUJn45EQQ0j llnOUB76kCchtbcsnYX/hX5KwBhygJl9xsN/QjpXvWh+jT1fgR4fRz1hRFZTGUexg03dxo+Cn p90jrfPCNLxhrBP/UGDMqwI1pSITdDSWw87MeQ/ZGEaevMsmeu4ZmWWr7uKgR+GyM8+2dkHfr bRc6gOYUtefl8LH3SkmAUTwQ4vJIVDq0V8CU7M1WP3j3/AxKeCDOtFFquBC8Vx5nIPNxnB9tt +t4Sx+e/n0uirH5RbMBMjoSd7hmBfs2DBddmTMYwM66QmZioZMXLWd3My5LKmeHho7bjuJMuW DY7RFUFEF4lyDMaQaodaZk25fhiSgFJ76SsZ9R7Ewrf+a2hlc1TFYuiKxLy/XEwWabR3i9cQJ 1TkSQGvfCd6DUhenxtOAHvHE0DgfGR8wnA0GQ01ZawpENQjimeZMyaGeWU6SxYPVHyeInug90 1JBvm4urB5kOHjY5xAiqsPjd0nTsdvPq7DXsAVOzQN5fIVj49d+sjCUk7Kw2/qcZ4D2Oj9AT/ qsQXjxjn5wFQM+PKIXQixY5aNEAKJeKcL/qKfF64pTutW5hYwirswbgZWQVR8x9znvQnBhleL jlogYknmDSVr+bvc3IYC515hhRtNC0DicNSauepcL8rbxJOHnFanB5VTvjYmNbrIPaI0uSrUY XwdMXTslYKeyXw5oE3Dr1oiH5Ub8I8MebSKzGTEgM/hzn1ad7GPK/oDqXW6DJTg3Iuw59rlLx N45QyWCZ3F0QpdVAjJM04Ml8gCfOUMlWSy2Yp8wK6YwUhJqyMl3WwJS3fWZ8vxvf13tdnr+tX LTnUqRmgOqBNL5NR3elSION70/B8rp6OD+EbEWkXoV33wY/Ln7NVflHvquGRkpIOZVy6O2QjS EGWmgyNMbYJczU2oPQlXvsFgmIsKnJlZHi4ftdMzQ5d5ZsF95AYkmc6+eeuUX+wb+RJeJZ9wS briC6ZoN+DtfHWALSY1vFjm7tmaiwv7plsjx3ee8Djno2w1Ew/oha7iJuFLvGlRyLGOOkFjfx /BrnvMGoiRZ6O7/AA46EVHgGwdD1KLo+es7tjp+fydvPLHJlbg1y19CbjF5anjaBQn60aVF1I plL2CVBGrMd7HDt9gJOuFynIi5Al5TmUJhqBoLQHDxJV+5ZhoAAdVXlVDYOSlj0/bCHhAArqQ yV77Ad7K3HTl84vt7WWrssaeJfxLZVGV5cJUHP3rixuGyG2wPAJzsBCk8vSReEIlhf5BP/s7d HVU1UvQtAaFAnQNVXvNf/724VRFzHlC4hMcQVbpw4VTGh6Cm/H+ZjjZvYO0Pcd/VtC5OB8ca7 +2vzfK9SHQ9PJz/zy16bLD9lu7FouCxjrmwqP5zWyGUAatZ4+u8tlCBQQRJLTrniYJrmtqqGG DV8H20F/aPsK2PTQO5s0coGkL8MPm372bgDpsrVEKh4NZDJXjPCBtSDXqWw6q5nXjn6F3rtc0 Yb8QxcutBS+XpW2Kc0o3EmjjObtONkfX8SyjZsvgBT8rNL3cb3Z3W68zT+sMTqRheT7TUEHiw etBBUKtYn5+QfyhADnc34/5Z08udlumJBT4fpb0NVJhTZ+5RwuA+zuzMFEoWHZkcpz76I6M5S iCJuB5URMQZ4fUjveN7APU+y2anVUr5Mikh5wX90e/2OYAj4a1XK4hr0RvVONA/oljOmwkdag KemPHcedjoOB0zc2jOTZwIwRtLsufjY3ZrAJte2IRoz5KSIz9vsZksTRiFdf4SnHMeUObITTj LEgnkF8Lra2VJMYpLfZQmZj7dA//xXZofG73Ph6Qw4HbzIEjbJgHZG3o013rc0f7dNDJ27pAQ MUNl0Yq4W7YvWE+M9iJxXPiDNJZOm6InmoYcNhuKrSMEraEcAAe3P6sfxfFa8vywPLlwCOOdJ Y4ip+a7xE6gZ5oQ7WOx6mE+YfBJY/IluqF+4vqjze+N3h5W8NDtCP48mqrYg4dD4sxiaFeDvm PiER40vzyOxRtU2zQ6058jj7o0do/7pfpeCs0FbnR4MCHOWcepj1ru9rNyzKfO9Y8fBfB27TB h7VVQTnKzkdcV6dgzBdtOhfAtlXx1dYKa4hkNG5fhieSCSyJFtBtb/6UPpJ2yg2GRAncUOyiQ HivAkRUp/gpOiUVNfoCF7/hWWtM3On7xq1HQ7LFDb9dS9ixIzbsx1Mxd2HOdY2Sg8uk9rCT5J QizduFhlxU4xyS84jcfFncxS214UbTTSMHiJZGhaP0jeQtucbz73PYg8vjJGiCwJaXRewcEpn IQJX7BHjWBufUhZO5TMMUICTwtij4splFRvTxev8YVXXl0NSCWcPgvGNqLhdjpaXD3VxeSBPt KJtirwf+K+oNYzeVCecE3F0qnIEWhDjV+QNu7dEwUx7s8NZ5X8nvCfh+ID0UHDMroCu3cGR0o N7gthRYr3M5dWXcAbMnbCMDRBRVPr7UQDDiAcpB2exXIdvP3L8ZcmayrQq78A== 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 This patch fixes two distinct issues in the Z80 frame unwind cache: 1. An infinite loop in the stack pointer wrapping logic. The `for (;; ++sp= )` loop could run endlessly if the overflow condition `sp < this_base` was never met due to 16-bit address space wrapping. This is fixed by checking for `sp > addr_space_max` instead of masking the address. Additionally, a `loop_count` is introduced to break out after 4 iterati= ons. This prevents severe slow-downs on remote targets caused by scanning large portions of the address space when the stack is corrupt. 2. A potential internal GDB assertion failure. The code previously called `.addr()` directly on saved registers without verifying if they actuall= y held an address, causing crashes when encountering unexpected register states (e.g. REG_UNKNOWN). Added a check for `.is_addr()` beforehand. gdb/ChangeLog: * z80-tdep.c (z80_frame_unwind_cache): Prevent infinite loop by checking addr_space_max and adding loop_count. Check is_addr() before calling addr(). =2D-- gdb/z80-tdep.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/gdb/z80-tdep.c b/gdb/z80-tdep.c index 3a0d5f7e393..832433f05cb 100644 =2D-- a/gdb/z80-tdep.c +++ b/gdb/z80-tdep.c @@ -595,16 +595,28 @@ z80_frame_unwind_cache (const frame_info_ptr &this_f= rame, { CORE_ADDR addr; CORE_ADDR sp; - CORE_ADDR sp_mask =3D (1 << gdbarch_ptr_bit(gdbarch)) - 1; + CORE_ADDR addr_space_max =3D (1 << gdbarch_ptr_bit(gdbarch)) - 1; enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); + int loop_count =3D 0; /* Assume that the FP is this frame's SP but with that pushed stack space added back. */ this_base =3D get_frame_register_unsigned (this_frame, Z80_SP_REGNU= M); sp =3D this_base + info->size; for (;; ++sp) { - sp &=3D sp_mask; - if (sp < this_base) + /* Limit the scan to 4 iterations. If the unwinder's frame + size calculation is slightly off (e.g. due to unpopped + 16-bit arguments or temporary pushes like SDCC sometimes + generates), the return address might be hidden a few + bytes deeper. Scanning up to 4 bytes comfortably covers + one 32-bit or two 16-bit misplaced values. Scanning + further (e.g. 8+ bytes) drastically increases the risk of + false positives: we might wander into the caller's local + variables, hit a random 0xCD (CALL) byte, and generate a + corrupted backtrace. It also prevents massive slow-downs + on remote serial targets if the stack is severely + corrupted. */ + if (++loop_count > 4 || sp > addr_space_max) { /* overflow, looks like end of stack */ sp =3D this_base + info->size; break; @@ -644,9 +656,14 @@ z80_frame_unwind_cache (const frame_info_ptr &this_fr= ame, /* Adjust all the saved registers so that they contain addresses and no= t offsets. */ for (i =3D 0; i < gdbarch_num_regs (gdbarch) - 1; i++) - if (info->saved_regs[i].addr () > 0) - info->saved_regs[i].set_addr - (info->prev_sp - info->saved_regs[i].addr () * addr_len); + { + if (info->saved_regs[i].is_addr ()) + { + if (info->saved_regs[i].addr () > 0) + info->saved_regs[i].set_addr + (info->prev_sp - info->saved_regs[i].addr () * addr_len); + } + } =20 /* Except for the startup code, the return PC is always saved on the stack and is at the base of the frame. */ =2D-=20 2.43.0