From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out2.suse.de (smtp-out2.suse.de [IPv6:2001:67c:2178:6::1d]) by sourceware.org (Postfix) with ESMTPS id 29A653858D39 for ; Mon, 27 Mar 2023 11:48:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 29A653858D39 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 5DB451FDBC for ; Mon, 27 Mar 2023 11:48:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1679917729; 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=264N4wQUKJwD05HD7RyrYk9hLAJTzP6RoTVbvJ1ZguU=; b=VpqmTfucdwptCTCaHukqx/fVnd1wGUjN8g+//LIeLilZNGY1q8N6u4YoKPkjcxioDliJT9 j9aGxoKv9HjQtTK0KnPkdIIQ+bWVbpMfFm7GhYTQHvRKBKoiQL2UjXruF79KTu1ZP9XR7M qLEmoG05YhakDulgD94i41HMcLHGzrE= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1679917729; 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=264N4wQUKJwD05HD7RyrYk9hLAJTzP6RoTVbvJ1ZguU=; b=NUIjMLxPWdUqC80AI+/XM5KUyYwUO7Nohp/4HANM2EqLnpxKTJEKAkhYzG4kWZ10THkn31 4G4LBUCGGBrZUpBg== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 4829813482 for ; Mon, 27 Mar 2023 11:48:49 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id 8RI1EKGCIWSaNAAAMHmgww (envelope-from ) for ; Mon, 27 Mar 2023 11:48:49 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [pushed] [gdb/testsuite] Add test-case gdb.dlang/dlang-start-2.exp Date: Mon, 27 Mar 2023 13:48:48 +0200 Message-Id: <20230327114848.4567-1-tdevries@suse.de> X-Mailer: git-send-email 2.35.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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,KAM_SHORT,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 List-Id: For test-case gdb.dlang/dlang-start.exp, I run into: ... UNSUPPORTED: gdb.dlang/dlang-start.exp: require failed: can_compile d ... My distro has no support for gdc, but I'd like to have the test-case running and passing, so let's rewrite the test-case using dwarf assembly and add it alongside (rather than replacing it, because it's good to use actual compiler output if we have it available). My distro does have a package providing dmd, so let's mimic that debug info in the dwarf assembly. This gives us: ... (gdb) start ^M Temporary breakpoint 1 at 0x4004ab^M Starting program: dlang-start-2 ^M ^M Temporary breakpoint 1, 0x00000000004004ab in _Dmain ()^M ... The "_Dmain ()" should probably be "D main", I've filed PR30276 about that. Also add a "show language" to check that we automatically set the language correctly to D. Note that the dwarf assembly also describes main, otherwise the test-case doesn't function as regression test for commit 47fe57c9281 ("Fix "start" for D, Rust, etc"). Tested on x86_64-linux. --- gdb/testsuite/gdb.dlang/dlang-start-2.exp | 88 +++++++++++++++++++++++ gdb/testsuite/gdb.dlang/dmain.c | 31 ++++++++ 2 files changed, 119 insertions(+) create mode 100644 gdb/testsuite/gdb.dlang/dlang-start-2.exp create mode 100644 gdb/testsuite/gdb.dlang/dmain.c diff --git a/gdb/testsuite/gdb.dlang/dlang-start-2.exp b/gdb/testsuite/gdb.dlang/dlang-start-2.exp new file mode 100644 index 00000000000..db89ac8dd33 --- /dev/null +++ b/gdb/testsuite/gdb.dlang/dlang-start-2.exp @@ -0,0 +1,88 @@ +# Copyright (C) 2023 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Test "start" for D, dwarf assembly version. + +load_lib d-support.exp +load_lib dwarf.exp +require allow_d_tests dwarf2_support + +# This testcase verifies the behavior of the `start' command, which +# does not work when we use the gdb stub... +require !use_gdb_stub + +standard_testfile dmain.c -dw.S + +with_shared_gdb { + lassign [function_range _Dmain ${srcdir}/${subdir}/${srcfile}] \ + dmain_start dmain_length + + lassign [function_range main ${srcdir}/${subdir}/${srcfile}] \ + main_start main_length +} + +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + global dmain_start dmain_length + global main_start main_length + + cu { label cu_start } { + compile_unit { + {language @DW_LANG_D} + } { + module { + {name dmain} + } + subprogram { + {name "D main" } + {MIPS_linkage_name "_Dmain"} + {low_pc $dmain_start DW_FORM_addr} + {high_pc "$dmain_start + $dmain_length" DW_FORM_addr} + {external 1 flag_present} + } + subprogram { + {name "dmain._d_cmain!().main" } + {MIPS_linkage_name "main"} + {low_pc $main_start DW_FORM_addr} + {high_pc "$main_start + $main_length" DW_FORM_addr} + {external 1 flag_present} + } + } + } + + aranges {} cu_start { + arange {} $dmain_start $dmain_length + arange {} $main_start $main_length + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} + +# Verify that "start" lands inside the right procedure. +if {[gdb_start_cmd] < 0} { + unsupported "start failed" + return -1 +} + +# We should probably have "D main" instead of "_Dmain" here, filed PR30276 +# '[gdb/symtab] function name is _Dmain instead of "D main"' about that. +gdb_test "" \ + "in _Dmain \\(\\)" \ + "start" + +gdb_test "show language" {"auto; currently d".} diff --git a/gdb/testsuite/gdb.dlang/dmain.c b/gdb/testsuite/gdb.dlang/dmain.c new file mode 100644 index 00000000000..d4bded8a012 --- /dev/null +++ b/gdb/testsuite/gdb.dlang/dmain.c @@ -0,0 +1,31 @@ +/* Copyright 2023 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +int +_Dmain (void) +{ + asm ("_Dmain_label: .globl _Dmain_label"); + return 0; +} + +int +main (void) +{ + asm ("main_label: .globl main_label"); + int res = _Dmain (); + + return res; +} base-commit: 1770eca698ad0018cd504b9744306fc9928d9a86 -- 2.35.3