From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id YQszGqJovmm3cTIAWB0awg (envelope-from ) for ; Sat, 21 Mar 2026 05:45:06 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=kXBdW00H; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=wmY+BemP; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=kXBdW00H; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=wmY+BemP; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 555701E0BC; Sat, 21 Mar 2026 05:45:06 -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 DE2B41E04F for ; Sat, 21 Mar 2026 05:45:04 -0400 (EDT) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 5CD6E4BBC099 for ; Sat, 21 Mar 2026 09:45:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5CD6E4BBC099 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=kXBdW00H; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=wmY+BemP; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=kXBdW00H; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=wmY+BemP Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2a07:de40:b251:101:10:150:64:1]) by sourceware.org (Postfix) with ESMTPS id CE4374BB5939 for ; Sat, 21 Mar 2026 09:44:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CE4374BB5939 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org CE4374BB5939 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a07:de40:b251:101:10:150:64:1 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774086275; cv=none; b=anrSvom6gTQsOCM1c0T3OxFuhcMbdgOZXGvgn1HIRYsb1SO0XPEnMYiSmEB8tQplTe7qLj2iSr/4dPGphVPMaBSnxwDJhwozAE+U6ghYO9ISPfMEAsG5ADA2Nu2NFgMhM8JCDhtTDxNo8x5GyiZ14/BJYnkhlvIhWwO0iWPkS1Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774086275; c=relaxed/simple; bh=rgL0oQtCtsBbRtj+PtZRGp/k95lvLldf6xCstQ5bfis=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=sR1aeOyWaa7IVAfgdW/WNeeXtqjCDwWEpEFZ7AHnm0FszdXEUUkia5I/lpErC6WREc34gxswNCLFGJ/Q+Au0WuciH0SiCiq4NF06ytS6v4zTQJSCwgwLtycA7QkKAKS0QDc6umVIgKjYN8KpzDEJAup7SoF3SRpPGEiZ2XIRQSI= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CE4374BB5939 Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 983104D48B for ; Sat, 21 Mar 2026 09:44:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774086273; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Spfuq/Acunqxe+Tw/vwsL9N73PfNTnHEqSbrHhqisPE=; b=kXBdW00HPkQjmjKO5fc+wXJMlV2kFFRFZmqhQl1BDqWsYcShqBRtwfYhVioYf176cJ0T6g s+rW62V+ghR/+shFP7bXxdXUtBenWsPQU61v/OkJuxnQ0iy6Pjj9KzdTQkIl5qZPvGdIxw xat9XAYSNuVY/eid0p40xKt+GSbgOvQ= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774086273; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Spfuq/Acunqxe+Tw/vwsL9N73PfNTnHEqSbrHhqisPE=; b=wmY+BemPMPZjzUVJ1iiwsXuMIuQb3Clz5WJIbbfSwGieC1sbiiOZtNwTiYA5yaxY8U90L8 +nphC4pRPxKVHPDw== Authentication-Results: smtp-out1.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774086273; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Spfuq/Acunqxe+Tw/vwsL9N73PfNTnHEqSbrHhqisPE=; b=kXBdW00HPkQjmjKO5fc+wXJMlV2kFFRFZmqhQl1BDqWsYcShqBRtwfYhVioYf176cJ0T6g s+rW62V+ghR/+shFP7bXxdXUtBenWsPQU61v/OkJuxnQ0iy6Pjj9KzdTQkIl5qZPvGdIxw xat9XAYSNuVY/eid0p40xKt+GSbgOvQ= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774086273; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Spfuq/Acunqxe+Tw/vwsL9N73PfNTnHEqSbrHhqisPE=; b=wmY+BemPMPZjzUVJ1iiwsXuMIuQb3Clz5WJIbbfSwGieC1sbiiOZtNwTiYA5yaxY8U90L8 +nphC4pRPxKVHPDw== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 7E3E342CCE for ; Sat, 21 Mar 2026 09:44:33 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id BR8GHYFovmm1RQAAD6G6ig (envelope-from ) for ; Sat, 21 Mar 2026 09:44:33 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH v2] [gdb/remote] Reimplement escape_buffer Date: Sat, 21 Mar 2026 10:44:33 +0100 Message-ID: <20260321094433.3298268-1-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spamd-Result: default: False [-3.30 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; FUZZY_RATELIMITED(0.00)[rspamd.com]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; ARC_NA(0.00)[]; RCVD_TLS_ALL(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; FROM_EQ_ENVFROM(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; MIME_TRACE(0.00)[0:+] 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 With Fedora RH, using Tcl 9.0.2, I run into: ... (gdb) break -q main^M [remote] Sending packet: $qXfer:auxv:read::0,1000#6b^M [remote] Packet received: l!\000\000\000\000\000\000\000\000 ERROR: \ i_read(spawn_id fd=9): invalid or incomplete multibyte or wide character ... UNRESOLVED: gdb.server/bkpt-other-inferior.exp: inf 2: set breakpoint ... For reference, on openSUSE Leap 16.0, with Tcl 8.6.15 the initial part of the problematic string looks like: ... [remote] Packet received: l!\000\000\000\000\000\000\000\000`ü÷ÿ\177\000... ... With Tcl 9.0, something (dejagnu/expect/gdb testsuite infrastructure) has problems with gdb IO containing non-utf-8 chars. Having said that, I don't think having chars like 'ü' in the debug output is particularly helpful. The easiest and most robust approach would be to just print octal escape sequences, but that would mean we no longer print 'l', which indicates to us what kind of qXfer reply we're looking at [1]. Reimplement function escape_buffer in gdb/remote.c, to print c_isprint chars like the actual chars, and others like octal escape sequences, getting us instead: ... [remote] Packet received: \ l!\000\000\000\000\000\000\000\000`\374\367\377\177\000... ... Note that this is ambiguous, because one char '\0' and 4 chars '\\' '0' '0' '0' are printed the same: \000, but I guess that's a pre-existing problem. This also fixes test-case gdb.python/py-send-packet.exp, where we run into a similar problem with the "Sending packet:" line. Tested on x86_64-linux, with Tcl 9.0.2 and 8.6.15. A v1 submitted was submitted here [2]. Changes in v2: - use c_isprint instead of std::isprint - use string_appendf instead of std::ostringstream Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=34012 [1] https://sourceware.org/gdb/current/onlinedocs/gdb.html/General-Query-Packets.html#index-qXfer-packet [2] v1 https://sourceware.org/pipermail/gdb-patches/2026-March/226110.html --- gdb/remote.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/gdb/remote.c b/gdb/remote.c index e84a0dc578b..8c3d60bd326 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -10509,15 +10509,27 @@ remote_target::remote_serial_send_break () } /* Return a string representing an escaped version of BUF, of len N. - E.g. \n is converted to \\n, \t to \\t, etc. */ + E.g. '\0' is converted to "\000", etc. */ static std::string escape_buffer (const char *buf, int n) { - string_file stb; + std::string str; - stb.putstrn (buf, n, '\\'); - return stb.release (); + for (int i = 0; i < n; ++i) + { + char c = buf[i]; + if (c_isprint (c)) + { + str += c; + continue; + } + + /* Append 3-wide leading zero octal \ooo. */ + string_appendf (str, "\\%03hho", c); + } + + return str; } int base-commit: c3d4baadd233635c13c306d9fdff3342710633ed -- 2.51.0