diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2021-02-05 14:47:04 +0000 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2021-02-11 10:26:18 +0000 |
commit | f4be677293a68a4d54f978bccbd703c3909b5149 (patch) | |
tree | 99d521bc91afaf2dafda9d0ce9da961cbd934932 | |
parent | 1db66e348ac6fb5456dd76ddd700434e5cb5ba31 (diff) | |
download | gdb-f4be677293a68a4d54f978bccbd703c3909b5149.zip gdb-f4be677293a68a4d54f978bccbd703c3909b5149.tar.gz gdb-f4be677293a68a4d54f978bccbd703c3909b5149.tar.bz2 |
gdb/testsuite: split 'maint info sections' tests to a new file
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.
-rw-r--r-- | gdb/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/maint-info-sections.exp | 127 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/maint.exp | 87 |
3 files changed, 135 insertions, 87 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 43758c9..c2cc222 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -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 index 0000000..6c41ff2 --- /dev/null +++ b/gdb/testsuite/gdb.base/maint-info-sections.exp @@ -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 + } +} diff --git a/gdb/testsuite/gdb.base/maint.exp b/gdb/testsuite/gdb.base/maint.exp index 4b5b039..b418c02 100644 --- a/gdb/testsuite/gdb.base/maint.exp +++ b/gdb/testsuite/gdb.base/maint.exp @@ -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" { |