Re: [PATCH v2 2/5] Further cleanup/modernization of gdb.base/commands.exp

Pedro Alves
2016-11-09T15:59:06Z

On 11/09/2016 03:56 PM, Pedro Alves wrote:
> On 11/09/2016 03:02 AM, Simon Marchi wrote:
>> On 2016-11-08 19:19, Pedro Alves wrote:
>>> - Use multi_line for matching multi-line GDB output.
>>>
>>> - Add a multi_line_input variant of multi_line to build GDB input and
>>> use it throughout.
>>>
>>> (The two changes above make the tests much more readable, IMO.)
>>>
>>> - Remove gdb_stop_suppressing_tests uses.
>>>
>>> - tighten a few regexps.
>>>
>>> - Replace send_gdb/gdb_expect with gdb_test_multiple and simplify,
>>> making pass/fail messages the same.
>>
>> I agree, the test is now much more readable.
>>
>>> + gdb_test \
>>> + [multi_line_input \
>>> + "while \$foo > 0" \
>>> + " p/x 0xfeedface" \
>>> + " set \$foo -= 1" \
>>> + "end"] \
>>> + [multi_line \
>>> + "\\\$\[0-9\]* = 0xfeedface\[^\n\]*" \
>>> + "\\\$\[0-9\]* = 0xfeedface\[^\n\]*" \
>>> + "\\\$\[0-9\]* = 0xfeedface\[^\n\]*" \
>>> + "\\\$\[0-9\]* = 0xfeedface\[^\n\]*" \
>>> + "\\\$\[0-9\]* = 0xfeedface"] \
>>> + "#1"
>>
>> In these instance, what is the [^\n] meant to match? Is it the \r? In
>> that case, multi_line matches it, so I think we can get rid of them
>> (throughout the file).
>>
>
> Indeed. I did that now, with the patchlet below, and the test
> still passes. Also found another place where we could use multi_line.

And I'm wondering whether this below as well would be a good idea,
or whether it'd obfuscate? If a good idea, maybe we'd put the new
variable in gdb.exp.

From 6ad38c7fd5a2f3c2937b5de4e94d87b86894873e Mon Sep 17 00:00:00 2001
From: Pedro Alves <palves@redhat.com>
Date: Wed, 9 Nov 2016 15:45:53 +0000
Subject: [PATCH] valnum

---
gdb/testsuite/gdb.base/commands.exp | 89 ++++++++++++++++++++++---------------
1 file changed, 54 insertions(+), 35 deletions(-)

diff --git a/gdb/testsuite/gdb.base/commands.exp b/gdb/testsuite/gdb.base/commands.exp
index c4bf425..f7909dc 100644
--- a/gdb/testsuite/gdb.base/commands.exp
+++ b/gdb/testsuite/gdb.base/commands.exp
@@ -33,8 +33,13 @@ proc runto_or_return {function} {
}
}

+# A regular expression that matches a value history number.
+# E.g., $1, $2, etc.
+set valnum_re "\\\$$decimal"
+
proc_with_prefix gdbvar_simple_if_test {} {
global gdb_prompt
+ global valnum_re

gdb_test_no_output "set \$foo = 0" "set foo"
# All this test should do is print 0xdeadbeef once.
@@ -45,7 +50,7 @@ proc_with_prefix gdbvar_simple_if_test {} {
"else" \
" p/x 0xdeadbeef" \
"end"] \
- "\\\$\[0-9\]* = 0xdeadbeef" \
+ "$valnum_re = 0xdeadbeef" \
"#1"

# All this test should do is print 0xfeedface once.
@@ -56,12 +61,13 @@ proc_with_prefix gdbvar_simple_if_test {} {
"else" \
" p/x 0xdeadbeef" \
"end"] \
- "\\\$\[0-9\]* = 0xfeedface" \
+ "$valnum_re = 0xfeedface" \
"#2"
}

proc_with_prefix gdbvar_simple_while_test {} {
global gdb_prompt
+ global valnum_re

gdb_test_no_output "set \$foo = 5" "set foo"
# This test should print 0xfeedface five times.
@@ -72,16 +78,17 @@ proc_with_prefix gdbvar_simple_while_test {} {
" set \$foo -= 1" \
"end"] \
[multi_line \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xfeedface"] \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xfeedface"] \
"#1"
}

proc_with_prefix gdbvar_complex_if_while_test {} {
global gdb_prompt
+ global valnum_re

gdb_test_no_output "set \$foo = 4" "set foo"
# This test should alternate between 0xdeadbeef and 0xfeedface two times.
@@ -96,15 +103,16 @@ proc_with_prefix gdbvar_complex_if_while_test {} {
" end" \
"end"] \
[multi_line \
- "\\\$\[0-9\]* = 0xdeadbeef" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xdeadbeef" \
- "\\\$\[0-9\]* = 0xfeedface"] \
+ "$valnum_re = 0xdeadbeef" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xdeadbeef" \
+ "$valnum_re = 0xfeedface"] \
"#1"
}

