Commit 841a4940 authored by 4ast's avatar 4ast

Merge pull request #195 from iovisor/bblanco_dev

Change auto-loading behavior of trace_print
parents f63f35bc e12a95da
...@@ -8,4 +8,4 @@ ...@@ -8,4 +8,4 @@
from bcc import BPF from bcc import BPF
BPF(text='void sys_clone(void *ctx) { bpf_trace_printk("Hello, World!\\n"); }').trace_print() BPF(text='void kprobe__sys_clone(void *ctx) { bpf_trace_printk("Hello, World!\\n"); }').trace_print()
...@@ -348,13 +348,20 @@ class BPF(object): ...@@ -348,13 +348,20 @@ class BPF(object):
if self.module == None: if self.module == None:
raise Exception("Failed to compile BPF module %s" % src_file) raise Exception("Failed to compile BPF module %s" % src_file)
def load_func(self, func_name, prog_type): def load_funcs(self, prog_type=KPROBE):
# empty func_name signifies auto-detection...works when only 1 fn exists """load_funcs(prog_type=KPROBE)
if not func_name:
if lib.bpf_num_functions(self.module) != 1: Load all functions in this BPF module with the given type.
raise Exception("Param func_name is None but num_functions > 1, ambiguous") Returns a list of the function handles."""
func_name = lib.bpf_function_name(self.module, 0).decode()
fns = []
for i in range(0, lib.bpf_num_functions(self.module)):
func_name = lib.bpf_function_name(self.module, i).decode()
fns.append(self.load_func(func_name, prog_type))
return fns
def load_func(self, func_name, prog_type):
if func_name in self.funcs: if func_name in self.funcs:
return self.funcs[func_name] return self.funcs[func_name]
...@@ -600,8 +607,12 @@ class BPF(object): ...@@ -600,8 +607,12 @@ class BPF(object):
# Cater to one-liner case where attach_kprobe is omitted and C function # Cater to one-liner case where attach_kprobe is omitted and C function
# name matches that of the kprobe. # name matches that of the kprobe.
if len(open_kprobes) == 0: if len(open_kprobes) == 0:
fn = self.load_func(None, BPF.KPROBE) fns = self.load_funcs(BPF.KPROBE)
self.attach_kprobe(event=fn.name, fn_name=fn.name) for fn in fns:
if fn.name.startswith("kprobe__"):
self.attach_kprobe(event=fn.name[8:], fn_name=fn.name)
elif fn.name.startswith("kretprobe__"):
self.attach_kprobe(event=fn.name[11:], fn_name=fn.name)
while True: while True:
if fmt: if fmt:
......
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