Message ID | 1476219321-10659-1-git-send-email-lgustavo@codesourcery.com |
---|---|
State | New |
Headers | show |
On Tue, Oct 11, 2016 at 9:55 PM, Luis Machado <lgustavo@codesourcery.com> wrote: > > Does it look OK? > > gdb/testsuite/ChangeLog: > > 2016-10-11 Luis Machado <lgustavo@codesourcery.com> > > * gdb.python/py-value.c (main): Check if argv is NULL before using it. > * gdb.python/py-value.exp (test_value_in_inferior): Don't use a > hardcoded argc value. Yes, it is good to me.
On 10/11/2016 09:55 PM, Luis Machado wrote: > + set argc_value [get_integer_valueof "argc" 0] > gdb_test "python argc_lazy = gdb.parse_and_eval('argc')" > gdb_test "python argc_notlazy = gdb.parse_and_eval('argc')" > gdb_test "python argc_notlazy.fetch_lazy()" > gdb_test "python print (argc_lazy.is_lazy)" "True" > gdb_test "python print (argc_notlazy.is_lazy)" "False" > - gdb_test "print argc" " = 1" "sanity check argc" > + gdb_test "print argc" " = $argc_value" "sanity check argc" > gdb_test "python print (argc_lazy.is_lazy)" "\r\nTrue" > gdb_test_no_output "set argc=2" Pedantically, $argc_value could be 2, so this would be better something like gdb_test_no_output "set argc=[expr $argc_value + 1]" "change argc" > - gdb_test "python print (argc_notlazy)" "\r\n1" > + gdb_test "python print (argc_notlazy)" "\r\n$argc_value" > gdb_test "python print (argc_lazy)" "\r\n2" Likewise. > gdb_test "python print (argc_lazy.is_lazy)" "False" Thanks, Pedro Alves
On 10/12/2016 08:31 AM, Pedro Alves wrote: > On 10/11/2016 09:55 PM, Luis Machado wrote: >> + set argc_value [get_integer_valueof "argc" 0] >> gdb_test "python argc_lazy = gdb.parse_and_eval('argc')" >> gdb_test "python argc_notlazy = gdb.parse_and_eval('argc')" >> gdb_test "python argc_notlazy.fetch_lazy()" >> gdb_test "python print (argc_lazy.is_lazy)" "True" >> gdb_test "python print (argc_notlazy.is_lazy)" "False" >> - gdb_test "print argc" " = 1" "sanity check argc" >> + gdb_test "print argc" " = $argc_value" "sanity check argc" >> gdb_test "python print (argc_lazy.is_lazy)" "\r\nTrue" >> gdb_test_no_output "set argc=2" > > Pedantically, $argc_value could be 2, so this would be better > something like > > gdb_test_no_output "set argc=[expr $argc_value + 1]" "change argc" > >> - gdb_test "python print (argc_notlazy)" "\r\n1" >> + gdb_test "python print (argc_notlazy)" "\r\n$argc_value" > > >> gdb_test "python print (argc_lazy)" "\r\n2" > > Likewise. > Alright. I've addressed this and checked it in on master as 4dac951e11030b43b17f52df8bdfa7432e4bf73c. Thanks Yao and Pedro.
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index b4ccd4a..2ed2c9c 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-10-11 Luis Machado <lgustavo@codesourcery.com> + + * gdb.python/py-value.c (main): Check if argv is NULL before using it. + * gdb.python/py-value.exp (test_value_in_inferior): Adjust initial + argc value based on the existence of argv. + 2016-10-11 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.arch/powerpc-prologue.c (optimized_1): New declaration. diff --git a/gdb/testsuite/gdb.python/py-value.c b/gdb/testsuite/gdb.python/py-value.c index 586a0fd..8a8ace6 100644 --- a/gdb/testsuite/gdb.python/py-value.c +++ b/gdb/testsuite/gdb.python/py-value.c @@ -82,7 +82,7 @@ char **save_argv; int main (int argc, char *argv[]) { - char *cp = argv[0]; /* Prevent gcc from optimizing argv[] out. */ + char *cp; struct s s; union u u; PTR x = &s; @@ -99,6 +99,14 @@ main (int argc, char *argv[]) const char *sn = 0; struct str *xstr; + /* Prevent gcc from optimizing argv[] out. */ + + /* We also check for a NULL argv in case we are dealing with a target + executing in a freestanding environment, therefore there are no + guarantees about argc or argv. */ + if (argv != NULL) + cp = argv[0]; + s.a = 3; s.b = 5; u.a = 7; diff --git a/gdb/testsuite/gdb.python/py-value.exp b/gdb/testsuite/gdb.python/py-value.exp index 662c5b4..f31096b 100644 --- a/gdb/testsuite/gdb.python/py-value.exp +++ b/gdb/testsuite/gdb.python/py-value.exp @@ -274,15 +274,16 @@ proc test_value_in_inferior {} { gdb_test "python inval2 = inval+1" "gdb.MemoryError: Cannot access memory at address 0x0.*" $test gdb_test "python inval.fetch_lazy ()" "gdb.MemoryError: Cannot access memory at address 0x0.*" $test } + set argc_value [get_integer_valueof "argc" 0] gdb_test "python argc_lazy = gdb.parse_and_eval('argc')" gdb_test "python argc_notlazy = gdb.parse_and_eval('argc')" gdb_test "python argc_notlazy.fetch_lazy()" gdb_test "python print (argc_lazy.is_lazy)" "True" gdb_test "python print (argc_notlazy.is_lazy)" "False" - gdb_test "print argc" " = 1" "sanity check argc" + gdb_test "print argc" " = $argc_value" "sanity check argc" gdb_test "python print (argc_lazy.is_lazy)" "\r\nTrue" gdb_test_no_output "set argc=2" - gdb_test "python print (argc_notlazy)" "\r\n1" + gdb_test "python print (argc_notlazy)" "\r\n$argc_value" gdb_test "python print (argc_lazy)" "\r\n2" gdb_test "python print (argc_lazy.is_lazy)" "False"