add examples for including additional header files
Fix issue #1478
Two tools, trace.py and argdist.py, and their corresponding
example files were changed.
Fixed a minor typo in one of trace.py error messages.
Signed-off-by: Yonghong Song <yhs@fb.com>
diff --git a/tools/argdist.py b/tools/argdist.py
index 61f8e00..9724073 100755
--- a/tools/argdist.py
+++ b/tools/argdist.py
@@ -590,6 +590,13 @@
-C 'p:c:write(int fd, char* buf, size_t len):char*:buf:fd==1'
Spy on writes to STDOUT performed by process 2780, up to a string size
of 120 characters
+
+argdist -I 'kernel/sched/sched.h' \\
+ -C 'p::__account_cfs_rq_runtime(struct cfs_rq *cfs_rq):s64:cfs_rq->runtime_remaining'
+ Trace on the cfs scheduling runqueue remaining runtime. The struct cfs_rq is defined
+ in kernel/sched/sched.h which is in kernel source tree and not in kernel-devel
+ package. So this command needs to run at the kernel source tree root directory
+ so that the added header file can be found by the compiler.
"""
def __init__(self):
@@ -625,7 +632,9 @@
parser.add_argument("-I", "--include", action="append",
metavar="header",
help="additional header files to include in the BPF program "
- "as either full path, or relative to '/usr/include'")
+ "as either full path, "
+ "or relative to relative to current working directory, "
+ "or relative to default kernel header search path")
self.args = parser.parse_args()
self.usdt_ctx = None
diff --git a/tools/argdist_example.txt b/tools/argdist_example.txt
index 963554f..dec9e6f 100644
--- a/tools/argdist_example.txt
+++ b/tools/argdist_example.txt
@@ -363,7 +363,8 @@
below)
-I header, --include header
additional header files to include in the BPF program
- as either full path, or relative to '/usr/include'
+ as either full path, or relative to current working directory,
+ or relative to default kernel header search path
Probe specifier syntax:
{p,r,t,u}:{[library],category}:function(signature)[:type[,type...]:expr[,expr...][:filter]][#label]
@@ -439,3 +440,10 @@
-C 'p:c:write(int fd, char* buf, size_t len):char*:buf:fd==1'
Spy on writes to STDOUT performed by process 2780, up to a string size
of 120 characters
+
+argdist -I 'kernel/sched/sched.h' \
+ -C 'p::__account_cfs_rq_runtime(struct cfs_rq *cfs_rq):s64:cfs_rq->runtime_remaining'
+ Trace on the cfs scheduling runqueue remaining runtime. The struct cfs_rq is defined
+ in kernel/sched/sched.h which is in kernel source tree and not in kernel-devel
+ package. So this command needs to run at the kernel source tree root directory
+ so that the added header file can be found by the compiler.
diff --git a/tools/trace.py b/tools/trace.py
index 4390328..a91a516 100755
--- a/tools/trace.py
+++ b/tools/trace.py
@@ -576,6 +576,16 @@
Trace the USDT probe pthread_create when its 4th argument is non-zero
trace 'p::SyS_nanosleep(struct timespec *ts) "sleep for %lld ns", ts->tv_nsec'
Trace the nanosleep syscall and print the sleep duration in ns
+trace -I 'linux/fs.h' \\
+ 'p::uprobe_register(struct inode *inode) "a_ops = %llx", inode->i_mapping->a_ops'
+ Trace the uprobe_register inode mapping ops, and the symbol can be found
+ in /proc/kallsyms
+trace -I 'kernel/sched/sched.h' \\
+ 'p::__account_cfs_rq_runtime(struct cfs_rq *cfs_rq) "%d", cfs_rq->runtime_remaining'
+ Trace the cfs scheduling runqueue remaining runtime. The struct cfs_rq is defined
+ in kernel/sched/sched.h which is in kernel source tree and not in kernel-devel
+ package. So this command needs to run at the kernel source tree root directory
+ so that the added header file can be found by the compiler.
"""
def __init__(self):
@@ -615,10 +625,12 @@
parser.add_argument("-I", "--include", action="append",
metavar="header",
help="additional header files to include in the BPF program "
- "as either full path, or relative to '/usr/include'")
+ "as either full path, "
+ "or relative to current working directory, "
+ "or relative to default kernel header search path")
self.args = parser.parse_args()
if self.args.tgid and self.args.pid:
- parser.error("only one of -p and -t may be specified")
+ parser.error("only one of -p and -L may be specified")
def _create_probes(self):
Probe.configure(self.args)
diff --git a/tools/trace_example.txt b/tools/trace_example.txt
index eb72e5e..2d3ffad 100644
--- a/tools/trace_example.txt
+++ b/tools/trace_example.txt
@@ -249,7 +249,8 @@
-U, --user-stack output user stack trace
-I header, --include header
additional header files to include in the BPF program
- as either full path, or relative to '/usr/include'
+ as either full path, or relative to current working directory,
+ or relative to default kernel header search path
EXAMPLES:
@@ -277,3 +278,13 @@
Trace the USDT probe pthread_create when its 4th argument is non-zero
trace 'p::SyS_nanosleep(struct timespec *ts) "sleep for %lld ns", ts->tv_nsec'
Trace the nanosleep syscall and print the sleep duration in ns
+trace -I 'linux/fs.h' \
+ 'p::uprobe_register(struct inode *inode) "a_ops = %llx", inode->i_mapping->a_ops'
+ Trace the uprobe_register inode mapping ops, and the symbol can be found
+ in /proc/kallsyms
+trace -I 'kernel/sched/sched.h' \
+ 'p::__account_cfs_rq_runtime(struct cfs_rq *cfs_rq) "%d", cfs_rq->runtime_remaining'
+ Trace the cfs scheduling runqueue remaining runtime. The struct cfs_rq is defined
+ in kernel/sched/sched.h which is in kernel source tree and not in kernel-devel
+ package. So this command needs to run at the kernel source tree root directory
+ so that the added header file can be found by the compiler.