This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: [RFA] New test for gdb's "finish" command


Approved.

Thanks.

Fernando

Michael Snyder wrote:
> 
> This is a general test for the "finish" command, which tests the
> value returned by the function being "finished".  I've included
> the basic intrinsic types, and it should be straightforward to add
> more if anyone wants to (I may do so myself).  This test uses the
> same source file as the return test that I submitted earlier today.
> 
> If you're wondering why I'm doing this -- I'm doing a new base port,
> and these are things you always have to test early on in the process.
> I got tired of testing them by hand for every new architecture.  ;-)
> 
> As my base port progresses, I may extend these tests.
> 
> 2000-12-07  Michael Snyder  <msnyder@cleaver.cygnus.com>
> 
>         * gdb.base/finish.exp: New test for gdb's "finish" command.
> 
> # Copyright (C) 2000 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
> # the Free Software Foundation; either version 2 of the License, or
> # (at your option) any later version.
> #
> # This program is distributed in the hope that it will be useful,
> # but WITHOUT ANY WARRANTY; without even the implied warranty of
> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> # GNU General Public License for more details.
> #
> # You should have received a copy of the GNU General Public License
> # along with this program; if not, write to the Free Software
> # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
> 
> # Please email any bugs, comments, and/or additions to this file to:
> # bug-gdb@prep.ai.mit.edu
> 
> # This file was written by Michael Snyder (msnyder@redhat.com)
> 
> if $tracelevel then {
>         strace $tracelevel
> }
> 
> set prms_id 0
> set bug_id 0
> 
> # re-use the program from the "return2" test.
> set testfile "return2"
> set srcfile ${testfile}.c
> set binfile ${objdir}/${subdir}/${testfile}
> if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
>      gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
> }
> 
> proc finish_1 { type } {
>     global gdb_prompt
> 
>     gdb_test "break ${type}_func" "Breakpoint \[0123456789\].*" \
>             "set break on ${type}_func"
>     gdb_test "continue" "Breakpoint.* ${type}_func.*" \
>             "continue to ${type}_func"
>     send_gdb "finish\n"
>     gdb_expect {
>         -re ".*Value returned is .* = 1 '.001'\r\n$gdb_prompt $" {
>             if { $type == "char" } {
>                 pass "finish from char_func"
>             } else {
>                 fail "finish from char_func"
>             }
>         }
>         -re ".*Value returned is .* = 1\r\n$gdb_prompt $" {
>             pass "finish from ${type}_func"
>         }
>         -re ".*$gdb_prompt $" {
>             fail "finish from ${type}_func"
>         }
>         timeout {
>             fail "finish from ${type}_func (timeout)"
>         }
>     }
> }
> 
> proc finish_void { } {
>     global gdb_prompt
> 
>     gdb_test "break void_func" "Breakpoint \[0123456789\].*" \
>             "set break on void_func"
>     gdb_test "continue" "Breakpoint.* void_func.*" \
>             "continue to void_func"
>     send_gdb "finish\n"
>     gdb_expect {
>         -re ".*void_checkpoint.*$gdb_prompt $" {
>             pass "finish from void_func"
>         }
>         -re ".*$gdb_prompt $" {
>             fail "finish from void_func"
>         }
>         timeout {
>             fail "finish from void_func (timeout)"
>         }
>     }
> }
> 
> proc finish_tests { } {
>     global gdb_prompt
> 
>     if { ! [ runto main ] } then {
>         gdb_suppress_entire_file "Run to main failed, so all tests in this file will automatically fail."
>     }
> 
>     finish_void
>     finish_1 "char"
>     finish_1 "short"
>     finish_1 "int"
>     finish_1 "long"
>     finish_1 "long_long"
>     finish_1 "float"
>     finish_1 "double"
> }
> 
> # Start with a fresh gdb.
> 
> gdb_exit
> gdb_start
> gdb_reinitialize_dir $srcdir/$subdir
> gdb_load ${binfile}
> 
> set timeout 30
> finish_tests

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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]