If GDB says it can't find the struct the function returned, report

those tests as `unsupported'.
* gdb.base/call-rt-st.exp (print_struct_call): New function.
Rewrite subsequent tests to use it.
This commit is contained in:
Jim Blandy 2001-12-07 21:23:47 +00:00
parent f2e54a8073
commit 8032bf31ff
2 changed files with 51 additions and 86 deletions

View File

@ -1,5 +1,10 @@
2001-12-07 Jim Blandy <jimb@redhat.com> 2001-12-07 Jim Blandy <jimb@redhat.com>
If GDB says it can't find the struct the function returned, report
those tests as `unsupported'.
* gdb.base/call-rt-st.exp (print_struct_call): New function.
Rewrite subsequent tests to use it.
If GDB says it can't find the struct the function returned, report If GDB says it can't find the struct the function returned, report
those tests as `unsupported'. those tests as `unsupported'.
* gdb.base/structs.exp (call_struct_func): New function. * gdb.base/structs.exp (call_struct_func): New function.

View File

@ -135,118 +135,78 @@ gdb_expect {
timeout { fail "(timeout)finish out from loop_count"} timeout { fail "(timeout)finish out from loop_count"}
} }
if ![gdb_skip_stdio_test "print print_struct_rep(*struct1)"] { # Ask GDB to print the value of EXPR, and expect to see the regexp
send_gdb "print print_struct_rep(*struct1)\n" # RESULT in the output. If we get back the error message "Function
# return value unknown", call that an `unsupported' test; on some
# architectures, it's impossible to find structs returned by value
# reliably.
proc print_struct_call { expr result } {
global gdb_prompt
set command "print $expr"
send_gdb "${command}\n"
gdb_expect { gdb_expect {
-re ".*Contents of struct1:\[ \t\n\r\]+22\[ \t\]+0\[ \t\n\r\]+.\[0-9\]+ = \\{value = 5, head = 0\\}.*$gdb_prompt $" { -re "$result\[\r\n\]+$gdb_prompt $" {
pass "print print_struct_rep(*struct1, *struct2, *struct3)" pass "$command"
} }
-re ".*$gdb_prompt $" { -re "Function return value unknown.\[\r\n\]+$gdb_prompt $" {
fail "print print_struct_rep(*struct1, *struct2, *struct3)" unsupported "$command"
} }
timeout { -re "$gdb_prompt $" {
fail "(timeout) print_struct_rep(*struct1, *struct2, *struct3)" fail "$command"
} }
timeout {
fail "$command (timeout)"
}
} }
} }
if ![gdb_skip_stdio_test "print print_struct_rep(*struct1)"] {
print_struct_call "print_struct_rep(*struct1)" \
".*Contents of struct1:\[ \t\n\r\]+22\[ \t\]+0\[ \t\n\r\]+.\[0-9\]+ = \\{value = 5, head = 0\\}"
}
if ![gdb_skip_stdio_test "print print_one_large_struct(...)"] { if ![gdb_skip_stdio_test "print print_one_large_struct(...)"] {
send_gdb "print print_one_large_struct(*list1)\n" print_struct_call "print_one_large_struct(*list1)" \
gdb_expect { ".*\[ \t\]+4\[ \t\]+1\[ \r\n\]+.\[0-9\]+ = \\{next_index = \\{1, 2, 3, 4, 5, 6, 7, 8, 9, 10\\}, values = \\{4, 6, 8, 10, 12, 14, 16, 18, 20, 22\\}, head = 0\\}"
-re ".*\[ \t\]+4\[ \t\]+1\[ \r\n\]+.\[0-9\]+ = \\{next_index = \\{1, 2, 3, 4, 5, 6, 7, 8, 9, 10\\}, values = \\{4, 6, 8, 10, 12, 14, 16, 18, 20, 22\\}, head = 0\\}.*$gdb_prompt $" {
pass "print print_one_large_struct(*list1)"
}
-re ".*$gdb_prompt $" { fail "print print_one_large_struct(*list1)" }
timeout { fail "(timeout) print_one_large_struct(*list1)" }
}
} }
if {![gdb_skip_float_test "print print_one_double(*d1)"] && \ if {![gdb_skip_float_test "print print_one_double(*d1)"] && \
![gdb_skip_stdio_test "print print_one_double(*d1)"] } { ![gdb_skip_stdio_test "print print_one_double(*d1)"] } {
send_gdb "print print_one_double(*d1)\n"; print_struct_call "print_one_double(*d1)" \
gdb_expect { ".*Contents of one_double_t:\[ \r\n\]+1\\.111110\[ \r\n\]+.\[0-9\]+ = \\{double1 = 1\\.11111\\}"
-re ".*Contents of one_double_t:\[ \r\n\]+1\\.111110\[ \r\n\]+.\[0-9\]+ = \\{double1 = 1\\.11111\\}.*$gdb_prompt $" {
pass "print print_one_double(*d1)"
}
-re ".*$gdb_prompt $" { fail "print print_one_double(*d1)" }
timeout { fail "(timeout) print_one_double(*d1)" }
}
} }
if {![gdb_skip_float_test "print print_two_floats(*f3)"] && \ if {![gdb_skip_float_test "print print_two_floats(*f3)"] && \
![gdb_skip_stdio_test "print print_two_floats(*f3)"] } { ![gdb_skip_stdio_test "print print_two_floats(*f3)"] } {
send_gdb "print print_two_floats(*f3)\n" print_struct_call "print_two_floats(*f3)" \
gdb_expect { ".*Contents of two_floats_t:\[ \r\n\]+-2\\.345000\[ \t]+1\\.000000\[ \r\n\]+.\[0-9\]+ = \\{float1 = -2\\.34500003, float2 = 1\\}"
-re ".*Contents of two_floats_t:\[ \r\n\]+-2\\.345000\[ \t]+1\\.000000\[ \r\n\]+.\[0-9\]+ = \\{float1 = -2\\.34500003, float2 = 1\\}.*$gdb_prompt $" {
pass "print print_two_floats(*f3)"
}
-re ".*$gdb_prompt $" { fail "print print_two_floats(*f3)" }
timeout { fail "(timeout) print_two_floats(*f3)" }
}
} }
if ![gdb_skip_stdio_test "print print_bit_flags(*flags)"] { if ![gdb_skip_stdio_test "print print_bit_flags(*flags)"] {
send_gdb "print print_bit_flags(*flags)\n" print_struct_call "print_bit_flags(*flags)" \
gdb_expect { ".*alpha\[ \r\n\]+gamma\[ \r\n\]+epsilon\[ \r\n\]+.\[0-9\]+ = \\{alpha = 1, beta = 0, gamma = 1, delta = 0, epsilon = 1, omega = 0\\}"
-re ".*alpha\[ \r\n\]+gamma\[ \r\n\]+epsilon\[ \r\n\]+.\[0-9\]+ = \\{alpha = 1, beta = 0, gamma = 1, delta = 0, epsilon = 1, omega = 0\\}\[ \r\n\]+$gdb_prompt $" {
pass "print print_bit_flags(*flags)"
}
-re ".*$gdb_prompt $" { fail "print print_bit_flags(*flags)" }
timeout { fail "(timeout) print_bit_flags(*flags)" }
}
} }
if ![gdb_skip_stdio_test "print print_bit_flags_combo(*flags_combo)"] { if ![gdb_skip_stdio_test "print print_bit_flags_combo(*flags_combo)"] {
send_gdb "print print_bit_flags_combo(*flags_combo)\n" print_struct_call "print_bit_flags_combo(*flags_combo)" \
gdb_expect { ".*alpha\[ \r\n\]+gamma\[ \r\n\]+epsilon\[ \r\n\]+ch1: y\[ \t\]+ch2: n\[ \r\n\]+.\[0-9\]+ = \\{alpha = 1, beta = 0, ch1 = 121 'y', gamma = 1, delta = 0, ch2 = 110 'n', epsilon = 1, omega = 0\\}"
-re ".*alpha\[ \r\n\]+gamma\[ \r\n\]+epsilon\[ \r\n\]+ch1: y\[ \t\]+ch2: n\[ \r\n\]+.\[0-9\]+ = \\{alpha = 1, beta = 0, ch1 = 121 'y', gamma = 1, delta = 0, ch2 = 110 'n', epsilon = 1, omega = 0\\}\[ \r\n\]+$gdb_prompt $" {
pass "print print_bit_flags_combo(*flags_combo)"
}
-re ".*$gdb_prompt $" {
fail "print print_bit_flags_combo(*flags_combo)"
}
timeout {
fail "(timeout) print_bit_flags_combo(*flags_combo)"
}
}
} }
if ![gdb_skip_stdio_test "print print_three_chars(*three_chars)"] { if ![gdb_skip_stdio_test "print print_three_chars(*three_chars)"] {
send_gdb "print print_three_chars(*three_char)\n" print_struct_call "print_three_chars(*three_char)" \
gdb_expect { ".*Contents of three_char_t:\[ \r\n\]+x\[ \t\]+y\[ \t\]+z\[ \r\n\]+.\[0-9\]+ = \\{ch1 = 120 'x', ch2 = 121 'y', ch3 = 122 'z'\\}"
-re ".*Contents of three_char_t:\[ \r\n\]+x\[ \t\]+y\[ \t\]+z\[ \r\n\]+.\[0-9\]+ = \\{ch1 = 120 'x', ch2 = 121 'y', ch3 = 122 'z'\\}\[ \r\n\]+$gdb_prompt $" {
pass "print print_three_chars(*three_char)"
}
-re ".*$gdb_prompt $" { fail "print print_three_chars(*three_char)" }
timeout { fail "(timeout) print_three_chars(*three_char)" }
}
} }
if ![gdb_skip_stdio_test "print print_five_chars(*five_chars)"] { if ![gdb_skip_stdio_test "print print_five_chars(*five_chars)"] {
send_gdb "print print_five_chars(*five_char)\n" print_struct_call "print_five_chars(*five_char)" \
gdb_expect { ".*Contents of five_char_t:\[ \r\n\]+h\[ \t\]+e\[ \t\]+l\[ \t\]+l\[ \t\]+o\[ \r\n\]+.\[0-9\]+ = \\{ch1 = 104 'h', ch2 = 101 'e', ch3 = 108 'l', ch4 = 108 'l', ch5 = 111 'o'\\}"
-re ".*Contents of five_char_t:\[ \r\n\]+h\[ \t\]+e\[ \t\]+l\[ \t\]+l\[ \t\]+o\[ \r\n\]+.\[0-9\]+ = \\{ch1 = 104 'h', ch2 = 101 'e', ch3 = 108 'l', ch4 = 108 'l', ch5 = 111 'o'\\}\[ \r\n\]+$gdb_prompt $" {
pass "print print_five_chars(*five_char)"
}
-re ".*$gdb_prompt $" { fail "print print_five_chars(*five_char)" }
timeout { fail "(timeout) print_five_chars(*five_char)" }
}
} }
if ![gdb_skip_stdio_test "print print_int_char_combo(*int_char_combo)"] { if ![gdb_skip_stdio_test "print print_int_char_combo(*int_char_combo)"] {
send_gdb "print print_int_char_combo(*int_char_combo)\n" print_struct_call "print_int_char_combo(*int_char_combo)" \
gdb_expect { ".*Contents of int_char_combo_t:\[ \r\n\]+13\[ \t\]+!\[ \r\n\]+.\[0-9\]+ = \\{int1 = 13, ch1 = 33 '!'\\}"
-re ".*Contents of int_char_combo_t:\[ \r\n\]+13\[ \t\]+!\[ \r\n\]+.\[0-9\]+ = \\{int1 = 13, ch1 = 33 '!'\\}\[ \r\n\]+$gdb_prompt $" {
pass "print print_int_char_combo(*int_char_combo)"
}
-re ".*$gdb_prompt $" {
fail "print print_int_char_combo(*int_char_combo)"
}
timeout {
fail "(timeout) print_int_char_combo(*int_char_combo)"
}
}
} }
return return