diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index b53e6ce698..e3905bada0 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2010-05-17 Joel Brobecker + + * lib/gdb.exp (banned_variables): New variable/constant. + (gdb_init): Add write trace on variables listed in banned_variables. + (gdb_finish): Remove write traces on variables listed in + banned_variables. + 2010-05-17 Joel Brobecker * gdb.base/gdb11530.exp: Delete setting of prms_id and bug_id. diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 8be2a7240a..70df5ea272 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -2480,6 +2480,11 @@ if ![info exists gdb_test_timeout] { set gdb_test_timeout $timeout } +# A list of global variables that GDB testcases should not use. +# We try to prevent their use by monitoring write accesses and raising +# an error when that happens. +set banned_variables { bug_id prms_id } + proc gdb_init { args } { # Reset the timeout value to the default. This way, any testcase # that changes the timeout value without resetting it cannot affect @@ -2488,6 +2493,13 @@ proc gdb_init { args } { global timeout set timeout $gdb_test_timeout + # Block writes to all banned variables... + global banned_variables + foreach banned_var $banned_variables { + global "$banned_var" + trace variable "$banned_var" w error + } + return [eval default_gdb_init $args]; } @@ -2501,6 +2513,14 @@ proc gdb_finish { } { eval remote_file target delete $cleanfiles set cleanfiles {} } + + # Unblock write access to the banned variables. Dejagnu typically + # resets some of them between testcases. + global banned_variables + foreach banned_var $banned_variables { + global "$banned_var" + trace remove variable "$banned_var" write error + } } global debug_format