Commit f5dbbdbb authored by ShelbyFrances's avatar ShelbyFrances

tools: support -I abspath in trace, argdist

parent 86cd5351
...@@ -619,7 +619,8 @@ argdist -p 2780 -z 120 \\ ...@@ -619,7 +619,8 @@ argdist -p 2780 -z 120 \\
"(see examples below)") "(see examples below)")
parser.add_argument("-I", "--include", action="append", parser.add_argument("-I", "--include", action="append",
metavar="header", metavar="header",
help="additional header files to include in the BPF program") help="additional header files to include in the BPF program "
"as either full path, or relative to '/usr/include'")
self.args = parser.parse_args() self.args = parser.parse_args()
self.usdt_ctx = None self.usdt_ctx = None
...@@ -640,7 +641,12 @@ struct __string_t { char s[%d]; }; ...@@ -640,7 +641,12 @@ struct __string_t { char s[%d]; };
#include <uapi/linux/ptrace.h> #include <uapi/linux/ptrace.h>
""" % self.args.string_size """ % self.args.string_size
for include in (self.args.include or []): for include in (self.args.include or []):
bpf_source += "#include <%s>\n" % include if include.startswith((".", "/")):
include = os.path.abspath(include)
bpf_source += "#include \"%s\"\n" % include
else:
bpf_source += "#include <%s>\n" % include
bpf_source += BPF.generate_auto_includes( bpf_source += BPF.generate_auto_includes(
map(lambda p: p.raw_spec, self.probes)) map(lambda p: p.raw_spec, self.probes))
for probe in self.probes: for probe in self.probes:
......
...@@ -624,7 +624,8 @@ trace 'p::SyS_nanosleep(struct timespec *ts) "sleep for %lld ns", ts->tv_nsec' ...@@ -624,7 +624,8 @@ trace 'p::SyS_nanosleep(struct timespec *ts) "sleep for %lld ns", ts->tv_nsec'
help="probe specifier (see examples)") help="probe specifier (see examples)")
parser.add_argument("-I", "--include", action="append", parser.add_argument("-I", "--include", action="append",
metavar="header", metavar="header",
help="additional header files to include in the BPF program") help="additional header files to include in the BPF program "
"as either full path, or relative to '/usr/include'")
self.args = parser.parse_args() self.args = parser.parse_args()
if self.args.tgid and self.args.pid: 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 -t may be specified")
...@@ -644,7 +645,11 @@ trace 'p::SyS_nanosleep(struct timespec *ts) "sleep for %lld ns", ts->tv_nsec' ...@@ -644,7 +645,11 @@ trace 'p::SyS_nanosleep(struct timespec *ts) "sleep for %lld ns", ts->tv_nsec'
""" """
for include in (self.args.include or []): for include in (self.args.include or []):
self.program += "#include <%s>\n" % include if include.startswith((".", "/")):
include = os.path.abspath(include)
self.program += "#include \"%s\"\n" % include
else:
self.program += "#include <%s>\n" % include
self.program += BPF.generate_auto_includes( self.program += BPF.generate_auto_includes(
map(lambda p: p.raw_probe, self.probes)) map(lambda p: p.raw_probe, self.probes))
for probe in self.probes: for probe in self.probes:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment