testsuite patches
Mark Salter
msalter@cygnus.com
Tue Mar 16 17:02:00 GMT 1999
Here are some patches I needed to apply to get the gdb
testsuite to work correctly on remote targets using
cygmon. The basic problem was that some of the tests
expected 'run' to work on a remote target and expected
programs to exit with a nice message. There's also an
unitialized char array in miscexprs.c
--Mark
Index: devo/gdb/testsuite/gdb.base/ena-dis-br.exp
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/testsuite/gdb.base/ena-dis-br.exp,v
retrieving revision 1.1
diff -p -r1.1 ena-dis-br.exp
*** ena-dis-br.exp 1999/01/08 23:37:32 1.1
--- ena-dis-br.exp 1999/03/16 20:57:05
***************
*** 1,4 ****
! # Copyright (C) 1997, 1998 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
--- 1,4 ----
! # Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
*************** if { [gdb_compile "${srcdir}/${subdir}/
*** 38,43 ****
--- 38,67 ----
gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}
+ proc rerun_to_main {} {
+ global gdb_prompt
+
+ if [target_info exists use_gdb_stub] {
+ gdb_run_cmd
+ gdb_expect {
+ -re ".*Breakpoint .*main .*$gdb_prompt $"\
+ {pass "rerun to main" ; return 0}
+ -re "$gdb_prompt $"\
+ {fail "rerun to main" ; return 0}
+ timeout {fail "(timeout) rerun to main" ; return 0}
+ }
+ } else {
+ send_gdb "run\n"
+ gdb_expect {
+ -re "Starting program.*$gdb_prompt $"\
+ {pass "rerun to main" ; return 0}
+ -re "$gdb_prompt $"\
+ {fail "rerun to main" ; return 0}
+ timeout {fail "(timeout) rerun to main" ; return 0}
+ }
+ }
+ }
+
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
*************** gdb_expect {
*** 137,168 ****
# Verify that we don't stop at a disabled breakpoint.
#
! send_gdb "continue\n"
! gdb_expect {
! -re ".*Program exited normally.*$gdb_prompt $"\
! {pass "no stop"}
! -re "$gdb_prompt $"\
! {fail "no stop"}
! timeout {fail "(timeout) no stop"}
! }
!
! send_gdb "run\n"
! gdb_expect {
! -re "Starting program.*$gdb_prompt $"\
! {pass "rerun to main"}
! -re "$gdb_prompt $"\
! {fail "rerun to main"}
! timeout {fail "(timeout) rerun to main"}
! }
!
! send_gdb "continue\n"
! gdb_expect {
! -re ".*Program exited normally.*$gdb_prompt $"\
! {pass "no stop at auto-disabled break marker2"}
! -re "$gdb_prompt $"\
! {fail "no stop at auto-disabled break marker2"}
! timeout {fail "(timeout) no stop at auto-disabled break marker2"}
! }
# Verify that we can set a breakpoint to be self-deleting after
# the first time it triggers.
--- 161,169 ----
# Verify that we don't stop at a disabled breakpoint.
#
! continue_to_exit "no stop"
! rerun_to_main
! continue_to_exit "no stop at auto-disabled break marker2"
# Verify that we can set a breakpoint to be self-deleting after
# the first time it triggers.
*************** gdb_expect {
*** 320,343 ****
{fail "info ignored break marker1"}
timeout {fail "(timeout) info ignored break marker1"}
}
-
- send_gdb "continue\n"
- gdb_expect {
- -re ".*Program exited normally.*$gdb_prompt $"\
- {pass "no stop at ignored break marker1"}
- -re "$gdb_prompt $"\
- {fail "no stop at ignored break marker1"}
- timeout {fail "(timeout) no stop at ignored break marker1"}
- }
! send_gdb "run\n"
! gdb_expect {
! -re "Starting program.*$gdb_prompt $"\
! {pass "rerun to main"}
! -re "$gdb_prompt $"\
! {fail "rerun to main"}
! timeout {fail "(timeout) rerun to main"}
! }
send_gdb "continue\n"
gdb_expect {
--- 321,329 ----
{fail "info ignored break marker1"}
timeout {fail "(timeout) info ignored break marker1"}
}
! continue_to_exit "no stop at ignored break marker1"
! rerun_to_main
send_gdb "continue\n"
gdb_expect {
*************** gdb_expect {
*** 385,408 ****
{fail "info break marker1"}
timeout {fail "(timeout) info break marker2"}
}
-
- send_gdb "continue\n"
- gdb_expect {
- -re ".*Program exited normally.*$gdb_prompt $"\
- {pass "no stop at ignored & auto-deleted break marker1"}
- -re "$gdb_prompt $"\
- {fail "no stop at ignored & auto-deleted break marker1"}
- timeout {fail "(timeout) no stop at ignored & auto-deleted break marker1"}
- }
! send_gdb "run\n"
! gdb_expect {
! -re "Starting program.*$gdb_prompt $"\
! {pass "rerun to main"}
! -re "$gdb_prompt $"\
! {fail "rerun to main"}
! timeout {fail "(timeout) rerun to main"}
! }
send_gdb "continue\n"
gdb_expect {
--- 371,379 ----
{fail "info break marker1"}
timeout {fail "(timeout) info break marker2"}
}
! continue_to_exit "no stop at ignored & auto-deleted break marker1"
! rerun_to_main
send_gdb "continue\n"
gdb_expect {
*************** gdb_expect {
*** 444,467 ****
{pass "disable break marker1"}
timeout {fail "(timeout) disable break marker1"}
}
-
- send_gdb "continue\n"
- gdb_expect {
- -re ".*Program exited normally.*$gdb_prompt $"\
- {pass "no stop at ignored & disabled break marker1"}
- -re "$gdb_prompt $"\
- {fail "no stop at ignored & disabled break marker1"}
- timeout {fail "(timeout) no stop at ignored & disabled break marker1"}
- }
! send_gdb "run\n"
! gdb_expect {
! -re "Starting program.*$gdb_prompt $"\
! {pass "rerun to main"}
! -re "$gdb_prompt $"\
! {fail "rerun to main"}
! timeout {fail "(timeout) rerun to main"}
! }
send_gdb "info break $expect_out(1,string)\n"
gdb_expect {
--- 415,423 ----
{pass "disable break marker1"}
timeout {fail "(timeout) disable break marker1"}
}
! continue_to_exit "no stop at ignored & disabled break marker1"
! rerun_to_main
send_gdb "info break $expect_out(1,string)\n"
gdb_expect {
Index: devo/gdb/testsuite/gdb.base/ending-run.exp
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/testsuite/gdb.base/ending-run.exp,v
retrieving revision 1.1
diff -p -r1.1 ending-run.exp
*** ending-run.exp 1999/01/08 23:40:55 1.1
--- ending-run.exp 1999/03/16 20:57:05
***************
*** 1,4 ****
! # Copyright (C) 1997, 1998 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
--- 1,4 ----
! # Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
*************** gdb_test "b 26" ".*Breakpoint.*3.*" ""
*** 61,67 ****
# Expect to hit the bp at line "1", but symbolize this
# as line "8". Then try to clear it--this should work.
#
! gdb_test "r" ".*Breakpoint.*1.*callee.*8.*" ""
gdb_test "cle" ".*Deleted breakpoints 2 1.*" "clear worked"
send_gdb "i b\n"
gdb_expect {
--- 61,71 ----
# Expect to hit the bp at line "1", but symbolize this
# as line "8". Then try to clear it--this should work.
#
! if [target_info exists use_gdb_stub] {
! gdb_test "continue" ".*Breakpoint.*1.*callee.*8.*" ""
! } else {
! gdb_test "r" ".*Breakpoint.*1.*callee.*8.*" ""
! }
gdb_test "cle" ".*Deleted breakpoints 2 1.*" "clear worked"
send_gdb "i b\n"
gdb_expect {
*************** gdb_expect {
*** 150,159 ****
timeout { fail "hang or timeout on step at end 1" }
}
! gdb_test "n" ".*Single.*Program exited.*" "step to end of run"
! set timeout $old_timeout
! gdb_test "n" ".*The program is not being run.*" "don't step after run"
set exec_output [remote_exec host "ls core"]
--- 154,165 ----
timeout { fail "hang or timeout on step at end 1" }
}
! if ![target_info exists use_gdb_stub] {
! gdb_test "n" ".*Single.*Program exited.*" "step to end of run"
! set timeout $old_timeout
! gdb_test "n" ".*The program is not being run.*" "don't step after run"
! }
set exec_output [remote_exec host "ls core"]
Index: devo/gdb/testsuite/gdb.base/miscexprs.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/testsuite/gdb.base/miscexprs.c,v
retrieving revision 1.2
diff -p -r1.2 miscexprs.c
*** miscexprs.c 1999/01/04 15:34:31 1.2
--- miscexprs.c 1999/03/16 20:57:05
*************** struct {
*** 62,68 ****
short s[400];
} sbig;
ibig.i[100] = 5;
! cbig.c[100] = 'A';
fbig.f[100] = 11.99999;
dbig.d[202] = 9.99999999;
sbig.s[90] = 255;
--- 62,68 ----
short s[400];
} sbig;
ibig.i[100] = 5;
! cbig.c[100] = 'A'; cbig.c[0] = 0;
fbig.f[100] = 11.99999;
dbig.d[202] = 9.99999999;
sbig.s[90] = 255;
Index: devo/gdb/testsuite/gdb.base/step-test.exp
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/testsuite/gdb.base/step-test.exp,v
retrieving revision 1.3
diff -p -r1.3 step-test.exp
*** step-test.exp 1999/03/09 03:55:52 1.3
--- step-test.exp 1999/03/16 20:57:05
***************
*** 1,4 ****
! # Copyright (C) 1997, 1998 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
--- 1,4 ----
! # Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
*************** gdb_test "step" \
*** 148,153 ****
".*step-test.exp: arrive here 1.*" \
"large struct by value"
! gdb_test "continue" ".*Program exited normally.*" "run to finish"
return 0
--- 148,153 ----
".*step-test.exp: arrive here 1.*" \
"large struct by value"
! continue_to_exit "run to finish"
return 0
Index: devo/gdb/testsuite/lib/gdb.exp
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/testsuite/lib/gdb.exp,v
retrieving revision 1.135
diff -p -r1.135 gdb.exp
*** gdb.exp 1999/03/09 03:55:58 1.135
--- gdb.exp 1999/03/16 20:57:06
*************** proc runto_main { } {
*** 313,318 ****
--- 313,372 ----
return 1
}
+ #
+ # continue_to_exit MESSAGE -- test that continuing gdb will cause program to exit.
+ #
+ # MESSAGE is the message to be incorproated into pass/fail messages.
+ #
+ # The case where the target uses stubs has to be handled specially. If a
+ # stub is used, we set a breakpoint at exit because we cannot rely on
+ # exit() behavior of a remote target.
+ #
+ # Returns:
+ # 1 if the test failed,
+ # 0 if the test passes,
+ # -1 if there was an internal error.
+ #
+ proc continue_to_exit { message } {
+ global gdb_prompt
+ global decimal
+
+ if [target_info exists use_gdb_stub] {
+ send_gdb "break exit\n"
+ gdb_expect {
+ -re "Breakpoint (\[0-9\]*) at .*: file .*, line $decimal.\r\n$gdb_prompt $" {}
+ -re "Breakpoint (\[0-9\]*): file .*, line $decimal.\r\n$gdb_prompt $" {}
+ -re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" {}
+ -re "$gdb_prompt $" { fail "setting breakpoint at exit" ; return -1 }
+ timeout { fail "setting breakpoint at exit (timeout)" ; return -1 }
+ }
+ send_gdb "continue\n"
+ gdb_expect {
+ -re "Continuing..*Breakpoint .*exit \[(\].*=\[0-9\]+\[)\].*$gdb_prompt $"\
+ {pass "$message"}
+ -re "$gdb_prompt $"\
+ {fail "$message" ; return 1 }
+ timeout {fail "(timeout) $message" ; return 1 }
+ }
+ send_gdb "delete $expect_out(1,string)\n"
+ gdb_expect {
+ -re "$gdb_prompt $" {}
+ timeout { fail "deleting breakpoint at exit (timeout)" ; return -1 }
+ }
+ } else {
+ send_gdb "continue\n"
+ gdb_expect {
+ -re ".*Program exited normally.*$gdb_prompt $"\
+ {pass "$message"}
+ -re "$gdb_prompt $"\
+ {fail "$message"}
+ timeout {fail "(timeout) $message"}
+ }
+ }
+ return 0
+ }
+
+
# gdb_test COMMAND PATTERN MESSAGE -- send a command to gdb; test the result.
#
# COMMAND is the command to execute, send to GDB with send_gdb. If
More information about the Gdb-patches
mailing list