[gdb/testsuite] Fix gdb.base/style.exp with -m32

When running test-case gdb.base/style.exp with target board unix/-m32, we run
into (stripped styling from output, shortened file name):
...
(gdb) frame
    argv=0xffffc714) at src/gdb/testsuite/gdb.base/style.c:45
45        return some_called_function (); /* break here */
(gdb) FAIL: gdb.base/style.exp: frame when width=20
...
while with native we have instead:
...
(gdb) frame
    argv=0x7fffffffd478)
    at src/gdb/testsuite/gdb.base/style.c:45
45        return some_called_function (); /* break here */
(gdb) PASS: gdb.base/style.exp: frame when width=20
...

The problem is that due to argv having a different length for -m32, we get a
different layout, and the test-case doesn't accommodate for that.

Fix this by using a different regexp depending on the length of argv.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-01-14  Tom de Vries  <tdevries@suse.de>

	PR testsuite/24590
	* gdb.base/style.exp: Handle shorter argv in frame command output.
This commit is contained in:
Tom de Vries 2021-01-14 10:20:21 +01:00
parent 7e0d77ef5f
commit 116d0cf103
2 changed files with 48 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2021-01-14 Tom de Vries <tdevries@suse.de>
PR testsuite/24590
* gdb.base/style.exp: Handle shorter argv in frame command output.
2021-01-13 Andrew Burgess <andrew.burgess@embecosm.com>
PR gdb/26819

View File

@ -46,6 +46,16 @@ save_vars { env(TERM) } {
set main_line [gdb_get_line_number "break here"]
gdb_test "list $main_line,$main_line" "return.*some_called_function.*"
gdb_test_no_output "set style enabled off"
set argv ""
gdb_test_multiple "frame" "frame without styling" {
-re -wrap "main \\(argc=.*, (argv=$hex)\\).*style\\.c:\[0-9\].*" {
set argv $expect_out(1,string)
pass $gdb_test_name
}
}
gdb_test_no_output "set style enabled on"
set main_expr [style main function]
@ -60,7 +70,7 @@ save_vars { env(TERM) } {
gdb_test_no_output "set style sources off"
gdb_test "frame" \
"\r\n\[^\033\]*break here.*" \
"frame without styling"
"frame without sources styling"
gdb_test_no_output "set style sources on"
gdb_test "break -q main" "file $base_file_expr.*"
@ -71,20 +81,47 @@ save_vars { env(TERM) } {
# wrong spot with styling. There were different bugs at different
# widths, so try two.
foreach width {20 30} {
gdb_test_no_output "set width $width"
set argv_len [string length $argv]
if { $argv_len == 0 } {
continue
}
# There was also a bug where the styling could be wrong in the
# line listing; this is why the words from the source code are
# spelled out in the final result line of the test.
gdb_test "frame" \
set re1_styled \
[multi_line \
"#0 *$main_expr.*$arg_expr.*" \
".*$arg_expr.*" \
".* at .*$file_expr.*" \
"\[0-9\]+.*return.* break here .*"
] \
"frame when width=$width"
"\[0-9\]+.*return.* break here .*"]
set re2_styled \
[multi_line \
"#0 *$main_expr.*$arg_expr.*" \
".*$arg_expr.* at .*$file_expr.*" \
"\[0-9\]+.*return.* break here .*"]
# The length of the line containing argv containing:
# - 4 leading spaces
# - argv string
# - closing parenthesis
set line_len [expr 4 + $argv_len + 1]
if { $line_len > $width } {
# At on the next line.
set re_styled $re1_styled
} else {
# At on the same line as argv.
set re_styled $re2_styled
}
gdb_test_no_output "set width $width"
gdb_test "frame" $re_styled "frame when width=$width"
}
# Reset width back to 0.
gdb_test_no_output "set width 0"
if {$test_macros} {
set macro_line [gdb_get_line_number "\#define SOME_MACRO"]
gdb_test "info macro SOME_MACRO" \