testsuite: Prevent writes to prms_id and bug_id.
authorJoel Brobecker <brobecker@gnat.com>
Mon, 17 May 2010 17:11:28 +0000 (17:11 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Mon, 17 May 2010 17:11:28 +0000 (17:11 +0000)
gdb/testsuite/ChangeLog:

        * 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.

gdb/testsuite/ChangeLog
gdb/testsuite/lib/gdb.exp

index b53e6ce6986c212040b2b58943c1c3c4b384c9d1..e3905bada09c896fa142385edec0c7ee3ac1dc86 100644 (file)
@@ -1,3 +1,10 @@
+2010-05-17  Joel Brobecker  <brobecker@adacore.com>
+
+       * 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  <brobecker@adacore.com>
 
        * gdb.base/gdb11530.exp: Delete setting of prms_id and bug_id.
index 8be2a7240a94e0f2d5744933dc1ed8fd25d5cee5..70df5ea2728401b0ce13ca0b79ed25619d73c804 100644 (file)
@@ -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