Message ID | 20250123135802.9786-1-tdevries@suse.de |
---|---|
State | Committed |
Headers |
Return-Path: <gdb-patches-bounces~patchwork=sourceware.org@sourceware.org> X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 32BB23858C42 for <patchwork@sourceware.org>; Thu, 23 Jan 2025 14:03:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 32BB23858C42 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=vIkvGU5Z; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=kyqkbDMT; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=RK0SKd3M; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=RlwEuget X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by sourceware.org (Postfix) with ESMTPS id 164983858CD9 for <gdb-patches@sourceware.org>; Thu, 23 Jan 2025 13:57:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 164983858CD9 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 164983858CD9 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1737640666; cv=none; b=BGGPdoLooID9BthOkTtieK05ie/56R3HORlsS9FXTeJqNbSDBQz/ELMF9+jVwzG6ip8ZDngQDoLs0wKEkRbGhCzE/ep8APNwScNtzynAkn8Qk24osbCMCykAKqAhIHCRRw0joDyAhAM44TBIbSWMH2EqsqHU/8G1Z2UGk2utm6U= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1737640666; c=relaxed/simple; bh=0MkLRLQVynzMRk+3LrIY59koLamSo0EKzKqN1dYc6nk=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=JSVmaHiorov7OHCH/blUhP51aHHKjKv4zME+s20LeTIIRWfujw2kldjZPh9/jRvfC/sALjWSz/rvDSUWjzd+6H1Kz5s3PBPind7OTiwBBPsJJpuhFkQ2KM/TrYsiiVKgfWC6lX7N8KXkxEXX5lA8LiV0aOpkRCsfPJNOVVEvb+U= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 164983858CD9 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-out2.suse.de (Postfix) with ESMTPS id E241B1F365 for <gdb-patches@sourceware.org>; Thu, 23 Jan 2025 13:57:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1737640660; 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=xo1XIwuqELb5NF6nML5i4ZIxKppeGvhjZYkO7AnaW04=; b=vIkvGU5ZwPUt87zYT29np9P+vhxBhf86VziqdEGIMHwdJTM2a+fQR7Soa6TOD6DUP9TdAg ZAyGXkabMLTorUGBEzij2qzdNekc8F6d4TJhk4RUyT+Zp3URaAnVTHbHsdXw+OU8tV77ZL uz5c5OMy6osrWFVwkMCgvt/xd6h0S3E= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1737640660; 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=xo1XIwuqELb5NF6nML5i4ZIxKppeGvhjZYkO7AnaW04=; b=kyqkbDMTK+t/kldUZLzFn34MfV5hDf/YpIm8Ev23ZOSGFLCcD7a+JQs38rKVxh/yb23GHr /gFkF0Lf22ypqoDw== Authentication-Results: smtp-out2.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=RK0SKd3M; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=RlwEuget DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1737640659; 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=xo1XIwuqELb5NF6nML5i4ZIxKppeGvhjZYkO7AnaW04=; b=RK0SKd3M8CxMNmlhfpIL0CTVdLmVakpr0tOt+gvlORL0wt04hXIi1VVpoA+/8nieoV4OpB Tw/bMyYPUCfu/F6sfVV4C0TZTs/pNTZoE/j06zCA05SeeU2LL696fRcIWOpjlb6l+eV7y3 CVzlmYHHFdJ4n2usmisCkBOGrazvbFs= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1737640659; 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=xo1XIwuqELb5NF6nML5i4ZIxKppeGvhjZYkO7AnaW04=; b=RlwEugetcCdSBrKsdEk7anbTfEy68Z5Je5LtPg7Ymc0emmLzm7jk6UO7L+8FABtvHdGjWB 5qIqk8pWlsSlfLBA== 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 CE5851351A for <gdb-patches@sourceware.org>; Thu, 23 Jan 2025 13:57:39 +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 gJsZMdNKkmfsQgAAD6G6ig (envelope-from <tdevries@suse.de>) for <gdb-patches@sourceware.org>; Thu, 23 Jan 2025 13:57:39 +0000 From: Tom de Vries <tdevries@suse.de> To: gdb-patches@sourceware.org Subject: [PATCH] [gdb/testsuite] Fix gdb.ada/convvar_comp.exp on s390x-linux Date: Thu, 23 Jan 2025 14:58:02 +0100 Message-ID: <20250123135802.9786-1-tdevries@suse.de> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: E241B1F365 X-Spam-Level: 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)[]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:104:10:150:64:97:from]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FUZZY_BLOCKED(0.00)[rspamd.com]; MIME_TRACE(0.00)[0:+]; 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]; ASN(0.00)[asn:25478, ipnet:::/0, country:RU]; RCVD_VIA_SMTP_AUTH(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:dkim,suse.de:mid] X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Rspamd-Action: no action X-Spam-Score: -3.01 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list <gdb-patches.sourceware.org> List-Unsubscribe: <https://sourceware.org/mailman/options/gdb-patches>, <mailto:gdb-patches-request@sourceware.org?subject=unsubscribe> List-Archive: <https://sourceware.org/pipermail/gdb-patches/> List-Post: <mailto:gdb-patches@sourceware.org> List-Help: <mailto:gdb-patches-request@sourceware.org?subject=help> List-Subscribe: <https://sourceware.org/mailman/listinfo/gdb-patches>, <mailto:gdb-patches-request@sourceware.org?subject=subscribe> Errors-To: gdb-patches-bounces~patchwork=sourceware.org@sourceware.org |
Series |
[gdb/testsuite] Fix gdb.ada/convvar_comp.exp on s390x-linux
|
|
Checks
Context | Check | Description |
---|---|---|
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 | success | Build passed |
linaro-tcwg-bot/tcwg_gdb_build--master-arm | success | Build passed |
linaro-tcwg-bot/tcwg_gdb_check--master-arm | success | Test passed |
linaro-tcwg-bot/tcwg_gdb_check--master-aarch64 | success | Test passed |
Commit Message
Tom de Vries
Jan. 23, 2025, 1:58 p.m. UTC
When running test-case gdb.ada/convvar_comp.exp on s390x-linux, I get: ... (gdb) run ^M Starting program: pb16_063 ^M ^M Breakpoint 1, pck.break_me (item=...) at pck.adb:17^M 17 function Break_Me (Item : T) return Boolean is^M (gdb) print item.started^M Cannot access memory at address 0x0^M (gdb) FAIL: gdb.ada/convvar_comp.exp: print item.started ... This happens as follows. The parameter item is available in (DW_OP_fbreg: -168): ... <2><912>: Abbrev Number: 18 (DW_TAG_formal_parameter) <913> DW_AT_name : (indirect string, offset: 0x14ca): item <919> DW_AT_type : <0x929> <91d> DW_AT_location : 3 byte block: 91 d8 7e (DW_OP_fbreg: -168) ... and according to the rules of -O0, it's considered to be available after the prologue, which looks like this: ... 0000000001002998 <pck__break_me>: 1002998: b3 c1 00 2b ldgr %f2,%r11 100299c: b3 c1 00 0f ldgr %f0,%r15 10029a0: e3 f0 ff 58 ff 71 lay %r15,-168(%r15) 10029a6: b9 04 00 bf lgr %r11,%r15 10029aa: e3 20 b0 a0 00 24 stg %r2,160(%r11) ... To detect the prologue, gdb checks the line info, which looks like this: ... pck.adb: File name Line number Starting address View Stmt pck.adb 17 0x1002998 x pck.adb 17 0x1002998 1 x pck.adb 19 0x10029b0 x pck.adb 20 0x10029b8 x pck.adb - 0x10029c6 ... and gdb concludes that it's an empty prologue, so we stop at 0x1002998 and try to print parameter item, which is not available yet. For more details, see this comment in skip_prologue_using_sal: ... /* For languages other than assembly, treat two consecutive line entries at the same address as a zero-instruction prologue. ... The same thing happens on x86_64-linux, but it causes no problem there, because amd64_skip_prologue decides not to trust the result: ... struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr); /* LLVM backend (Clang/Flang) always emits a line note before the prologue and another one after. We trust clang and newer Intel compilers to emit usable line notes. */ if (post_prologue_pc && (cust != NULL && cust->producer () != nullptr && (producer_is_llvm (cust->producer ()) || producer_is_icc_ge_19 (cust->producer ())))) return std::max (start_pc, post_prologue_pc); ... because the producer is GCC. Work around this by setting a breakpoint on the first statement of pck.break_me instead. Tested on s390x-linux. --- gdb/testsuite/gdb.ada/convvar_comp.exp | 4 +++- gdb/testsuite/gdb.ada/convvar_comp/pck.adb | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) base-commit: b132f2344c0b58938bd11806ae2dd174b1b023e4
Comments
On 1/23/25 14:58, Tom de Vries wrote: > When running test-case gdb.ada/convvar_comp.exp on s390x-linux, I get: > ... > (gdb) run ^M > Starting program: pb16_063 ^M > ^M > Breakpoint 1, pck.break_me (item=...) at pck.adb:17^M > 17 function Break_Me (Item : T) return Boolean is^M > (gdb) print item.started^M > Cannot access memory at address 0x0^M > (gdb) FAIL: gdb.ada/convvar_comp.exp: print item.started > ... > > This happens as follows. > > The parameter item is available in (DW_OP_fbreg: -168): > ... > <2><912>: Abbrev Number: 18 (DW_TAG_formal_parameter) > <913> DW_AT_name : (indirect string, offset: 0x14ca): item > <919> DW_AT_type : <0x929> > <91d> DW_AT_location : 3 byte block: 91 d8 7e (DW_OP_fbreg: -168) > ... > and according to the rules of -O0, it's considered to be available after the > prologue, which looks like this: > ... > 0000000001002998 <pck__break_me>: > 1002998: b3 c1 00 2b ldgr %f2,%r11 > 100299c: b3 c1 00 0f ldgr %f0,%r15 > 10029a0: e3 f0 ff 58 ff 71 lay %r15,-168(%r15) > 10029a6: b9 04 00 bf lgr %r11,%r15 > 10029aa: e3 20 b0 a0 00 24 stg %r2,160(%r11) > ... > > To detect the prologue, gdb checks the line info, which looks like this: > ... > pck.adb: > File name Line number Starting address View Stmt > pck.adb 17 0x1002998 x > pck.adb 17 0x1002998 1 x > pck.adb 19 0x10029b0 x > pck.adb 20 0x10029b8 x > pck.adb - 0x10029c6 > ... > and gdb concludes that it's an empty prologue, so we stop at 0x1002998 and > try to print parameter item, which is not available yet. > > For more details, see this comment in skip_prologue_using_sal: > ... > /* For languages other than assembly, treat two consecutive line > entries at the same address as a zero-instruction prologue. > ... > > The same thing happens on x86_64-linux, but it causes no problem there, > because amd64_skip_prologue decides not to trust the result: > ... > struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr); > > /* LLVM backend (Clang/Flang) always emits a line note before the > prologue and another one after. We trust clang and newer Intel > compilers to emit usable line notes. */ > if (post_prologue_pc > && (cust != NULL > && cust->producer () != nullptr > && (producer_is_llvm (cust->producer ()) > || producer_is_icc_ge_19 (cust->producer ())))) > return std::max (start_pc, post_prologue_pc); > ... > because the producer is GCC. > > Work around this by setting a breakpoint on the first statement of > pck.break_me instead. > I've pushed this. Thanks, - Tom > Tested on s390x-linux. > --- > gdb/testsuite/gdb.ada/convvar_comp.exp | 4 +++- > gdb/testsuite/gdb.ada/convvar_comp/pck.adb | 2 +- > 2 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/gdb/testsuite/gdb.ada/convvar_comp.exp b/gdb/testsuite/gdb.ada/convvar_comp.exp > index d59a19a40c3..e7ff3baa624 100644 > --- a/gdb/testsuite/gdb.ada/convvar_comp.exp > +++ b/gdb/testsuite/gdb.ada/convvar_comp.exp > @@ -25,7 +25,9 @@ if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } > > clean_restart ${testfile} > > -if {![runto "break_me"]} { > +set bp_location [gdb_get_line_number "BREAK" "$testdir/pck.adb"] > + > +if {![runto pck.adb:$bp_location]} { > return > } > > diff --git a/gdb/testsuite/gdb.ada/convvar_comp/pck.adb b/gdb/testsuite/gdb.ada/convvar_comp/pck.adb > index be5d8d719d8..b7bf3efe8f9 100644 > --- a/gdb/testsuite/gdb.ada/convvar_comp/pck.adb > +++ b/gdb/testsuite/gdb.ada/convvar_comp/pck.adb > @@ -16,6 +16,6 @@ > package body Pck is > function Break_Me (Item : T) return Boolean is > begin > - return False; > + return False; -- BREAK > end Break_Me; > end Pck; > > base-commit: b132f2344c0b58938bd11806ae2dd174b1b023e4
diff --git a/gdb/testsuite/gdb.ada/convvar_comp.exp b/gdb/testsuite/gdb.ada/convvar_comp.exp index d59a19a40c3..e7ff3baa624 100644 --- a/gdb/testsuite/gdb.ada/convvar_comp.exp +++ b/gdb/testsuite/gdb.ada/convvar_comp.exp @@ -25,7 +25,9 @@ if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } clean_restart ${testfile} -if {![runto "break_me"]} { +set bp_location [gdb_get_line_number "BREAK" "$testdir/pck.adb"] + +if {![runto pck.adb:$bp_location]} { return } diff --git a/gdb/testsuite/gdb.ada/convvar_comp/pck.adb b/gdb/testsuite/gdb.ada/convvar_comp/pck.adb index be5d8d719d8..b7bf3efe8f9 100644 --- a/gdb/testsuite/gdb.ada/convvar_comp/pck.adb +++ b/gdb/testsuite/gdb.ada/convvar_comp/pck.adb @@ -16,6 +16,6 @@ package body Pck is function Break_Me (Item : T) return Boolean is begin - return False; + return False; -- BREAK end Break_Me; end Pck;