From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id +bXGK8fYy2mX0AAAWB0awg (envelope-from ) for ; Tue, 31 Mar 2026 10:23:03 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=NlfBZuyA; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id B05191E0BC; Tue, 31 Mar 2026 10:23:03 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H2,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 EE26D1E04F for ; Tue, 31 Mar 2026 10:23:02 -0400 (EDT) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 87DC84B3589F for ; Tue, 31 Mar 2026 14:23:02 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 87DC84B3589F Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=NlfBZuyA Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id 1CE834BB58CA for ; Tue, 31 Mar 2026 14:20:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1CE834BB58CA Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 1CE834BB58CA Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774966834; cv=none; b=Hvw/q3kgw863+PpFhxv30YUuXBKtGxngY4HtEB6PfJ1khDL4T1O5+lxmjav/GeZrIeN8Fwvsva3SHA9w8uSgF1Yi4+p93zgdTOdqEQJ/SMUudsiEt8FOqJaoxadRqfMW3sItrxnUCPDYGKCdHRCV6S0fgGMcjr+szdG/vkGpjAk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774966834; c=relaxed/simple; bh=SREcRSe3zUSaVGbeggGTnZFL/YHeXfhfx8gAWGGID/s=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=gs0LP2fo3KdLHKpvm4U7olWOdwAIKa3SfAAjoa6dl/gzmSi0pyHoIPYCC36XNLLhWyxjvQf9h0e1ZCRMKR29w+yWBSgxq7xaESds+8VGuVhGCqhI0eG0rq3kTVbVsVYGZ+QOHTeELhO5kadDtGZzxmVnusFTwu+fYz4lyst8Wc0= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1CE834BB58CA DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1774966833; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/mUmC5Ugo0VyjZa/WKbDKTIt5qu4/RMUYIiM/BJPbA0=; b=NlfBZuyAEdV7D6+hZ3NS3R9niOJMQ0rhXpNJ1Wap0p06BBr85FWgZF8GbYvo4aRGi3M0p9 ZuU6V6XKhdiDWxYg8pX6/dnCZInsWjrP9HvgLmMKBZk9VmVayRe3pslG/i6WK75hPkAWgj HE/wCCOX0+qT7L/M/pHhLTSp1jrOrpU= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-100-AzQnOPPFNFOA7wKEqhj4Uw-1; Tue, 31 Mar 2026 10:20:25 -0400 X-MC-Unique: AzQnOPPFNFOA7wKEqhj4Uw-1 X-Mimecast-MFC-AGG-ID: AzQnOPPFNFOA7wKEqhj4Uw_1774966823 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-485c45885e6so46273775e9.0 for ; Tue, 31 Mar 2026 07:20:23 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774966822; x=1775571622; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=/mUmC5Ugo0VyjZa/WKbDKTIt5qu4/RMUYIiM/BJPbA0=; b=Un82TZBNtHjvyN5aoBHAR/03HOGVhzurn8xbe8wtK4YwWJHDwvoJg9udou3s8nYFZf jCKp5g3KxTjcujrb6viKwl/n3vx0Ltte9FSqFDpzMV3aqUookqbtwoXj6XHxs++yP+IV 9V6YVPQJ5Bxa9b1FJZWxU8slTBUFogo1SHUAPkTQCn01ehy8YY89mKRwy20iqAieWiUc nQJ8tCLGHDPMk/o6RbyjPCLG48QOpMNCjUkZ+YmNRORtIIbHZDNDzFc/vxHerlocbnN4 UikHN0y0p4Tis69Jqml40jAXVvrF+lQOhuskC4qwwrS32iorTBgADXMU65/rXFqpuoPk 0icw== X-Gm-Message-State: AOJu0Yz4+eqbQjnIEPshkAgfau/ubRZE5ZJUvXpyB2KjidqQFq2WxE16 7F2r95iisMcLRHu56ZYsc0UK40ifnV13wPHI4ZbJlVVLljXlBnUoAOs+jHyW4nztSJiewD9pUFD l9C1gEO6KbEYPWtBUY6w3JUg5w+KAnKvaqFjNta/fydlDYOFZ1vcmyjHNuO5VveUJAkjgCy/D5+ i71v2vJPOMb4U5419n7Zx5YeXnKVnjVfBO0CGrkeAXGv56Smg= X-Gm-Gg: ATEYQzzIvLx5mVgFf3Qsgyp2i3Ohwe678DNr4paBacGwwM2MaUfnvWV5UXITL95JL44 eB+h2O98e42m/I1mRc8FOJQpGZUE0YmBgRX8DJj8Omw/5LYHosQ8O1KDQ0CUjY1Oa9Y/7EfvmAL TQIOryZG61r1DSEAxftbUO6pPqm4Zu/VqPb34LmlX/2DrNXnSaab5xFpkcmOVGILUSgnJJtSn4y rJ3zafcf3Oe3a5OStHPbYGZneuXtwyxlAlsQjdBxS9jbVb6Ol75TmQefDuhnr6pT4yDmfzU61nR 1suRTUxuvrmzKYNiurzUopKbm2S8iNipG1InL+z6RxNL+cdKR1EbywlY/vDdeWDLyxLqIVVHQxS tujOQfbdyqP/LrtGF X-Received: by 2002:a05:600c:3e15:b0:486:f9aa:2b57 with SMTP id 5b1f17b1804b1-48727f7be10mr312879745e9.16.1774966822430; Tue, 31 Mar 2026 07:20:22 -0700 (PDT) X-Received: by 2002:a05:600c:3e15:b0:486:f9aa:2b57 with SMTP id 5b1f17b1804b1-48727f7be10mr312878425e9.16.1774966821772; Tue, 31 Mar 2026 07:20:21 -0700 (PDT) Received: from localhost ([31.111.84.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4887e822078sm48725365e9.9.2026.03.31.07.20.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 31 Mar 2026 07:20:21 -0700 (PDT) From: Andrew Burgess To: gdb-patches@sourceware.org Cc: Andrew Burgess Subject: [PATCH 1/2] gdb/testsuite: modernise the gdb.python/py-section-script.exp test Date: Tue, 31 Mar 2026 15:20:17 +0100 Message-Id: <105f5de488223635a75855e52a56a55499c6f3aa.1774966728.git.aburgess@redhat.com> X-Mailer: git-send-email 2.25.4 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: mLJmo-TL8i5jqgM8tTRnc4QE1xBxPsbebWov1s0mSD4_1774966823 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true 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 I want to add more test cases to gdb.python/py-section-script.exp, so this commit is an initial cleanup of the test script. The primary change here is that we no longer overwrite the test executable. The test has a loop, previously we'd overwrite the test executable on each iteration, now we create a new test executable on each iteration. Additionally, at the end of the loop we strip the debug from the executable and run some additional tests, I now create a copy of the executable and strip the debug from that instead, this leaves the unstripped executable around if we need to rerun tests outside of the testsuite. Then I've made some other small clean ups, making use of $gdb_test_name, and the -wrap flag within gdb_test_multiple. I've made use of require is_elf_target. And I've factored out some code to set the auto-load safe path as in some places we were switching the path separator, but in others we just assumed ":". The helper proc always uses ";" for mingw. I also added a full 'info auto-load python-scripts' check after loading the stripped binary. Previously we only actually checked one of the scripts had been loaded correctly. --- .../gdb.python/py-section-script.exp | 128 ++++++++++-------- 1 file changed, 69 insertions(+), 59 deletions(-) diff --git a/gdb/testsuite/gdb.python/py-section-script.exp b/gdb/testsuite/gdb.python/py-section-script.exp index f5f85b5202a..a3b9631ade7 100644 --- a/gdb/testsuite/gdb.python/py-section-script.exp +++ b/gdb/testsuite/gdb.python/py-section-script.exp @@ -16,18 +16,7 @@ # This file is part of the GDB testsuite. It tests automagic loading of # scripts specified in the .debug_gdb_scripts section. -# This test can only be run on targets which support ELF and use gas. -# For now pick a sampling of likely targets. -if {![istarget *-*-linux*] - && ![istarget *-*-gnu*] - && ![istarget *-*-elf*] - && ![istarget *-*-openbsd*] - && ![istarget arm*-*-eabi*] - && ![istarget powerpc-*-eabi*]} { - verbose "Skipping py-section-script.exp because of lack of support." - return -} - +require is_elf_target require allow_python_tests standard_testfile @@ -39,7 +28,25 @@ set remote_python_file [gdb_remote_download host \ set quoted_name "\"$remote_python_file\"" +# Helper proc to 'set auto-load safe-path ...'. Build the new path value by +# joining ARGS together with an appropriate path separator character. +proc set_auto_load_safe_path { args } { + if {[ishost *-*-mingw*]} { + set remote_pathsep ";" + } else { + set remote_pathsep ":" + } + + set safe_path [join $args $remote_pathsep] + + gdb_test_no_output "set auto-load safe-path $safe_path" \ + "set auto-load safe-path" +} + foreach_with_prefix variant {plain compressed} { + set the_testfile $testfile-$variant + set the_binfile [standard_output_file $the_testfile] + set flags [list debug \ additional_flags=-I${srcdir}/../../include \ additional_flags=-DSCRIPT_FILE=$quoted_name] @@ -48,18 +55,18 @@ foreach_with_prefix variant {plain compressed} { lappend flags additional_flags=-Wl,--compress-debug-sections=zlib-gabi } - if {[build_executable $testfile.exp $testfile $srcfile $flags] == -1} { + if {[build_executable "build executable" $the_testfile $srcfile $flags] == -1} { return } if {$variant == "compressed"} { set objdump_program [gdb_find_objdump] - set debug_sect [exec $objdump_program -j .debug_gdb_scripts -s "$binfile"] + set debug_sect [exec $objdump_program -j .debug_gdb_scripts -s "$the_binfile"] set debug_sect_decompressed [exec $objdump_program -j .debug_gdb_scripts \ - -s "$binfile" --decompress] + -s "$the_binfile" --decompress] if {$debug_sect == $debug_sect_decompressed} { - fail ".debug_gdb_scripts in $binfile is not compressed" + fail ".debug_gdb_scripts in $the_binfile is not compressed" } } @@ -69,16 +76,15 @@ foreach_with_prefix variant {plain compressed} { gdb_test_no_output "set auto-load safe-path /restricted" \ "set restricted auto-load safe-path" - gdb_load ${binfile} + gdb_load ${the_binfile} # Verify gdb did not load the scripts. - set test_name "verify scripts not loaded" - gdb_test_multiple "info auto-load python-scripts" "$test_name" { - -re "Yes.*${testfile}.py.*Yes.*inlined-script.*$gdb_prompt $" { - fail "$test_name" + gdb_test_multiple "info auto-load python-scripts" "verify scripts not loaded" { + -re -wrap "Yes.*${testfile}.py.*Yes.*inlined-script.*" { + fail $gdb_test_name } - -re "No.*${testfile}.py.*No.*inlined-script.*$gdb_prompt $" { - pass "$test_name" + -re -wrap "No.*${testfile}.py.*No.*inlined-script.*" { + pass $gdb_test_name } } @@ -89,31 +95,23 @@ foreach_with_prefix variant {plain compressed} { # Get the name of the binfile on the host; on a remote host this means # stripping off any directory prefix. if {[is_remote host]} { - set remote_binfile [file tail ${binfile}] + set remote_binfile [file tail ${the_binfile}] } else { - set remote_binfile ${binfile} + set remote_binfile ${the_binfile} } - if {[ishost *-*-mingw*]} { - set remote_pathsep ";" - } else { - set remote_pathsep ":" - } - gdb_test_no_output "set auto-load safe-path ${remote_python_file}${remote_pathsep}${remote_binfile}" \ - "set auto-load safe-path" - gdb_load ${binfile} - + set_auto_load_safe_path $remote_python_file $remote_binfile + gdb_load ${the_binfile} # Verify gdb loaded each script and they appear once in the list. - set test_name "verify scripts loaded" - gdb_test_multiple "info auto-load python-scripts" "$test_name" { - -re "Yes.*${testfile}.py.*Yes.*inlined-script.*$gdb_prompt $" { - pass "$test_name" + gdb_test_multiple "info auto-load python-scripts" "verify scripts loaded" { + -re -wrap "Yes.*${testfile}.py.*Yes.*inlined-script.*" { + pass $gdb_test_name } - -re "${testfile}.py.*${testfile}.py.*$gdb_prompt $" { - fail "$test_name" + -re -wrap "${testfile}.py.*${testfile}.py.*" { + fail $gdb_test_name } - -re "inlined-script.*inlined-script.*$gdb_prompt $" { - fail "$test_name" + -re -wrap "inlined-script.*inlined-script.*" { + fail $gdb_test_name } } @@ -128,7 +126,7 @@ foreach_with_prefix variant {plain compressed} { return } - gdb_test "b [gdb_get_line_number {break to inspect} ${testfile}.c ]" \ + gdb_test "b [gdb_get_line_number {break to inspect}]" \ ".*Breakpoint.*" gdb_test "continue" ".*Breakpoint.*" @@ -137,13 +135,17 @@ foreach_with_prefix variant {plain compressed} { gdb_test "test-cmd 1 2 3" "test-cmd output, arg = 1 2 3" - # eu-strip creates NOBITS .debug_gdb_scripts sections in the debug files. - # Make sure those are ignored silently. + # eu-strip creates NOBITS .debug_gdb_scripts sections in the debug + # files, and leaves a useful copy of .debug_gdb_scripts in the + # executable. Make sure the NOBITS copy in the separate debug file is + # ignored silently. + with_test_prefix "sepdebug from eu-strip" { + clean_restart - with_test_prefix "sepdebug" { - gdb_exit + set eu_strip_binfile [standard_output_file ${the_testfile}-eu-strip] + file copy -force $the_binfile $eu_strip_binfile - set result [catch {exec eu-strip -g -f ${binfile}.debug ${binfile}} output] + set result [catch {exec eu-strip -g -f ${eu_strip_binfile}.debug ${eu_strip_binfile}} output] verbose "result is $result" verbose "output is $output" if {$result != 0 || $output != ""} { @@ -151,18 +153,26 @@ foreach_with_prefix variant {plain compressed} { return } - gdb_start - gdb_reinitialize_dir $srcdir/$subdir - - gdb_test_no_output "set auto-load safe-path ${remote_python_file}:${binfile}" \ - "set auto-load safe-path" - set test "load sepdebug" - gdb_test_multiple "file $binfile" $test { - -re "\r\nwarning: Invalid entry in \\.debug_gdb_scripts section.*\r\n$gdb_prompt $" { - fail $test + set_auto_load_safe_path $remote_python_file $eu_strip_binfile + gdb_test_multiple "file $eu_strip_binfile" "load sepdebug" { + -re -wrap "\r\nwarning: Invalid entry in \\.debug_gdb_scripts section.*" { + fail $gdb_test_name } - -re "\r\n$gdb_prompt $" { - pass $test + -re -wrap "" { + pass $gdb_test_name + } + } + + # Verify gdb loaded each script and they appear once in the list. + gdb_test_multiple "info auto-load python-scripts" "verify scripts loaded" { + -re -wrap "Yes.*${testfile}.py.*Yes.*inlined-script.*" { + pass $gdb_test_name + } + -re -wrap "${testfile}.py.*${testfile}.py.*" { + fail $gdb_test_name + } + -re -wrap "inlined-script.*inlined-script.*" { + fail $gdb_test_name } } -- 2.25.4