Blame SOURCES/rhbz1643997.0001-testsuite-systemtap.bpf-diagnose-a-bug-in-print_form.patch

e4e640
From 16e9cfa909a183d8e61142d80575189408a2a244 Mon Sep 17 00:00:00 2001
e4e640
From: Serhei Makarov <smakarov@redhat.com>
e4e640
Date: Wed, 24 Oct 2018 15:56:44 -0400
e4e640
Subject: [PATCH 01/32] testsuite/systemtap.bpf :: diagnose a bug in
e4e640
 print_format("%s%s", ...)
e4e640
e4e640
---
e4e640
 testsuite/systemtap.bpf/asm_tests/string-basic.stp | 19 ++++++++++
e4e640
 testsuite/systemtap.bpf/bpf_tests/string3.stp      | 44 ++++++++++++++++++++++
e4e640
 2 files changed, 63 insertions(+)
e4e640
 create mode 100644 testsuite/systemtap.bpf/asm_tests/string-basic.stp
e4e640
 create mode 100644 testsuite/systemtap.bpf/bpf_tests/string3.stp
e4e640
e4e640
diff --git a/testsuite/systemtap.bpf/asm_tests/string-basic.stp b/testsuite/systemtap.bpf/asm_tests/string-basic.stp
e4e640
new file mode 100644
e4e640
index 000000000..7377e4399
e4e640
--- /dev/null
e4e640
+++ b/testsuite/systemtap.bpf/asm_tests/string-basic.stp
e4e640
@@ -0,0 +1,19 @@
e4e640
+/* narrowing down a bug that turned out unrelated to assembly */
e4e640
+function foo:string() %{ /* bpf */ /* pure */
e4e640
+  0xbf, $$, "test", -, -;
e4e640
+%}
e4e640
+
e4e640
+probe begin {
e4e640
+  printf("U %s %s\n", foo(), "test"/*bar (5)*/)
e4e640
+}
e4e640
+
e4e640
+probe kernel.function("vfs_read") {
e4e640
+  printf("K 1 %s\n", foo()) // <- this worked
e4e640
+  printf("K 2 %s\n", "test") // <- this worked
e4e640
+  printf("K 3 %s %s\n", foo(), "test") // <- this didn't
e4e640
+  printf("K 4 %s %s\n", "test", "test") // <- this didn't
e4e640
+  printf("K 5 %s %s\n", foo(), foo()) // <- this didn't
e4e640
+  printf("K 6 %s", "test") printf(" %s\n", "test") // <- this did
e4e640
+  printf("K %d %s\n", 7, "test") // <- this did
e4e640
+  exit()
e4e640
+}
e4e640
diff --git a/testsuite/systemtap.bpf/bpf_tests/string3.stp b/testsuite/systemtap.bpf/bpf_tests/string3.stp
e4e640
new file mode 100644
e4e640
index 000000000..cf6ec071d
e4e640
--- /dev/null
e4e640
+++ b/testsuite/systemtap.bpf/bpf_tests/string3.stp
e4e640
@@ -0,0 +1,44 @@
e4e640
+// stapbpf string manipulation -- store string in global from kernel space
e4e640
+// XXX: the 'locking' scheme here is kind of dumb but it seems to work
e4e640
+
e4e640
+global counter = 0
e4e640
+global var
e4e640
+global tab1
e4e640
+global tab2
e4e640
+
e4e640
+@define test_print
e4e640
+%(
e4e640
+  /* Test multiple %s in one printf */
e4e640
+  printf("[")
e4e640
+  printf("%s%s%s", "str0", var, tab1[17])
e4e640
+  printf("%s]", tab2["key"])
e4e640
+%)
e4e640
+
e4e640
+probe begin {
e4e640
+  printf("BEGIN")
e4e640
+}
e4e640
+
e4e640
+probe kernel.function("vfs_read") {
e4e640
+  if (counter == 0) {
e4e640
+    var = "str1"
e4e640
+    tab1[17] = "str2"
e4e640
+    tab2["key"] = "str3"
e4e640
+    printf("probe0")
e4e640
+    @test_print
e4e640
+    counter = 1
e4e640
+  }
e4e640
+}
e4e640
+
e4e640
+probe kernel.function("vfs_read") {
e4e640
+  if (counter == 1) {
e4e640
+    printf("probe1")
e4e640
+    @test_print
e4e640
+    exit()
e4e640
+  }
e4e640
+}
e4e640
+
e4e640
+probe end {
e4e640
+  printf("end")
e4e640
+  @test_print
e4e640
+  printf("END\n")
e4e640
+}
e4e640
-- 
e4e640
2.14.5
e4e640