From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 0eGeLM4ssGncwyEAWB0awg (envelope-from ) for ; Tue, 10 Mar 2026 10:38: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=DxGaWeIU; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=axmH0LRi; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=DxGaWeIU; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=axmH0LRi; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id B10201E089; Tue, 10 Mar 2026 10:38: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 4E35C1E089 for ; Tue, 10 Mar 2026 10:38:05 -0400 (EDT) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 51C354B9DB49 for ; Tue, 10 Mar 2026 14:38:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 51C354B9DB49 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=DxGaWeIU; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=axmH0LRi; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=DxGaWeIU; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=axmH0LRi 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 D80C64B9DB44 for ; Tue, 10 Mar 2026 14:36:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D80C64B9DB44 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 D80C64B9DB44 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=1773153397; cv=none; b=xV3n8e4JOqij1xZFqBbF9ixecRdjnSV7nwxJWVz4lKLOCIG05PkySylhoG0DDVoR05nGFcBCqNV+Yzu8tltz7Vf/hjwaIcKtiBeyUluwYssv8d5H4eCP6g6mN+3b6c3kBybccLl0aX7DsoGKb+WiFQYQH35Jpl44DtRjH1KgQcM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1773153397; c=relaxed/simple; bh=IuCFZ5evOZqq28nDUBTzMacybzMWp7t4I1PwlwJsUzE=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=eOQt7hqR88NpySu6IVRHxnJXa3SgCTrWukKVHilAhI3jCPNV5XUGLA1tsXC3LPyZmYBvQxK/VHoml2Z+fhuEAX67lh8/ixrs1SQpYGLbpYrS8+9+rxrJIO8z31TlZ++4JFcFyUOciUjDqvEvUPXY8d+DyLbLECwO812LDV2lSgM= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D80C64B9DB44 Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104: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 B82233F899 for ; Tue, 10 Mar 2026 14:36:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1773153395; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=AVPIfBDQKygqIh07IJUF3J//YRv8lLsJ9kR1CZow41o=; b=DxGaWeIUgAve4kuFFqh28+axxq6OknkcVJVXLi+Ft5Y1WqoP0ASlapPukLeA8hLdDZE9S0 31i2U5/l2ksYeumm7N1WaCzC10TIiDJOEgk+LcPleQs4Kkb/2Eb8AYZgZh8ETa6ZUaxLsy 4kwLio2siC6gKtmA6ND+8FtUf1UrjwA= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1773153395; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=AVPIfBDQKygqIh07IJUF3J//YRv8lLsJ9kR1CZow41o=; b=axmH0LRiYcw6BLqVI1ugelA0GJXXf3DtzQRHqGYwMTAxUywntc5j6sf6fJyc6vBGvIehAm 2E4Kbv6lAf+yTlAA== Authentication-Results: smtp-out1.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=DxGaWeIU; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=axmH0LRi DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1773153395; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=AVPIfBDQKygqIh07IJUF3J//YRv8lLsJ9kR1CZow41o=; b=DxGaWeIUgAve4kuFFqh28+axxq6OknkcVJVXLi+Ft5Y1WqoP0ASlapPukLeA8hLdDZE9S0 31i2U5/l2ksYeumm7N1WaCzC10TIiDJOEgk+LcPleQs4Kkb/2Eb8AYZgZh8ETa6ZUaxLsy 4kwLio2siC6gKtmA6ND+8FtUf1UrjwA= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1773153395; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=AVPIfBDQKygqIh07IJUF3J//YRv8lLsJ9kR1CZow41o=; b=axmH0LRiYcw6BLqVI1ugelA0GJXXf3DtzQRHqGYwMTAxUywntc5j6sf6fJyc6vBGvIehAm 2E4Kbv6lAf+yTlAA== 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 A1A913F4DC for ; Tue, 10 Mar 2026 14:36:35 +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 fIEfJnMssGmNHgAAD6G6ig (envelope-from ) for ; Tue, 10 Mar 2026 14:36:35 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH] [gdb/record] Fix syscall exit recording for arm Date: Tue, 10 Mar 2026 15:36:35 +0100 Message-ID: <20260310143635.1091164-1-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Action: no action X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; MIME_TRACE(0.00)[0:+]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:104:10:150:64:97:from]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_ONE(0.00)[1]; ARC_NA(0.00)[]; RCVD_TLS_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.de:+]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from]; TO_DN_NONE(0.00)[]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:106:10:150:64:167:received]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; RCVD_VIA_SMTP_AUTH(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:dkim, suse.de:mid, imap1.dmz-prg2.suse.org:helo, imap1.dmz-prg2.suse.org:rdns] X-Rspamd-Queue-Id: B82233F899 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 [ Submitted earlier [1] with $subject: "[PATCH] [gdb/record] Fix syscall recording for arm". ] On arm-linux, I run into: ... (gdb) continue^M Continuing.^M The next instruction is syscall exit_group. It will make the program exit. \ Do you want to stop the program?([y] or n) yes^M Process record does not support instruction 0xdf00 at address 0xf7e8f984.^M Process record: failed to record execution log.^M ^M Program stopped.^M __libc_do_syscall () at libc-do-syscall.S:46^M warning: 46 libc-do-syscall.S: No such file or directory^M (gdb) FAIL: gdb.reverse/sigall-reverse.exp: continue to signal exit ... The problem is this bit of code here in decode_insn: ... ret = thumb2_record_decode_insn_handler (arm_record); if (ret != ARM_RECORD_SUCCESS) { arm_record_unsupported_insn (arm_record); ret = -1; } ... where ret == 1 is mapped to -1. The 1 is returned by arm_linux_syscall_record and is meant to be interpreted using this categorization: - res < 0: Process record: failed to record execution log. - res == 0: No failure. - res > 0: Process record: inferior program stopped. But the port interprets 1 as ARM_RECORD_FAILURE: ... enum arm_record_result { ARM_RECORD_SUCCESS = 0, ARM_RECORD_FAILURE = 1 }; ... We could fix this confusion this by: - adding an ARM_RECORD_UNKNOWN = 2, and - applying translations at the appropriate points, translating: - ARM_RECORD_UNKNOWN into 1 and vice versa, - ARM_RECORD_FAILURE into -1 and vice versa, similar to what we did for aarch64 and loongarch. But it seems easier to adopt a go-with-the-flow approach, defining ARM_RECORD_FAILURE as -1, freeing up the 1 for ARM_RECORD_UNKNOWN = 1. Then the aforementioned FAIL is fixed by simply doing: ... if (ret == ARM_RECORD_FAILURE) arm_record_unsupported_insn (arm_record); ... Tested on arm-linux. Reviewed-By: Guinevere Larsen [1] https://sourceware.org/pipermail/gdb-patches/2026-February/225372.html --- gdb/arm-tdep.c | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index dabae0aec0f..7dfde6649d9 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -11195,10 +11195,30 @@ sbo_sbz (uint32_t insn, uint32_t bit_num, uint32_t len, uint32_t sbo) return 1; } +/* The record infrastructure supports the following result values: + 1. res < 0: Process record: failed to record execution log. + 2. res == 0: No failure. + 3. res > 0: Process record: inferior program stopped. + + For aarch64, we have two distinct failure values: + - AARCH64_RECORD_FAILURE: + Process record: failed to record execution log. + - AARCH64_RECORD_UNSUPPORTED: + Process record does not support instruction $hex at address $hex. + Process record: failed to record execution log. + + For some reason for arm we don't have an UNSUPPORTED enum value, and + instead treat ARM_RECORD_FAILURE like an UNSUPPORTED enum value. */ + enum arm_record_result { + /* Process record does not support instruction $hex at address $hex. + Process record: failed to record execution log. */ + ARM_RECORD_FAILURE = -1, + /* No failure. */ ARM_RECORD_SUCCESS = 0, - ARM_RECORD_FAILURE = 1 + /* Process record: inferior program stopped. */ + ARM_RECORD_UNKNOWN = 1, }; enum arm_record_strx_t @@ -14576,11 +14596,8 @@ decode_insn (abstract_instruction_reader &reader, then we need not decode it anymore. */ ret = arm_handle_insn[insn_id] (arm_record); } - if (ret != ARM_RECORD_SUCCESS) - { - arm_record_unsupported_insn (arm_record); - ret = -1; - } + if (ret == ARM_RECORD_FAILURE) + arm_record_unsupported_insn (arm_record); } else if (THUMB_RECORD == record_type) { @@ -14588,11 +14605,8 @@ decode_insn (abstract_instruction_reader &reader, arm_record->cond = -1; insn_id = bits (arm_record->arm_insn, 13, 15); ret = thumb_handle_insn[insn_id] (arm_record); - if (ret != ARM_RECORD_SUCCESS) - { - arm_record_unsupported_insn (arm_record); - ret = -1; - } + if (ret == ARM_RECORD_FAILURE) + arm_record_unsupported_insn (arm_record); } else if (THUMB2_RECORD == record_type) { @@ -14605,11 +14619,8 @@ decode_insn (abstract_instruction_reader &reader, ret = thumb2_record_decode_insn_handler (arm_record); - if (ret != ARM_RECORD_SUCCESS) - { - arm_record_unsupported_insn (arm_record); - ret = -1; - } + if (ret == ARM_RECORD_FAILURE) + arm_record_unsupported_insn (arm_record); } else { base-commit: 1add703e09f0f8d073cde4af9d11cd59996e9763 -- 2.51.0