Blame SOURCES/rhbz1643997.0018-tapset-bpf-task.stp-rudiment-of-task-tapset.patch

e4e640
From ba62b58974fd25f7281fa151411c8e32b3951fbb Mon Sep 17 00:00:00 2001
e4e640
From: Serhei Makarov <smakarov@redhat.com>
e4e640
Date: Fri, 2 Nov 2018 12:22:01 -0400
e4e640
Subject: [PATCH 18/32] tapset/bpf/task.stp :: rudiment of task tapset
e4e640
e4e640
---
e4e640
 tapset/bpf/task.stp                         | 20 ++++++++++++++++++++
e4e640
 testsuite/systemtap.bpf/bpf_tests/task1.stp | 15 +++++++++++++++
e4e640
 2 files changed, 35 insertions(+)
e4e640
 create mode 100644 tapset/bpf/task.stp
e4e640
 create mode 100644 testsuite/systemtap.bpf/bpf_tests/task1.stp
e4e640
e4e640
diff --git a/tapset/bpf/task.stp b/tapset/bpf/task.stp
e4e640
new file mode 100644
e4e640
index 000000000..9f558a166
e4e640
--- /dev/null
e4e640
+++ b/tapset/bpf/task.stp
e4e640
@@ -0,0 +1,20 @@
e4e640
+// task information tapset
e4e640
+// Copyright (C) 2018 Red Hat Inc.
e4e640
+//
e4e640
+// This file is part of systemtap, and is free software.  You can
e4e640
+// redistribute it and/or modify it under the terms of the GNU General
e4e640
+// Public License (GPL); either version 2, or (at your option) any
e4e640
+// later version.
e4e640
+
e4e640
+@__private30 function _task_cur:long()
e4e640
+%{ /* bpf */ /* pure */
e4e640
+  call, $$, get_current_task;
e4e640
+%}
e4e640
+
e4e640
+/**
e4e640
+ * sfunction task_current - The current task_struct of the current task
e4e640
+ */
e4e640
+function task_current:long () {
e4e640
+  // TODO: return & @task(_task_cur())
e4e640
+  return & @cast(_task_cur(), "task_struct")
e4e640
+}
e4e640
diff --git a/testsuite/systemtap.bpf/bpf_tests/task1.stp b/testsuite/systemtap.bpf/bpf_tests/task1.stp
e4e640
new file mode 100644
e4e640
index 000000000..b0faab361
e4e640
--- /dev/null
e4e640
+++ b/testsuite/systemtap.bpf/bpf_tests/task1.stp
e4e640
@@ -0,0 +1,15 @@
e4e640
+probe begin {
e4e640
+	printf("BEGIN\n")
e4e640
+}
e4e640
+
e4e640
+probe kernel.function("vfs_read") {
e4e640
+	// TODO: PR23816, task.stp tapset
e4e640
+	printf("vfs_read by %s", execname())
e4e640
+	printf("/%s", kernel_string(@cast(task_current(), "task_struct")->comm))
e4e640
+	printf(" PID %d/%d\n", pid(), @cast(task_current(), "task_struct")->tgid)
e4e640
+	exit()
e4e640
+}
e4e640
+
e4e640
+probe end {
e4e640
+	printf("END PASS\n")
e4e640
+}
e4e640
-- 
e4e640
2.14.5
e4e640