2012-01-16 Pedro Alves <palves@redhat.com>
authorPedro Alves <palves@redhat.com>
Mon, 16 Jan 2012 17:31:25 +0000 (17:31 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 16 Jan 2012 17:31:25 +0000 (17:31 +0000)
* lib/gdb.exp (banned_procedures): New variable.
(banned_variables_traced): Rename to ...
(banned_traced): ... this.
(gdb_init): Also trace banned procedures.
(gdb_finish): Also untrace banned procedures.

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

index 63506504b85afeee6879e3a8e1e53b42379b7967..fdc2bf4ee332d03f67ddb22c1f96847ea2b03db8 100644 (file)
@@ -1,3 +1,11 @@
+2012-01-16  Pedro Alves  <palves@redhat.com>
+
+       * lib/gdb.exp (banned_procedures): New variable.
+       (banned_variables_traced): Rename to ...
+       (banned_traced): ... this.
+       (gdb_init): Also trace banned procedures.
+       (gdb_finish): Also untrace banned procedures.
+
 2012-01-16  Pedro Alves  <palves@redhat.com>
 
        Remove all calls to strace.
index 4a59944b9094d7338d260f6dd37c1eecc3a72332..00fe71c90c91694bf3d07aa2f35d13504cee3d65 100644 (file)
@@ -2983,14 +2983,19 @@ if ![info exists gdb_test_timeout] {
 # an error when that happens.
 set banned_variables { bug_id prms_id }
 
+# A list of procedures that GDB testcases should not use.
+# We try to prevent their use by monitoring invocations and raising
+# an error when that happens.
+set banned_procedures { strace }
+
 # gdb_init is called by runtest at start, but also by several
 # tests directly; gdb_finish is only called from within runtest after
 # each test source execution.
 # Placing several traces by repetitive calls to gdb_init leads
 # to problems, as only one trace is removed in gdb_finish.
 # To overcome this possible problem, we add a variable that records
-# if the banned variables are traced.
-set banned_variables_traced 0
+# if the banned variables and procedures are already traced.
+set banned_traced 0
 
 proc gdb_init { args } {
     # Reset the timeout value to the default.  This way, any testcase
@@ -3000,15 +3005,21 @@ proc gdb_init { args } {
     global timeout
     set timeout $gdb_test_timeout
 
-    # Block writes to all banned variables...
+    # Block writes to all banned variables, and invocation of all
+    # banned procedures...
     global banned_variables
-    global banned_variables_traced
-    if (!$banned_variables_traced) {
+    global banned_procedures
+    global banned_traced
+    if (!$banned_traced) {
        foreach banned_var $banned_variables {
             global "$banned_var"
             trace add variable "$banned_var" write error
        }
-       set banned_variables_traced 1
+       foreach banned_proc $banned_procedures {
+           global "$banned_proc"
+           trace add execution "$banned_proc" enter error
+       }
+       set banned_traced 1
     }
 
     # We set LC_ALL, LC_CTYPE, and LANG to C so that we get the same
@@ -3057,13 +3068,18 @@ proc gdb_finish { } {
     # Unblock write access to the banned variables.  Dejagnu typically
     # resets some of them between testcases.
     global banned_variables
-    global banned_variables_traced
-    if ($banned_variables_traced) {
+    global banned_procedures
+    global banned_traced
+    if ($banned_traced) {
        foreach banned_var $banned_variables {
             global "$banned_var"
             trace remove variable "$banned_var" write error
        }
-       set banned_variables_traced 0
+       foreach banned_proc $banned_procedures {
+           global "$banned_proc"
+           trace remove execution "$banned_proc" enter error
+       }
+       set banned_traced 0
     }
 }