proc_with_prefix progvar_simple_if_test {} {
global gdb_prompt
+ global valnum_re

runto_or_return factorial

@@ -119,7 +127,7 @@ proc_with_prefix progvar_simple_if_test {} {
"else" \
" p/x 0xdeadbeef" \
"end"] \
- "\\\$\[0-9\]* = 0xdeadbeef" \
+ "$valnum_re = 0xdeadbeef" \
"#1"

# All this test should do is print 0xfeedface once.
@@ -130,12 +138,13 @@ proc_with_prefix progvar_simple_if_test {} {
"else" \
" p/x 0xdeadbeef" \
"end"] \
- "\\\$\[0-9\]* = 0xfeedface" \
+ "$valnum_re = 0xfeedface" \
"#2"
}

proc_with_prefix progvar_simple_while_test {} {
global gdb_prompt
+ global valnum_re

runto_or_return factorial

@@ -150,16 +159,17 @@ proc_with_prefix progvar_simple_while_test {} {
" set value -= 1" \
"end"] \
[multi_line \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xfeedface"] \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xfeedface"] \
"#1"
}

proc_with_prefix progvar_complex_if_while_test {} {
global gdb_prompt
+ global valnum_re

runto_or_return factorial

@@ -179,14 +189,16 @@ proc_with_prefix progvar_complex_if_while_test {} {
" end" \
"end"] \
[multi_line \
- "\\\$\[0-9\]* = 0xdeadbeef" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xdeadbeef" \
- "\\\$\[0-9\]* = 0xfeedface"] \
+ "$valnum_re = 0xdeadbeef" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xdeadbeef" \
+ "$valnum_re = 0xfeedface"] \
"#1"
}

proc_with_prefix if_while_breakpoint_command_test {} {
+ global valnum_re
+
runto_or_return factorial

# Don't depend upon argument passing, since most simulators don't
@@ -218,10 +230,10 @@ proc_with_prefix if_while_breakpoint_command_test {} {
gdb_test \
"continue" \
[multi_line \
- "\\\$\[0-9\]* = 0xdeadbeef" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xdeadbeef" \
- "\\\$\[0-9\]* = 0xfeedface"] \
+ "$valnum_re = 0xdeadbeef" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xdeadbeef" \
+ "$valnum_re = 0xfeedface"] \
"#1"
gdb_test "info break" "while.*set.*if.*p/x.*else.*p/x.*end.*"
}
@@ -282,6 +294,7 @@ proc_with_prefix breakpoint_command_test {} {
# Test a simple user defined command (with arguments)
proc_with_prefix user_defined_command_test {} {
global gdb_prompt
+ global valnum_re

gdb_test_no_output "set \$foo = 4" "set foo"

@@ -306,13 +319,16 @@ proc_with_prefix user_defined_command_test {} {
"" \
"enter commands"

+ global decimal
+ set valnum_re "\\\$$decimal"
+
gdb_test \
"mycommand \$foo" \
[multi_line \
- "\\\$\[0-9\]* = 0xdeadbeef" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xdeadbeef" \
- "\\\$\[0-9\]* = 0xfeedface"] \
+ "$valnum_re = 0xdeadbeef" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xdeadbeef" \
+ "$valnum_re = 0xfeedface"] \
"execute user-defined command"
gdb_test "show user mycommand" \
" while \\\$arg0.*set.* if \\\(\\\$arg0.*p/x.* else\[^\n\].*p/x.* end\[^\n\].* end\[^\n\].*" \
@@ -414,6 +430,7 @@ proc_with_prefix watchpoint_command_test {} {

proc_with_prefix test_command_prompt_position {} {
global gdb_prompt
+ global valnum_re

runto_or_return factorial

@@ -430,7 +447,7 @@ proc_with_prefix test_command_prompt_position {} {
"else" \
" p/x 0xdeadbeef" \
"end"] \
- "\\\$\[0-9\]* = 0xdeadbeef" \
+ "$valnum_re = 0xdeadbeef" \
"if test"

# Now let's test for the correct position of the '>' in gdb's
@@ -579,20 +596,22 @@ proc_with_prefix temporary_breakpoint_commands {} {
# Test that GDB can handle $arg0 outside of user functions without
# crashing.
proc_with_prefix stray_arg0_test { } {
+ global valnum_re
+
gdb_test "print \$arg0" \
- "\\\$\[0-9\]* = void" \
+ "$valnum_re = void" \
"#1"

gdb_test "if 1 == 1\nprint \$arg0\nend" \
- "\\\$\[0-9\]* = void" \
+ "$valnum_re = void" \
"#2"

gdb_test "print \$arg0 = 1" \
- "\\\$\[0-9\]* = 1" \
+ "$valnum_re = 1" \
"#3"

gdb_test "print \$arg0" \
- "\\\$\[0-9\]* = 1" \
+ "$valnum_re = 1" \
"#4"
}

--
2.5.5