aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base
diff options
context:
space:
mode:
authorKeith Seitz <keiths@redhat.com>2012-11-10 20:19:01 +0000
committerKeith Seitz <keiths@redhat.com>2012-11-10 20:19:01 +0000
commit0d63ecdad04d410698c905283d095505680ba907 (patch)
tree3f894b47be2cfef2d36d71ffb1cb4d33717bd9b7 /gdb/testsuite/gdb.base
parent9b8d6827200e1b04d3ca860ce52472655e84248c (diff)
downloadfsf-binutils-gdb-0d63ecdad04d410698c905283d095505680ba907.zip
fsf-binutils-gdb-0d63ecdad04d410698c905283d095505680ba907.tar.gz
fsf-binutils-gdb-0d63ecdad04d410698c905283d095505680ba907.tar.bz2
PR gdb/14288
* c-valprint.c (c_val_print): For character arrays with "print null" option on, print ellipses if the output is truncated and the next character is not \000. * valprint.c (MAX_WCHARS): Define. (WCHAR_BUFLEN): Likewise. (WCHAR_BUFLEN_MAX): Likewise. (struct converted_character): New structure. (count_next_character): New function. (print_converted_chars_to_obstack): New function. (generic_printstr): Rewrite using count_next_character and print_converted_chars_to_obstack. * gdb.base/printcmds.c: Add invalid_XXX globals for repeated byte tests. * gdb.base/printcmds.exp (test_repeat_bytes): New procedure. * gdb.base/wchar.c (main): Add and construct a wchar_t array with repeated characters. * gdb.base/wchar.exp: Add repeated character tests.
Diffstat (limited to 'gdb/testsuite/gdb.base')
-rw-r--r--gdb/testsuite/gdb.base/printcmds.c92
-rw-r--r--gdb/testsuite/gdb.base/printcmds.exp71
-rw-r--r--gdb/testsuite/gdb.base/wchar.c10
-rw-r--r--gdb/testsuite/gdb.base/wchar.exp19
4 files changed, 192 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/printcmds.c b/gdb/testsuite/gdb.base/printcmds.c
index 743734b..d80c13d 100644
--- a/gdb/testsuite/gdb.base/printcmds.c
+++ b/gdb/testsuite/gdb.base/printcmds.c
@@ -122,6 +122,98 @@ struct some_struct
}
};
+/* The following variables are used for testing byte repeat sequences.
+ The variable names are encoded: invalid_XYZ where:
+ X = start
+ Y = invalid
+ Z = end
+
+ Each of X and Z can be "E" (empty), "S" (single), "L" (long single),
+ or "R" (repeat).
+
+ Y can be either any of the above except "E" (otherwise there is nothing
+ to test). */
+char invalid_ESE[] = "\240";
+char invalid_SSE[] = "a\240";
+char invalid_LSE[] = "abaabbaaabbb\240";
+char invalid_RSE[] = "aaaaaaaaaaaaaaaaaaaa\240";
+char invalid_ESS[] = "\240c";
+char invalid_SSS[] = "a\240c";
+char invalid_LSS[] = "abaabbaaabbb\240c";
+char invalid_RSS[] = "aaaaaaaaaaaaaaaaaaaa\240c";
+char invalid_ESL[] = "\240cdccddcccddd";
+char invalid_SSL[] = "a\240cdccddcccddd";
+char invalid_LSL[] = "abaabbaaabbb\240cdccddcccddd";
+char invalid_RSL[] = "aaaaaaaaaaaaaaaaaaaa\240cdccddcccddd";
+char invalid_ESR[] = "\240cccccccccccccccccccc";
+char invalid_SSR[] = "a\240cccccccccccccccccccc";
+char invalid_LSR[] = "abaabbaaabbb\240cccccccccccccccccccc";
+char invalid_RSR[] = "aaaaaaaaaaaaaaaaaaaa\240cccccccccccccccccccc";
+char invalid_ELE[] = "\240\240\240\240";
+char invalid_SLE[] = "a\240\240\240\240";
+char invalid_LLE[] = "abaabbaaabbb\240\240\240\240";
+char invalid_RLE[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240";
+char invalid_ELS[] = "\240\240\240\240c";
+char invalid_SLS[] = "a\240\240\240\240c";
+char invalid_LLS[] = "abaabbaaabbb\240\240\240\240c";
+char invalid_RLS[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240c";
+char invalid_ELL[] = "\240\240\240\240cdccddcccddd";
+char invalid_SLL[] = "a\240\240\240\240cdccddcccddd";
+char invalid_LLL[] = "abaabbaaabbb\240\240\240\240cdccddcccddd";
+char invalid_RLL[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240cdccddcccddd";
+char invalid_ELR[] = "\240\240\240\240cccccccccccccccccccc";
+char invalid_SLR[] = "a\240\240\240\240cccccccccccccccccccc";
+char invalid_LLR[] = "abaabbaaabbb\240\240\240\240cccccccccccccccccccc";
+char invalid_RLR[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240cccccccccccccccccccc";
+char invalid_ERE[] = ""
+ "\240\240\240\240\240\240\240\240\240\240"
+ "\240\240\240\240\240\240\240\240\240\240";
+char invalid_LRE[] = "abaabbaaabbb"
+ "\240\240\240\240\240\240\240\240\240\240"
+ "\240\240\240\240\240\240\240\240\240\240";
+char invalid_RRE[] = "aaaaaaaaaaaaaaaaaaaa"
+ "\240\240\240\240\240\240\240\240\240\240"
+ "\240\240\240\240\240\240\240\240\240\240";
+char invalid_ERS[] = ""
+ "\240\240\240\240\240\240\240\240\240\240"
+ "\240\240\240\240\240\240\240\240\240\240c";
+char invalid_ERL[] = ""
+ "\240\240\240\240\240\240\240\240\240\240"
+ "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
+char invalid_ERR[] = ""
+ "\240\240\240\240\240\240\240\240\240\240"
+ "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
+char invalid_SRE[] = "a"
+ "\240\240\240\240\240\240\240\240\240\240"
+ "\240\240\240\240\240\240\240\240\240\240";
+char invalid_SRS[] = "a"
+ "\240\240\240\240\240\240\240\240\240\240"
+ "\240\240\240\240\240\240\240\240\240\240c";
+char invalid_SRL[] = "a"
+ "\240\240\240\240\240\240\240\240\240\240"
+ "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
+char invalid_SRR[] = "a"
+ "\240\240\240\240\240\240\240\240\240\240"
+ "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
+char invalid_LRS[] = "abaabbaaabbb"
+ "\240\240\240\240\240\240\240\240\240\240"
+ "\240\240\240\240\240\240\240\240\240\240c";
+char invalid_LRL[] = "abaabbaaabbb"
+ "\240\240\240\240\240\240\240\240\240\240"
+ "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
+char invalid_LRR[] = "abaabbaaabbb"
+ "\240\240\240\240\240\240\240\240\240\240"
+ "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
+char invalid_RRS[] = "aaaaaaaaaaaaaaaaaaaa"
+ "\240\240\240\240\240\240\240\240\240\240"
+ "\240\240\240\240\240\240\240\240\240\240c";
+char invalid_RRL[] = "aaaaaaaaaaaaaaaaaaaa"
+ "\240\240\240\240\240\240\240\240\240\240"
+ "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
+char invalid_RRR[] = "aaaaaaaaaaaaaaaaaaaa"
+ "\240\240\240\240\240\240\240\240\240\240"
+ "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
+
/* -- */
int main ()
diff --git a/gdb/testsuite/gdb.base/printcmds.exp b/gdb/testsuite/gdb.base/printcmds.exp
index 4f76cec..4dfe90f 100644
--- a/gdb/testsuite/gdb.base/printcmds.exp
+++ b/gdb/testsuite/gdb.base/printcmds.exp
@@ -792,6 +792,76 @@ proc gdb_test_escape_braces { args } {
gdb_test [lindex $args 0] $esc_pattern [lindex $args 2]
}
+proc test_repeat_bytes {} {
+ set start(E) {}
+ set start(S) {a}
+ set start(L) {abaabbaaabbb}
+ set start(R) {'a' <repeats 20 times>}
+ set end(E) {}
+ set end(S) {c}
+ set end(L) {cdccddcccddd}
+ set end(R) {'c' <repeats 20 times>}
+ set invalid(S) {\\240}
+ set invalid(L) {\\240\\240\\240\\240}
+ set invalid(R) {'\\240' <repeats 20 times>}
+
+ set fmt(SSS) "\"%s%s%s\""
+ set fmt(SSR) "\"%s%s\", %s"
+ set fmt(SRS) "\"%s\", %s, \"%s\""
+ set fmt(RSS) "%s, \"%s%s\""
+ set fmt(RSR) "%s, \"%s\", %s"
+ set fmt(SRR) "\"%s\", %s, %s"
+ set fmt(RRS) "%s, %s, \"%s\""
+ set fmt(RRR) "%s, %s, %s"
+
+ set fmt(RS) "%s, \"%s\""
+ set fmt(RR) "%s, %s"
+ set fmt(SR) "\"%s\", %s"
+ set fmt(SS) "\"%s%s\""
+
+ # Test the various permutations of invalid characters
+ foreach i [array names invalid] {
+ set I $i
+
+ if {$i == "L"} {
+ set i "S"
+ }
+
+ foreach s [array names start] {
+ set S $s
+
+ if {$s == "L"} {
+ set s "S"
+ }
+
+
+ foreach e [array names end] {
+ set E $e
+
+ if {$e == "L"} {
+ set e "S"
+ }
+
+ # Skip E*E.
+ if {$s == "E" && $e == "E"} { continue }
+
+ # Special cases...
+ if {$s == "E"} {
+ set result [format $fmt($i$e) $invalid($I) $end($E)]
+ } elseif {$e == "E"} {
+ set result [format $fmt($s$i) $start($S) $invalid($I)]
+ } else {
+ set result [format $fmt($s$i$e) \
+ $start($S) $invalid($I) $end($E)]
+ }
+
+ send_log "expecting: = $result\n"
+ gdb_test "print invalid_$S$I$E" "= $result"
+ }
+ }
+ }
+}
+
# Start with a fresh gdb.
gdb_exit
@@ -851,3 +921,4 @@ test_print_enums
test_printf
test_printf_with_dfp
test_print_symbol
+test_repeat_bytes
diff --git a/gdb/testsuite/gdb.base/wchar.c b/gdb/testsuite/gdb.base/wchar.c
index 22f5beb..7bdfd68 100644
--- a/gdb/testsuite/gdb.base/wchar.c
+++ b/gdb/testsuite/gdb.base/wchar.c
@@ -25,11 +25,21 @@ do_nothing (wchar_t *c)
int
main (void)
{
+ int i;
wchar_t narrow = 97;
wchar_t single = 0xbeef;
wchar_t simple[] = L"facile";
wchar_t difficile[] = { 0xdead, 0xbeef, 0xfeed, 0xface};
wchar_t mixed[] = {L'f', 0xdead, L'a', L'c', 0xfeed, 0xface};
+ wchar_t *cent = L"\242";
+ wchar_t repeat[128];
+ wchar_t *repeat_p = repeat;
+
+ repeat[0] = 0;
+ wcscat (repeat, L"A");
+ for (i = 0; i < 21; ++i)
+ wcscat (repeat, cent);
+ wcscat (repeat, L"B");
do_nothing (&narrow); /* START */
do_nothing (&single);
diff --git a/gdb/testsuite/gdb.base/wchar.exp b/gdb/testsuite/gdb.base/wchar.exp
index 2451d92..4c7ebf1 100644
--- a/gdb/testsuite/gdb.base/wchar.exp
+++ b/gdb/testsuite/gdb.base/wchar.exp
@@ -36,3 +36,22 @@ gdb_test "print simple\[2\]" "= 99 L'c'"
gdb_test "print difficile\[2\]" "= 65261 L'\\\\xfeed'"
+set cent "\\\\242"
+gdb_test "print repeat" "= L\"A\", '$cent' <repeats 21 times>, \"B.*"
+
+global hex
+gdb_test "print repeat_p" \
+ "= $hex L\"A\", '$cent' <repeats 21 times>, \"B\""
+
+gdb_test_no_output "set print null on"
+
+gdb_test "print repeat" "= L\"A\", '$cent' <repeats 21 times>, \"B\"" \
+ "print repeat (print null on)"
+
+gdb_test_no_output "set print elements 3"
+
+gdb_test "print repeat" "= L\"A$cent$cent\"\.\.\." \
+ "print repeat (print elements 3)"
+
+gdb_test "print repeat_p" "= $hex L\"A$cent$cent\"\.\.\." \
+ "print repeat_p (print elements 3)"