diff --git a/src/python/bcc/__init__.py b/src/python/bcc/__init__.py index 6b0e40141da0..d29e69381fbc 100644 --- a/src/python/bcc/__init__.py +++ b/src/python/bcc/__init__.py @@ -287,6 +287,8 @@ def __init__(self, src_file="", hdr_file="", text=None, cb=None, debug=0, if text: self.module = lib.bpf_module_create_c_from_string(text.encode("ascii"), self.debug, cflags_array, len(cflags_array)) + if not self.module: + raise Exception("Failed to compile BPF text:\n%s" % text) else: src_file = BPF._find_file(src_file) hdr_file = BPF._find_file(hdr_file) @@ -296,9 +298,8 @@ def __init__(self, src_file="", hdr_file="", text=None, cb=None, debug=0, else: self.module = lib.bpf_module_create_c(src_file.encode("ascii"), self.debug, cflags_array, len(cflags_array)) - - if not self.module: - raise Exception("Failed to compile BPF module %s" % src_file) + if not self.module: + raise Exception("Failed to compile BPF module %s" % src_file) for usdt_context in usdt_contexts: usdt_context.attach_uprobes(self) diff --git a/tools/biolatency.py b/tools/biolatency.py index 46bebc4ad0e2..49ee7cf8d9da 100755 --- a/tools/biolatency.py +++ b/tools/biolatency.py @@ -40,6 +40,8 @@ help="output interval, in seconds") parser.add_argument("count", nargs="?", default=99999999, help="number of outputs") +parser.add_argument("--ebpf", action="store_true", + help=argparse.SUPPRESS) args = parser.parse_args() countdown = int(args.count) debug = 0 @@ -103,8 +105,10 @@ bpf_text = bpf_text.replace('STORAGE', 'BPF_HISTOGRAM(dist);') bpf_text = bpf_text.replace('STORE', 'dist.increment(bpf_log2l(delta));') -if debug: +if debug or args.ebpf: print(bpf_text) + if args.ebpf: + exit() # load BPF program b = BPF(text=bpf_text) diff --git a/tools/biotop.py b/tools/biotop.py index 8da9255bcdc0..63d6642c5987 100755 --- a/tools/biotop.py +++ b/tools/biotop.py @@ -40,6 +40,8 @@ help="output interval, in seconds") parser.add_argument("count", nargs="?", default=99999999, help="number of outputs") +parser.add_argument("--ebpf", action="store_true", + help=argparse.SUPPRESS) args = parser.parse_args() interval = int(args.interval) countdown = int(args.count) @@ -55,7 +57,7 @@ def signal_ignore(signal, frame): print() # load BPF program -b = BPF(text=""" +bpf_text = """ #include #include @@ -163,7 +165,13 @@ def signal_ignore(signal, frame): return 0; } -""", debug=0) +""" + +if args.ebpf: + print(bpf_text) + exit() + +b = BPF(text=bpf_text) b.attach_kprobe(event="blk_account_io_start", fn_name="trace_pid_start") b.attach_kprobe(event="blk_start_request", fn_name="trace_req_start") b.attach_kprobe(event="blk_mq_start_request", fn_name="trace_req_start") diff --git a/tools/tcplife.py b/tools/tcplife.py index df6845331f01..ac02a340e778 100755 --- a/tools/tcplife.py +++ b/tools/tcplife.py @@ -58,6 +58,8 @@ help="comma-separated list of local ports to trace.") parser.add_argument("-D", "--remoteport", help="comma-separated list of remote ports to trace.") +parser.add_argument("--ebpf", action="store_true", + help=argparse.SUPPRESS) args = parser.parse_args() debug = 0 @@ -375,8 +377,10 @@ bpf_text = bpf_text.replace('FILTER_DPORT', '') bpf_text = bpf_text.replace('FILTER_LPORT', '') -if debug: +if debug or args.ebpf: print(bpf_text) + if args.ebpf: + exit() # event data TASK_COMM_LEN = 16 # linux/sched.h