This is the mail archive of the gdb-patches@sourceware.org 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]
Other format: [Raw text]

[commit] Update args.exp


I am working (slowly) on a remote protocol change which would allow
arguments to be passed to remote processes.  But it doesn't handle
passing inferior I/O back and forth.  Accordingly, I have rewritten
the args.exp test to support testing when noargs is not set, but
noinferiorio is.  We print out individual argv members instead of
checking stdout.

This turned up an amusing problem.  Two tests are supposedly for empty
arguments.  But the way DejaGNU invokes GDB, they aren't actually. The
expanded value of $GDBFLAGS is parsed like a TCL list.  '' is not an empty
list item; only "" and {} are.  So as you can see from the expected output,
we were actually testing two '' arguments.

This patch leaves those tests, and adds two more which really test empty
arguments.  Fortunately, it works.

Tested on x86_64-pc-linux-gnu (and a modified remote target), and committed.

-- 
Daniel Jacobowitz
CodeSourcery

2006-09-15  Daniel Jacobowitz  <dan@codesourcery.com>

	* gdb.base/args.c (main): Add breakpoint marker.
	* gdb.base/args.exp: Use args_test for tests.  Add new tests which
	really test empty arguments.
	(args_load): Delete.
	(args_test): New.

Index: gdb.base/args.c
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/args.c,v
retrieving revision 1.1
diff -u -p -r1.1 args.c
--- gdb.base/args.c	14 Jan 2003 21:03:42 -0000	1.1
+++ gdb.base/args.c	15 Sep 2006 15:56:02 -0000
@@ -8,5 +8,5 @@ main (int argc, char **argv)
   while (i < argc)
     printf ("%s\n", argv[i++]);
 
-  return 0;
+  return 0; /* set breakpoint here */
 }
Index: gdb.base/args.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/args.exp,v
retrieving revision 1.6.54.1
diff -u -p -r1.6.54.1 args.exp
--- gdb.base/args.exp	7 Mar 2006 15:48:33 -0000	1.6.54.1
+++ gdb.base/args.exp	15 Sep 2006 15:56:02 -0000
@@ -31,15 +31,6 @@ if [target_info exists noargs] {
     return;
 }
 
-# No loading needs to be done when the target is `exec'.  Some targets
-# require that the program be loaded, however.
-proc args_load {} {
-    global binfile
-    if [target_info exists is_simulator] {
-	gdb_load ${binfile}
-    }
-}
-
 set testfile "args"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
@@ -48,42 +39,64 @@ if  { [gdb_compile "${srcdir}/${subdir}/
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
 }
 
+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"
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-args_load
-gdb_test "run" \
-	"Starting program.*args(\\.exe)? 1 3.*3\r\n.*args\r\n1\r\n3.*Program exited normally." \
-	"correct args printed"
+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"
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-args_load
-gdb_test "run" \
-	"Starting program.*args(\\.exe)? 1 \\\\'\\\\' 3.*4\r\n.*args\r\n1\r\n''\r\n3.*Program exited normally." \
-	"correct args printed, one empty"
+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"
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-args_load
-gdb_test "run" \
-	"Starting program.*args(\\.exe)? 1 \\\\'\\\\' \\\\'\\\\' 3.*5\r\n.*args\r\n1\r\n''\r\n''\r\n3.*Program exited normally." \
-	"correct args printed, two empty"
+args_test "two empty" {{1} {''} {''} {3}}
 
 set GDBFLAGS $old_gdbflags
-


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