]> sourceware.org Git - systemtap.git/commitdiff
PR10568: Ensure that aliases pull in their tapset
authorJosh Stone <jistone@redhat.com>
Thu, 27 Aug 2009 22:43:51 +0000 (15:43 -0700)
committerJosh Stone <jistone@redhat.com>
Thu, 27 Aug 2009 22:50:07 +0000 (15:50 -0700)
When a probe alias is resolved in a tapset, the contents of that tapset
should be included in the compiled script, just as we do for global
variables and functions.

* elaborate.cxx (alias_expansion_builder::build): When an alias is
  instantiated, add its stapfile to the session files.
* testsuite/systemtap.base/tapset_includes.exp: New test.
* testsuite/systemtap.base/tapset/*.stp: Testing tapsets for above.

elaborate.cxx
testsuite/systemtap.base/tapset/alias.stp [new file with mode: 0644]
testsuite/systemtap.base/tapset/function.stp [new file with mode: 0644]
testsuite/systemtap.base/tapset/global.stp [new file with mode: 0644]
testsuite/systemtap.base/tapset_includes.exp [new file with mode: 0644]

index bf57f88ffbe85d5cb4d0a60848c97f8e2439b449..17f335d0c59bd9738909ed29d298a96202e0dde2 100644 (file)
@@ -540,7 +540,18 @@ alias_expansion_builder
     else
       n->body = new block (alias->body, use->body);
 
+    unsigned old_num_results = finished_results.size();
     derive_probes (sess, n, finished_results, location->optional);
+
+    // Check whether we resolved something. If so, put the
+    // whole library into the queue if not already there.
+    if (finished_results.size() > old_num_results)
+      {
+        stapfile *f = alias->tok->location.file;
+        if (find (sess.files.begin(), sess.files.end(), f)
+            == sess.files.end())
+          sess.files.push_back (f);
+      }
   }
 
   bool checkForRecursiveExpansion (probe *use)
diff --git a/testsuite/systemtap.base/tapset/alias.stp b/testsuite/systemtap.base/tapset/alias.stp
new file mode 100644 (file)
index 0000000..a36009a
--- /dev/null
@@ -0,0 +1,6 @@
+probe test_alias = end {
+  alias_local = 1
+}
+probe begin {
+  println("included alias")
+}
diff --git a/testsuite/systemtap.base/tapset/function.stp b/testsuite/systemtap.base/tapset/function.stp
new file mode 100644 (file)
index 0000000..45c5f37
--- /dev/null
@@ -0,0 +1,6 @@
+function test_function:long() {
+  return 1
+}
+probe begin {
+  println("included function")
+}
diff --git a/testsuite/systemtap.base/tapset/global.stp b/testsuite/systemtap.base/tapset/global.stp
new file mode 100644 (file)
index 0000000..4a95ae7
--- /dev/null
@@ -0,0 +1,4 @@
+global test_global = 1
+probe begin {
+  println("included global")
+}
diff --git a/testsuite/systemtap.base/tapset_includes.exp b/testsuite/systemtap.base/tapset_includes.exp
new file mode 100644 (file)
index 0000000..06957e0
--- /dev/null
@@ -0,0 +1,21 @@
+# Check that globals, functions, and aliases will pull in probes from the
+# tapset file in which they are defined.
+
+if {![installtest_p]} { untested "tapset includes"; return }
+
+set tapset "$srcdir/$subdir/tapset"
+
+# global
+set script "probe end { if (test_global) println(\"end\") }"
+set ::result_string "included global\nend"
+stap_run_exact "tapset include global" -I$tapset -e $script -c true
+
+# function
+set script "probe end { if (test_function()) println(\"end\") }"
+set ::result_string "included function\nend"
+stap_run_exact "tapset include function" -I$tapset -e $script -c true
+
+# alias
+set script "probe test_alias { if (alias_local) println(\"end\") }"
+set ::result_string "included alias\nend"
+stap_run_exact "tapset include alias" -I$tapset -e $script -c true
This page took 0.099285 seconds and 5 git commands to generate.