diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2023-01-19 21:15:56 +0000 |
---|---|---|
committer | Maciej W. Rozycki <macro@embecosm.com> | 2023-01-19 21:15:56 +0000 |
commit | 77519ab324b0a417411ce0fd172aee0fa8349643 (patch) | |
tree | 121383c4ca5737cccead495dd1ad4dd1282e0030 /gdb/testsuite/gdb.base | |
parent | 76b58849c5fc433f71ad7ec18f9f47f782643bc6 (diff) | |
download | gdb-77519ab324b0a417411ce0fd172aee0fa8349643.zip gdb-77519ab324b0a417411ce0fd172aee0fa8349643.tar.gz gdb-77519ab324b0a417411ce0fd172aee0fa8349643.tar.bz2 |
GDB/testsuite: Expand for character string limiting options
Modify test cases that verify the operation of the array element limit
with character strings such that they are executed twice, once with the
`set print characters' option set to `elements' and the limit controlled
with the `set print elements' option, and then again with the limit
controlled with the `set print characters' option instead. Similarly
with the `-elements' and `-characters' options for the `print' command.
Additionally verify that said `print' command options combined yield the
expected result.
Verify correct $_gdb_setting and $_gdb_setting_str values for the `print
characters' setting, in particular the `void' value for the `elements'
default, which has no corresponding integer value exposed.
Add Guile and Python coverage for the `print characters' GDB setting.
There are new tests for Ada and Pascal, as the string printing code for
these languages is different than the generic string printing code used
by other languages. Modula2 also has different string printing code,
but (a) this is similar to Pascal, and (b) there are no existing modula2
tests written in Modula2, so I'm not sure how I'd even test the Modula2
string printing.
Co-Authored-By: Maciej W. Rozycki <macro@embecosm.com>
Approved-By: Simon Marchi <simon.marchi@efficios.com>
Diffstat (limited to 'gdb/testsuite/gdb.base')
-rw-r--r-- | gdb/testsuite/gdb.base/printcmds.exp | 68 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/setshow.exp | 22 |
2 files changed, 70 insertions, 20 deletions
diff --git a/gdb/testsuite/gdb.base/printcmds.exp b/gdb/testsuite/gdb.base/printcmds.exp index b29598f..c1adc78 100644 --- a/gdb/testsuite/gdb.base/printcmds.exp +++ b/gdb/testsuite/gdb.base/printcmds.exp @@ -449,13 +449,14 @@ proc test_print_all_chars {} { } # Test interaction of the number of print elements to print and the -# repeat count, set to the default of 10. +# repeat count, set to the default of 10. SETTING is the print +# setting to verify, either "elements" or "characters". -proc test_print_repeats_10 {} { +proc test_print_repeats_10_one { setting } { global gdb_prompt decimal for { set x 1 } { $x <= 16 } { incr x } { - gdb_test_no_output "set print elements $x" "elements $x repeats" + gdb_test_no_output "set print $setting $x" "$setting $x repeats" for { set e 1 } { $e <= 16 } {incr e } { set v [expr $e - 1] set command "p &ctable2\[${v}*16\]" @@ -495,11 +496,18 @@ proc test_print_repeats_10 {} { set xstr "${xstr}\[.\]\[.\]\[.\]" } set string " = \[(\]unsigned char \[*\]\[)\] <ctable2(\\+$decimal)?> ${a}${xstr}" - gdb_test "$command" "$string" "$command with print elements set to $x" + gdb_test "$command" "$string" "$command with print $setting set to $x" } } } +proc test_print_repeats_10 {} { + foreach_with_prefix setting { "elements" "characters" } { + test_print_repeats_10_one $setting + } + gdb_test_no_output "set print characters elements" +} + # This tests whether GDB uses the correct element content offsets # (relative to the complete `some_struct' value) when counting value # repetitions. @@ -512,7 +520,7 @@ proc test_print_repeats_embedded_array {} { "correct element repeats in array embedded at offset > 0" } -proc test_print_strings {} { +proc test_print_strings_one { setting } { global gdb_prompt decimal # We accept "(unsigned char *) " before the string. char vs. unsigned char @@ -520,35 +528,35 @@ proc test_print_strings {} { # Test that setting print elements unlimited doesn't completely suppress # printing; this was a bug in older gdb's. - gdb_test_no_output "set print elements 0" + gdb_test_no_output "set print $setting 0" gdb_test "p teststring" \ - " = (.unsigned char .. )?\"teststring contents\"" "p teststring with elements set to 0" - gdb_test_no_output "set print elements 1" + " = (.unsigned char .. )?\"teststring contents\"" "p teststring with $setting set to 0" + gdb_test_no_output "set print $setting 1" gdb_test "p teststring" \ - " = (.unsigned char .. )?\"t\"\\.\\.\\." "p teststring with elements set to 1" - gdb_test_no_output "set print elements 5" + " = (.unsigned char .. )?\"t\"\\.\\.\\." "p teststring with $setting set to 1" + gdb_test_no_output "set print $setting 5" gdb_test "p teststring" \ - " = (.unsigned char .. )?\"tests\"\\.\\.\\." "p teststring with elements set to 5" - gdb_test_no_output "set print elements 19" + " = (.unsigned char .. )?\"tests\"\\.\\.\\." "p teststring with $setting set to 5" + gdb_test_no_output "set print $setting 19" gdb_test "p teststring" \ - " = (.unsigned char .. )?\"teststring contents\"" "p teststring with elements set to 19" - gdb_test_no_output "set print elements 20" + " = (.unsigned char .. )?\"teststring contents\"" "p teststring with $setting set to 19" + gdb_test_no_output "set print $setting 20" gdb_test "p teststring" \ - " = (.unsigned char .. )?\"teststring contents\"" "p teststring with elements set to 20" + " = (.unsigned char .. )?\"teststring contents\"" "p teststring with $setting set to 20" - gdb_test "p -elements 1 -- teststring" \ + gdb_test "p -$setting 1 -- teststring" \ " = (.unsigned char .. )?\"t\"\\.\\.\\." - gdb_test "p -elements 5 -- teststring" \ + gdb_test "p -$setting 5 -- teststring" \ " = (.unsigned char .. )?\"tests\"\\.\\.\\." - gdb_test "p -elements 19 -- teststring" \ + gdb_test "p -$setting 19 -- teststring" \ " = (.unsigned char .. )?\"teststring contents\"" - gdb_test "p -elements 20 -- teststring" \ + gdb_test "p -$setting 20 -- teststring" \ " = (.unsigned char .. )?\"teststring contents\"" gdb_test "print teststring2" \ " = \\(charptr\\) \"more contents\"" - gdb_test_no_output "set print elements 8" + gdb_test_no_output "set print $setting 8" # Set the target-charset to ASCII, because the output varies from # different charset. @@ -620,6 +628,26 @@ proc test_print_strings {} { gdb_test "p &ctable1\[31*8\]" \ " = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\370\\\\371\\\\372\\\\373\\\\374\\\\375\\\\376\\\\377\"..." } + + gdb_test_no_output "set print $setting unlimited" +} + +proc test_print_strings {} { + + foreach_with_prefix setting { "elements" "characters" } { + test_print_strings_one $setting + } + + gdb_test "p -elements 8 -- teststring" \ + " = (.unsigned char .. )?\"teststring contents\"" + gdb_test "p -characters 8 -- teststring" \ + " = (.unsigned char .. )?\"teststri\"\\.\\.\\." + gdb_test "p -elements 8 -characters elements -- teststring" \ + " = (.unsigned char .. )?\"teststri\"\\.\\.\\." + + with_test_prefix strings { + gdb_test_no_output "set print characters elements" + } } proc test_print_int_arrays {} { diff --git a/gdb/testsuite/gdb.base/setshow.exp b/gdb/testsuite/gdb.base/setshow.exp index 2f3270a..86821ca 100644 --- a/gdb/testsuite/gdb.base/setshow.exp +++ b/gdb/testsuite/gdb.base/setshow.exp @@ -374,6 +374,27 @@ proc_with_prefix test_setshow_listsize {} { gdb_test "show listsize" "Number of source lines gdb will list by default is 100..*" "show listsize (100)" } +proc_with_prefix test_setshow_print_characters {} { + clean_restart + + gdb_test "p \$_gdb_setting(\"print characters\")" " = void" \ + "_gdb_setting print characters default" + gdb_test "p \$_gdb_setting_str(\"print characters\")" " = \"elements\"" \ + "_gdb_setting_str print characters default" + + gdb_test_no_output "set print characters unlimited" + gdb_test "p \$_gdb_setting(\"print characters\")" " = 0" \ + "_gdb_setting print characters unlimited" + gdb_test "p \$_gdb_setting_str(\"print characters\")" " = \"unlimited\"" \ + "_gdb_setting_str print characters unlimited" + + gdb_test_no_output "set print characters 1" + gdb_test "p \$_gdb_setting(\"print characters\")" " = 1" \ + "_gdb_setting print characters 1" + gdb_test "p \$_gdb_setting_str(\"print characters\")" " = \"1\"" \ + "_gdb_setting_str print characters 1" +} + proc_with_prefix test_setshow_prompt {} { clean_restart @@ -493,6 +514,7 @@ test_setshow_height test_setshow_history test_setshow_language test_setshow_listsize +test_setshow_print_characters test_setshow_prompt test_setshow_radix test_setshow_width |