Re: [RFA] testsuite/gdb.base/ending-run.exp

Fernando Nasser
2002-09-18T15:46:13Z

[-- Attachment #1: Type: text/plain, Size: 3004 bytes --]

Corinna Vinschen wrote:
> Hi,
>
> I suggest the attached patch to ending-run.exp which fixes the following
> problems:
>
> - The "step out of main (status wrapper)" check tests only for
> __wrap_main but not for __wrap__main which is used in dejagnu's
> testglue.c when UNDERSOCRES is defined.
>
> - The "step to end of run (status wrapper)" test expects not only
> the "EXIT code 0" but also a "Program exited normaly" string.
> That's not ok for targets which never actually exit but are just
> trapped in a special _exit() handler.
>
> - Based on this, the expectation that the following "next" will print
> the string "The program is not being run" is plain wrong. By adding
> a special case for these targets and setting the expected behaviour
> to XFAIL, these targets get a fair chance ;-)
>
> Corinna
>
> * gdb.base/ending-run.exp: Fix expected string for _wrap_main to
> allow correct handling of #ifdef UNDERSCORES from dejagnu/testglue.c.
> Fix handling of "step to end of run" for embedded targets which
> never actually exit.
>
> Index: gdb.base/ending-run.exp
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/gdb.base/ending-run.exp,v
> retrieving revision 1.16
> diff -u -p -r1.16 ending-run.exp
> --- gdb.base/ending-run.exp 19 Jul 2002 00:02:34 -0000 1.16
> +++ gdb.base/ending-run.exp 18 Sep 2002 11:21:22 -0000
> @@ -195,7 +195,7 @@ gdb_expect {
> -re ".*in.*\\\$START\\\$.*from.*dld.sl.*$gdb_prompt $" {
> pass "step out of main"
> }
> - -re ".*in __wrap_main ().*$gdb_prompt $" {
> + -re ".*in __wrap__?main ().*$gdb_prompt $" {
> pass "step out of main (status wrapper)"
> }
> -re ".*$gdb_prompt $" { fail "step out of main (at end 2)" }

This part is OK. You can check it in immediately.

> @@ -245,8 +245,12 @@ if {! [target_info exists use_gdb_stub]
> # exit" message.
> pass "step to end of run"
> }
> - -re "Single.*EXIT code 0.*Program exited normally.*$gdb_prompt $" {
> + -re "Single.*EXIT code 0\r\n.*Program exited normally.*$gdb_prompt $" {
> pass "step to end of run (status wrapper)"

You forgot to mention this change (which seems correct). It also can be
checked in providing you mention it in the ChangeLog.

> + }
> + -re "Single.*EXIT code 0\r\n.*$gdb_prompt $" {
> + pass "step to end of run (status wrapper)"
> + setup_xfail "*-*-*"
> }
> -re ".*Single.*Program exited.*$gdb_prompt $" {
> pass "step to end of run"
>
>

The code for xstormy was actually not correct. Please look at the
attached (untested) patch, add your case to it setting the variables
accordingly and give it a spin. If it works for you I will check it in
and then you can add the case above to it.

Regards,
Fernnado

--
Fernando Nasser
Red Hat Canada Ltd. E-Mail: fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario M4P 2C9

[-- Attachment #2: ENDINGRUN.PATCH --]
[-- Type: text/plain, Size: 3424 bytes --]

Index: testsuite/gdb.base/ending-run.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/ending-run.exp,v
retrieving revision 1.16
diff -c -p -r1.16 ending-run.exp
*** testsuite/gdb.base/ending-run.exp 19 Jul 2002 00:02:34 -0000 1.16
--- testsuite/gdb.base/ending-run.exp 18 Sep 2002 15:40:25 -0000
*************** gdb_expect {
*** 233,238 ****
--- 233,241 ----
# every BSP's exit function behaves differently, so there's no single
# way to tell whether we've exited gracefully or not. So don't run
# these tests when use_gdb_stub is set, or when we're running under Cygmon.
+ set program_exited_normally 0
+ set program_not_exited 0
+ set program_in_exit 0
if {! [target_info exists use_gdb_stub]
&& (! [target_info exists use_cygmon] || ! [target_info use_cygmon])} {
global program_exited;
*************** if {! [target_info exists use_gdb_stub]
*** 244,276 ****
# then we won't get the "Single-stepping until function
# exit" message.
pass "step to end of run"
}
-re "Single.*EXIT code 0.*Program exited normally.*$gdb_prompt $" {
pass "step to end of run (status wrapper)"
}
-re ".*Single.*Program exited.*$gdb_prompt $" {
pass "step to end of run"
}
-re ".*Single.*in exit.*from.*dld.sl.*$gdb_prompt $" {
pass "step to end of run"
! gdb_test "c" ".*" "continue after exit"
}
-re ".*Single.*_int_reset.*$gdb_prompt $" {
pass "step to end of run"
! setup_xfail "xstormy16-*-*"
}
-re ".*$gdb_prompt $" {
fail "step to end of run"
}
timeout {
fail "(timeout) 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"]

--- 247,300 ----
# then we won't get the "Single-stepping until function
# exit" message.
pass "step to end of run"
+ set program_exited_normally 1
}
-re "Single.*EXIT code 0.*Program exited normally.*$gdb_prompt $" {
pass "step to end of run (status wrapper)"
+ set program_exited_normally 1
}
-re ".*Single.*Program exited.*$gdb_prompt $" {
pass "step to end of run"
+ set program_exited_normally 1
}
-re ".*Single.*in exit.*from.*dld.sl.*$gdb_prompt $" {
pass "step to end of run"
! set program_in_exit 1
}
-re ".*Single.*_int_reset.*$gdb_prompt $" {
pass "step to end of run"
! if {![istarget "xstormy16-*-*"]} {
! set program_exited_normally 1
! }
}
-re ".*$gdb_prompt $" {
fail "step to end of run"
+ set program_not_exited 1
}
timeout {
fail "(timeout) step to end of run"
+ set program_not_exited 1
}
}
}

+ if {$program_in_exit} {
+ if {[gdb_test "c" ".*" "continue after exit"] == 0} {
+ set program_exited_normally 1
+ }
+ } else {
+ unsupported "continue after exit"
+ }
+
set timeout $old_timeout

! if {$program_exited_normally} {
! gdb_test "n" ".*The program is not being run.*" "don't step after run"
! } elseif {$program_not_exited} {
! unresolved "don't step after run"
! } else {
! unsupported "don't step after run"
! }

set exec_output [remote_exec host "ls core"]