[DTrace-devel] [PATCH 03/14] test: Add test to check DPTR flag propagation

eugene.loh at oracle.com eugene.loh at oracle.com
Thu Nov 3 19:52:15 UTC 2022


From: Eugene Loh <eugene.loh at oracle.com>

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 test/unittest/codegen/tst.DPTR.d   | 25 ++++++++++++++++++++++++
 test/unittest/codegen/tst.DPTR.r   | 26 +++++++++++++++++++++++++
 test/unittest/codegen/tst.DPTR.r.p | 31 ++++++++++++++++++++++++++++++
 3 files changed, 82 insertions(+)
 create mode 100644 test/unittest/codegen/tst.DPTR.d
 create mode 100644 test/unittest/codegen/tst.DPTR.r
 create mode 100755 test/unittest/codegen/tst.DPTR.r.p

diff --git a/test/unittest/codegen/tst.DPTR.d b/test/unittest/codegen/tst.DPTR.d
new file mode 100644
index 00000000..1256a402
--- /dev/null
+++ b/test/unittest/codegen/tst.DPTR.d
@@ -0,0 +1,25 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * Check the DPTR annotations in the parse tree.
+ */
+
+/* @@runtest-opts: -xtree=4 -e */
+/* @@nosort */
+/* @@xfail: DPTR flag is not propagated properly */
+
+syscall::write:entry
+{
+  myvar_int = 4;
+  myvar_string = "abcde";
+  myvar_alloca = alloca(4);
+  myvar_basename = basename("/foo/bar");
+  myvar_copyin = copyin(arg1, 4);
+  myvar_copyinstr = copyinstr(arg1);
+  myvar_dirname = dirname("/foo/bar");
+}
diff --git a/test/unittest/codegen/tst.DPTR.r b/test/unittest/codegen/tst.DPTR.r
new file mode 100644
index 00000000..78ba8984
--- /dev/null
+++ b/test/unittest/codegen/tst.DPTR.r
@@ -0,0 +1,26 @@
+OP2 =
+VARIABLE myvar_int
+INT {ptr}
+OP2 = DPTR
+VARIABLE myvar_string DPTR
+STRING "abcde" DPTR
+OP2 = DPTR
+VARIABLE myvar_alloca DPTR
+FUNC alloca DPTR
+INT {ptr}
+OP2 = DPTR
+VARIABLE myvar_basename DPTR
+FUNC basename DPTR
+STRING "/foo/bar" DPTR
+OP2 = DPTR
+VARIABLE myvar_copyin DPTR
+FUNC copyin DPTR
+INT {ptr}
+OP2 = DPTR
+VARIABLE myvar_copyinstr DPTR
+FUNC copyinstr DPTR
+INT {ptr}
+OP2 = DPTR
+VARIABLE myvar_dirname DPTR
+FUNC dirname DPTR
+STRING "/foo/bar" DPTR
diff --git a/test/unittest/codegen/tst.DPTR.r.p b/test/unittest/codegen/tst.DPTR.r.p
new file mode 100755
index 00000000..c49fb909
--- /dev/null
+++ b/test/unittest/codegen/tst.DPTR.r.p
@@ -0,0 +1,31 @@
+#!/usr/bin/awk -f
+
+# set flag to look for the clause
+BEGIN { read_clause = 0 }
+
+# we found the beginning of the clause
+/^ *PDESC syscall::write:entry/ {
+    read_clause = 1;
+    getline;
+    getline;
+    next;
+}
+
+# if not in the clause, keep looking
+read_clause == 0 { next }
+
+# if we were reading the clause but get to "Parse tree", we are done
+/^Parse tree \(Pass 3\):$/ { exit(0); }
+
+# dump interesting stuff from the clause
+/^ *OP2 /      && /DPTR/    { print $1, $2, "DPTR"; next }
+/^ *OP2 /                   { print $1, $2        ; next }
+/^ *VARIABLE / && / myvar_/ &&
+                  /DPTR/    { print $1, $3, "DPTR"; next }
+/^ *VARIABLE / && / myvar_/ { print $1, $3        ; next }
+/^ *FUNC /     && /DPTR/    { print $1, $2, "DPTR"; next }
+/^ *FUNC /                  { print $1, $2        ; next }
+/^ *INT /      && /DPTR/    { print $1, $2, "DPTR"; next }
+/^ *INT /                   { print $1, $2        ; next }
+/^ *STRING /   && /DPTR/    { print $1, $2, "DPTR"; next }
+/^ *STRING /                { print $1, $2        ; next }
-- 
2.18.4




More information about the DTrace-devel mailing list