old-cross-binutils/gdb/testsuite/gdb.base/args.exp
Joel Brobecker e22f8b7c8c Switch the license of all .exp files to GPLv3.
Switch the license of all .f and .f90 files to GPLv3.
        Switch the license of all .s and .S files to GPLv3.
2007-08-23 18:14:19 +00:00

102 lines
2.8 KiB
Text

# Copyright 2003, 2007 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 3 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, see <http://www.gnu.org/licenses/>.
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu
# This is a test for the gdb invocation option --args.
if $tracelevel then {
strace $tracelevel
}
global GDBFLAGS
# Skip test if target does not support argument passing.
if [target_info exists noargs] {
return;
}
set testfile "args"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } {
untested args.exp
return -1
}
proc args_test { name arglist } {
global srcdir
global subdir
global binfile
global hex
global decimal
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
# No loading needs to be done when the target is `exec'. Some targets
# require that the program be loaded, however, and it doesn't hurt
# for `exec'.
gdb_load $binfile
runto_main
gdb_breakpoint [gdb_get_line_number "set breakpoint here"]
gdb_continue_to_breakpoint "breakpoint for $name"
set expected_len [expr 1 + [llength $arglist]]
gdb_test "print argc" "\\\$$decimal = $expected_len" "argc for $name"
set i 1
foreach arg $arglist {
gdb_test "print argv\[$i\]" "\\\$$decimal = $hex \"$arg\"" \
"argv\[$i\] for $name"
set i [expr $i + 1]
}
}
#
# Test that the --args are processed correctly.
#
set old_gdbflags $GDBFLAGS
set GDBFLAGS "--args $binfile 1 3"
args_test basic {{1} {3}}
#
# Test that the --args are processed correctly even if one of them is empty.
# The syntax needed is a little peculiar; DejaGNU treats the arguments as a
# list and expands them itself, since no shell redirection is involved.
#
set GDBFLAGS "--args $binfile 1 {} 3"
args_test "one empty" {{1} {} {3}}
#
# try with 2 empty args
#
set GDBFLAGS "--args $binfile 1 {} {} 3"
args_test "two empty" {{1} {} {} 3}
# Try with arguments containing literal single quotes.
set GDBFLAGS "--args $binfile 1 '' 3"
args_test "one empty" {{1} {''} {3}}
set GDBFLAGS "--args $binfile 1 '' '' 3"
args_test "two empty" {{1} {''} {''} {3}}
set GDBFLAGS $old_gdbflags