gdb/testsuite: split 'maint info sections' tests to a new file
authorAndrew Burgess <andrew.burgess@embecosm.com>
Fri, 5 Feb 2021 14:47:04 +0000 (14:47 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Thu, 11 Feb 2021 10:26:18 +0000 (10:26 +0000)
The next couple of patches are going to add more tests for the 'maint
info sections' command.  Rather than try to jam these tests into the
already quite long gdb.base/maint.c, this commit moves all of the
tests for 'maint info sections' into a new file.

I've updated the tests to make use of some newer testsuite constructs,
like -wrap and $gdb_test_name for gdb_test_multiple, but otherwise the
tests should not have changed with this commit.

gdb/testsuite/ChangeLog:

* gdb.base/maint-info-sections.exp: New file, content is moved
from gdb.base/maint.exp and cleaned up to use latest testsuite
techniques.
* gdb.base/maint.exp: Tests moved out to
gdb.base/maint-info-sections.exp.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/maint-info-sections.exp [new file with mode: 0644]
gdb/testsuite/gdb.base/maint.exp

index 43758c959fe94e240fb53fedecf82d6c1473fc8a..c2cc22254c15143f763471cfb2452fef37c1c869 100644 (file)
@@ -1,3 +1,11 @@
+2021-02-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * gdb.base/maint-info-sections.exp: New file, content is moved
+       from gdb.base/maint.exp and cleaned up to use latest testsuite
+       techniques.
+       * gdb.base/maint.exp: Tests moved out to
+       gdb.base/maint-info-sections.exp.
+
 2021-02-10  Simon Marchi  <simon.marchi@efficios.com>
 
        * gdb.multi/multi-target.exp.tcl (setup): Add "set sysroot" to
diff --git a/gdb/testsuite/gdb.base/maint-info-sections.exp b/gdb/testsuite/gdb.base/maint-info-sections.exp
new file mode 100644 (file)
index 0000000..6c41ff2
--- /dev/null
@@ -0,0 +1,127 @@
+# Copyright 1998-2021 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 <http://www.gnu.org/licenses/>.
+
+# Test just for the 'maintenance info sections' command.
+
+standard_testfile break.c break1.c
+
+if {[prepare_for_testing "failed to prepare" $testfile \
+        [list $srcfile $srcfile2] {debug nowarnings}]} {
+    return -1
+}
+
+if ![runto_main] then {
+    untested "maint info sections"
+    return -1
+}
+
+# Check that 'maint info sections' output looks correct.  When
+# checking the lines for each section we reject section names starting
+# with a '*' character, the internal *COM*, *UND*, *ABS*, and *IND*
+# sections should not be displayed in this output.
+set seen_header false
+set seen_a_section false
+gdb_test_multiple "maint info sections" "general output check" {
+    -re "Exec file:\r\n\[\t ]+`\[^'\]+', file type \[^.\]+\.\r\n" {
+       set seen_header true
+       exp_continue
+    }
+    -re "^ \\\[\[0-9\]+\\\]\[\t \]+$hex->$hex at $hex: \[^*\r\]+\r\n" {
+       set seen_a_section true
+       exp_continue
+    }
+    -re "^$gdb_prompt $" {
+       gdb_assert { $seen_header && $seen_a_section }
+       pass $gdb_test_name
+    }
+}
+
+# It'd be nice to check for every possible section.  However, that's
+# problematic, since the relative ordering wanders from release to
+# release of the compilers.  Instead, we'll just check for two
+# sections which appear to always come out in the same relative
+# order.  (If that changes, then we should just check for one
+# section.)
+#
+# And by the way: This testpoint will break for PA64, where a.out's
+# are ELF files.
+
+# Standard GNU names.
+set text_section ".text"
+set data_section ".data"
+
+gdb_test_multiple "maint info sections" "" {
+    -re -wrap "Exec file:\r\n.*${binfile}., file type.*ER_RO.*" {
+       # Looks like RealView which uses different section names.
+       set text_section ER_RO
+       set data_section ER_RW
+       pass "maint info sections"
+    }
+    -re -wrap "Exec file:\r\n.*${binfile}., file type.*neardata.*" {
+       # c6x doesn't have .data section.  It has .neardata and .fardata section.
+       set data_section ".neardata"
+       pass "maint info sections"
+    }
+    -re -wrap "Exec file:\r\n.*${binfile}., file type.*" {
+       pass "maint info sections"
+    }
+}
+
+# Test for new option: maint info sections <section name>
+# If you don't have a .text section, this will require tweaking.
+
+gdb_test_multiple "maint info sections $text_section" "" {
+    -re -wrap " \\.bss .*" {
+       fail $gdb_test_name
+    }
+    -re -wrap " $data_section .*" {
+       fail $gdb_test_name
+    }
+    -re -wrap " $text_section .*" {
+       pass $gdb_test_name
+    }
+}
+
+# Test for new option: CODE section flag
+# If your data section is tagged CODE, xfail this test.
+
+gdb_test_multiple "maint info sections CODE" "" {
+    -re -wrap " $data_section .*" {
+       fail $gdb_test_name
+    }
+    -re -wrap " $text_section .*" {
+       pass $gdb_test_name
+    }
+}
+
+# Test for new option: DATA section flag
+# If your text section is tagged DATA, xfail this test.
+#
+# The "maint info sections DATA" test is marked for XFAIL on Windows,
+# because Windows has text sections marked DATA.
+setup_xfail "*-*-*cygwin*"
+setup_xfail "*-*-*mingw*"
+
+gdb_test_multiple "maint info sections DATA" "" {
+    -re -wrap " $text_section .*" {
+       fail $gdb_test_name
+    }
+    -re -wrap " $data_section .*" {
+       pass $gdb_test_name
+    }
+    -re -wrap " .rodata .*" {
+       pass $gdb_test_name
+    }
+}
index 4b5b03919718f9f5dde568038d3ea9b8204716f0..b418c023d735f20b2100148660b267783583bb15 100644 (file)
@@ -40,7 +40,6 @@
 #maintenance print unwind -- Print unwind table entry at given address
 #
 #
-#maintenance info sections -- List the BFD sections of the exec and core files
 #maintenance info breakpoints -- Status of all breakpoints
 #
 
@@ -118,23 +117,6 @@ if ![runto_main] then {
         perror "tests suppressed"
 }
 
-# Check that 'maint info sections' output looks correct.  When
-# checking the lines for each section we reject section names starting
-# with a '*' character, the internal *COM*, *UND*, *ABS*, and *IND*
-# sections should not be displayed in this output.
-set test "check maint info sections output"
-gdb_test_multiple "maint info sections" $test {
-    -re "Exec file:\r\n\[\t ]+`\[^'\]+', file type \[^.\]+\.\r\n" {
-       exp_continue
-    }
-    -re "^ \\\[\[0-9\]+\\\]\[\t \]+$hex->$hex at $hex: \[^*\r\]+\r\n" {
-       exp_continue
-    }
-    -re "^$gdb_prompt $" {
-       pass $test
-    }
-}
-
 # If we're using .gdb_index or .debug_names there will be no psymtabs.
 set have_gdb_index [ exec_has_index_section ${binfile} ]
 
@@ -417,75 +399,6 @@ if [istarget "hppa*-*-11*"] {
 set oldtimeout $timeout
 set timeout [expr $timeout + 300]
 
-# It'd be nice to check for every possible section.  However, that's
-# problematic, since the relative ordering wanders from release to
-# release of the compilers.  Instead, we'll just check for two
-# sections which appear to always come out in the same relative
-# order.  (If that changes, then we should just check for one
-# section.)
-#
-# And by the way: This testpoint will break for PA64, where a.out's
-# are ELF files.
-
-# Standard GNU names.
-set text_section ".text"
-set data_section ".data"
-
-gdb_test_multiple "maint info sections" "maint info sections" {
-    -re "Exec file:\r\n.*maint($EXEEXT)?., file type.*ER_RO.*$gdb_prompt $" {
-       # Looks like RealView which uses different section names.
-       set text_section ER_RO
-       set data_section ER_RW
-       pass "maint info sections"
-    }
-    -re "Exec file:\r\n.*maint($EXEEXT)?., file type.*neardata.*$gdb_prompt $" {
-       # c6x doesn't have .data section.  It has .neardata and .fardata section.
-       set data_section ".neardata"
-       pass "maint info sections"
-    }
-    -re "Exec file:\r\n.*maint($EXEEXT)?., file type.*$gdb_prompt $" {
-       pass "maint info sections"
-    }
-}
-
-# Test for new option: maint info sections <section name>
-# If you don't have a .text section, this will require tweaking.
-
-gdb_test_multiple "maint info sections $text_section" \
-    "maint info sections .text" {
-       -re ".* \\.bss .*$gdb_prompt $" {
-           fail "maint info sections .text"
-       }
-       -re ".* $data_section .*$gdb_prompt $" {
-           fail "maint info sections .text"
-       }
-       -re ".* $text_section .*$gdb_prompt $" {
-           pass "maint info sections .text"
-       }
-    }
-
-# Test for new option: CODE section flag
-# If your data section is tagged CODE, xfail this test.
-
-gdb_test_multiple "maint info sections CODE" "maint info sections CODE" {
-    -re ".* $data_section .*$gdb_prompt $" { fail "maint info sections CODE" }
-    -re ".* $text_section .*$gdb_prompt $" { pass "maint info sections CODE" }
-}
-
-# Test for new option: DATA section flag
-# If your text section is tagged DATA, xfail this test.
-#
-# The "maint info sections DATA" test is marked for XFAIL on Windows,
-# because Windows has text sections marked DATA.
-setup_xfail "*-*-*cygwin*"
-setup_xfail "*-*-*mingw*"
-
-gdb_test_multiple "maint info sections DATA" "maint info sections DATA" {
-    -re ".* $text_section .*$gdb_prompt $" { fail "maint info sections DATA" }
-    -re ".* $data_section .*$gdb_prompt $" { pass "maint info sections DATA" }
-    -re ".* .rodata .*$gdb_prompt $" { pass "maint info sections DATA" }
-}
-
 set bp_location6 [gdb_get_line_number "set breakpoint 6 here"]
 
 gdb_test_multiple "maint info breakpoints" "maint info breakpoints" {