From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id sQpOIpEfJWoEGzoAWB0awg (envelope-from ) for ; Sun, 07 Jun 2026 03:36:49 -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=pia/cGGj; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 6BF811E0A6; Sun, 07 Jun 2026 03:36:49 -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 246F31E024 for ; Sun, 07 Jun 2026 03:36:48 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 077D74C318A6 for ; Sun, 7 Jun 2026 07:36:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 077D74C318A6 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=pia/cGGj Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) by sourceware.org (Postfix) with ESMTPS id 495D34C31847 for ; Sun, 7 Jun 2026 07:36:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 495D34C31847 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 495D34C31847 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=212.227.15.15 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780817770; cv=none; b=cYMhW6kHuUpt16836lDELZUHKtdUxGRuyGsCJVvA8h41ZDJ8rvUrXIE28N3s7fHXi1E67kY6MyZR++rpKoM3A631PXlCP2eJmMzFUKuyaRuKBmJi/DC2mr+nBbjJ63GEjOQLclqcHFAskfxqs26ICHNN0D/DiNiBI1yDHnZ+vis= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780817770; c=relaxed/simple; bh=DwO7y2amvTcLeFKwj4g/BLs7+QIRrOHnyh+5zUNCzU0=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=OspLObipipIyGRf/9stJB48JCfLXXL7ehmU1P1Jul5SGE2qtiAf2lpRQGdU3CU9dVCp00fEp3vmFUQOje9QyZuJrrSAOcEojqfUGkQZluyGldCaOoDI94faShwKp1QGS/0e4L7EMW/2RuSW7mizfBcmXQTdC80WNpBThc0M9fs8= 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=pia/cGGj DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 495D34C31847 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1780817766; x=1781422566; i=ronald.hecht@gmx.de; bh=DwO7y2amvTcLeFKwj4g/BLs7+QIRrOHnyh+5zUNCzU0=; h=X-UI-Sender-Class:Message-ID:Date:MIME-Version:Subject:To: References:From:In-Reply-To:Content-Type: Content-Transfer-Encoding:cc:content-transfer-encoding: content-type:date:from:message-id:mime-version:reply-to:subject: to; b=pia/cGGjJXCBbSerJOA0+s89oBwWipdonNnUEMvuazJdsSsLJTgMQxXoyhWKGAXa lg/Q5amo5Ppp2SAb3dmcySXA5fBQmA/3776lSosyM03btWoSy6C4WqK6EyQ/8UN8B AiN5V4Ns4DYMdmLNdEgYJfEalDzMvmt4o5KA+OkNeo+bakTwWeeM+/LdjDhXpFGQO Cl2YnS94Xd1ltb29W+wWZI1Zhbh6LxVnzcGjaKdpzDTdiqk6I/6eFmHz7LncA0mQe c11ZDoLy5DX9iYl/AhAUPulPgy7F2RkT32bbhxIFql9ndd6iozPgX58r2fKk/6OBf GhlRiADiPxJ6YhHnFA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MWASe-1wm9Wu2qa2-00Rkqw; Sun, 07 Jun 2026 09:36:06 +0200 Message-ID: <845f4868-1142-455c-87f7-f032dab623a1@gmx.de> Date: Sun, 7 Jun 2026 09:36:02 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] gdb: z80: Fix endless backtrace loop and assertion crashes To: Kevin Buettner , gdb-patches@sourceware.org References: <20260605185647.47976-1-ronald.hecht@gmx.de> <20260606124038.110fa3b3@f42-zbm-amd> Content-Language: en-US From: Ronald Hecht In-Reply-To: <20260606124038.110fa3b3@f42-zbm-amd> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:xTwoY8YLmy0zjmdni0ZqZp6gRQ/hDFhdBZPCdYnarGz8I4CQMRy lUes3jdPQ3EAWGXgzukyC+xSERTz8H64xppfvTVdWzgWI0nd6osh9hhhwULqCfCpucjo4OU fjOzW8wMQZlTENxpKzn+76diD+8bcPH8qKsMoc+8De39Ya8GGfkHqjVinzE9gmUZCo8gwqE slZs7n6MbjPrm7ywUIBSg== UI-OutboundReport: notjunk:1;M01:P0:kZEx54nxqOA=;wd9JkaGt7e3xvorWJMlnRUJfVkW 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 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 Hi, Thank you for the review and the constructive feedback! You are completely right about dropping the masking operation and=20 checking for |sp > sp_mask| (or |addr_space_max|). I tested your=20 suggested change and it indeed makes the logic much cleaner and works=20 perfectly. Regarding the limit on the stack slots (|loop_count|): I did a test run=20 without my abort condition to see exactly what happens under the hood=20 when the unwinder gets confused (e.g. due to a slightly corrupt stack or= =20 unpopped arguments) and fails to find the return address immediately. Here is a snippet from my remote debug log: (gdb) bt [remote] Sending packet: $m1ae,2#c2 [remote] Received Ack [remote] Packet received: D8E3 [remote] Sending packet: $me3d5,3#fd [remote] Received Ack [remote] Packet received: CDCAE3 [remote] Sending packet: $m1af,2#c3 [remote] Received Ack ... [remote] Sending packet: $m1b0,2#8e ... [remote] Sending packet: $m1b1,2#8f As you can see, the Stack Pointer started at |0x01ae|. Because it=20 couldn't find a matching |CALL| instruction, it started creeping up the=20 memory byte-by-byte (|1ae|, |1af|, |1b0|, |1b1|...). Without a hard limit, this loop will iterate all the way up to |0xffff|.= =20 That is over 65,000 iterations. Since each iteration triggers two=20 |read_memory()| calls (one for the SP, one to check for the |CALL|=20 instruction), GDB ends up sending over 130,000 remote packets over a=20 slow serial or JTAG connection. This effectively hangs the debugger=20 session for minutes. As for why the limit is specifically set to |4| iterations: The Z80=20 heavily relies on 16-bit register pairs (2 bytes). A limit of 4 bytes=20 perfectly covers typical small stack offsets, such as two unpopped=20 16-bit arguments or a temporary 32-bit push (which SDCC sometimes=20 generates). Scanning further (e.g. 8+ bytes) drastically increases the=20 risk of false positives. We would wander deeply into the caller's local=20 variables, where hitting a random |0xCD| (CALL opcode) byte is quite=20 likely. This would cause GDB to hallucinate a corrupted backtrace. A=20 limit of 4 comfortably pulls the emergency brake before that happens. I will prepare and send a |v2| patch shortly. It will include your clean= =20 |sp > addr_space_max| refactoring, keep the |loop_count| limit, and add=20 a detailed code comment explaining this exact rationale for the magic=20 number '4' as requested. Thanks again for your guidance! Best regards, Ronald