summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeo Yan <leo.yan@linaro.org>2020-02-23 03:53:07 +0000
committerKhem Raj <raj.khem@gmail.com>2020-02-23 22:34:40 -0800
commit7210e0b0de329cb744afe111153f2cd94a6a6196 (patch)
treefecf12df0e4b098a5be855333784c6593d6f8d3f
parentcc013379b59cbe6c3f9620d080e5b43347da44c8 (diff)
downloadmeta-clang-7210e0b0de329cb744afe111153f2cd94a6a6196.tar.gz
BCC: Add build recipe
BPF Compiler Collection (BCC) is a toolkit for creating efficient kernel tracing and manipulation programs, and includes versatile tools and examples which based on eBPF. This tool is very widely used on server section, but we also can use it for embedded system, e.g. use its function trace utilities (trace.py and argdist.py) to trace kernel function parameters and return values. This patch adds recipe for BCC version 0.12.0. This patch also contains a patch to change cmake file so can look for libraries and headers which are installed in target sysroot-recipe path for cross compilation. Signed-off-by: Sumit Garg <sumit.garg@linaro.org> Co-developed-by: Leo Yan <leo.yan@linaro.org>
-rw-r--r--recipes-devtools/bcc/bcc/0001-Allow-to-build-with-OE-LLVM-cross-compiled-package.patch32
-rw-r--r--recipes-devtools/bcc/bcc/0001-BCC-Use-python-3.patch1662
-rw-r--r--recipes-devtools/bcc/bcc_0.12.0.bb38
3 files changed, 1732 insertions, 0 deletions
diff --git a/recipes-devtools/bcc/bcc/0001-Allow-to-build-with-OE-LLVM-cross-compiled-package.patch b/recipes-devtools/bcc/bcc/0001-Allow-to-build-with-OE-LLVM-cross-compiled-package.patch
new file mode 100644
index 0000000..b5acadc
--- /dev/null
+++ b/recipes-devtools/bcc/bcc/0001-Allow-to-build-with-OE-LLVM-cross-compiled-package.patch
@@ -0,0 +1,32 @@
1From 93cf25ba663e68a6a6f4237fbe0ef8349b3f37ef Mon Sep 17 00:00:00 2001
2From: Sumit Garg <sumit.garg@linaro.org>
3Date: Fri, 14 Feb 2020 07:40:11 +0000
4Subject: [PATCH] Allow to build with OE LLVM cross compiled package
5
6The default LLVM cmake package requires all libraries, headers and tools
7to be present but in case of cross compilation, OE only provides
8target specific libraries and headers and requires native llvm tools.
9
10So instead of looking for a complete llvm package, look for libraries and
11headers which are installed in target sysroot-recipe path.
12
13Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
14---
15 CMakeLists.txt | 2 --
16 1 file changed, 2 deletions(-)
17
18diff --git a/CMakeLists.txt b/CMakeLists.txt
19index 7bd0f3b2..6f1f12c0 100644
20--- a/CMakeLists.txt
21+++ b/CMakeLists.txt
22@@ -39,8 +39,6 @@ endif()
23 if(NOT PYTHON_ONLY AND ENABLE_CLANG_JIT)
24 find_package(BISON)
25 find_package(FLEX)
26-find_package(LLVM REQUIRED CONFIG)
27-message(STATUS "Found LLVM: ${LLVM_INCLUDE_DIRS} ${LLVM_PACKAGE_VERSION}")
28 find_package(LibElf REQUIRED)
29
30 # clang is linked as a library, but the library path searching is
31--
322.17.1
diff --git a/recipes-devtools/bcc/bcc/0001-BCC-Use-python-3.patch b/recipes-devtools/bcc/bcc/0001-BCC-Use-python-3.patch
new file mode 100644
index 0000000..e1db752
--- /dev/null
+++ b/recipes-devtools/bcc/bcc/0001-BCC-Use-python-3.patch
@@ -0,0 +1,1662 @@
1From 7491be67e0795f00566d46e5f055a955ea0aac8e Mon Sep 17 00:00:00 2001
2From: Leo Yan <leo.yan@linaro.org>
3Date: Sat, 22 Feb 2020 16:22:33 +0000
4Subject: [PATCH] BCC: Use python 3
5
6Signed-off-by: Leo Yan <leo.yan@linaro.org>
7---
8 examples/hello_world.py | 2 +-
9 examples/networking/distributed_bridge/main.py | 2 +-
10 examples/networking/distributed_bridge/tunnel.py | 2 +-
11 examples/networking/distributed_bridge/tunnel_mesh.py | 2 +-
12 examples/networking/dns_matching/dns_matching.py | 2 +-
13 examples/networking/http_filter/http-parse-complete.py | 2 +-
14 examples/networking/http_filter/http-parse-simple.py | 2 +-
15 examples/networking/neighbor_sharing/tc_neighbor_sharing.py | 2 +-
16 examples/networking/simple_tc.py | 2 +-
17 examples/networking/tc_perf_event.py | 2 +-
18 examples/networking/tunnel_monitor/main.py | 2 +-
19 examples/networking/tunnel_monitor/monitor.py | 2 +-
20 examples/networking/vlan_filter/data-plane-tracing.py | 2 +-
21 examples/networking/vlan_learning/vlan_learning.py | 2 +-
22 examples/networking/xdp/xdp_drop_count.py | 2 +-
23 examples/networking/xdp/xdp_macswap_count.py | 2 +-
24 examples/networking/xdp/xdp_redirect_cpu.py | 2 +-
25 examples/networking/xdp/xdp_redirect_map.py | 2 +-
26 examples/tracing/bitehist.py | 2 +-
27 examples/tracing/dddos.py | 2 +-
28 examples/tracing/disksnoop.py | 2 +-
29 examples/tracing/hello_fields.py | 2 +-
30 examples/tracing/hello_perf_output.py | 2 +-
31 examples/tracing/kvm_hypercall.py | 2 +-
32 examples/tracing/mallocstacks.py | 2 +-
33 examples/tracing/mysqld_query.py | 2 +-
34 examples/tracing/nodejs_http_server.py | 2 +-
35 examples/tracing/stack_buildid_example.py | 2 +-
36 examples/tracing/stacksnoop.py | 2 +-
37 examples/tracing/strlen_count.py | 2 +-
38 examples/tracing/strlen_hist.py | 2 +-
39 examples/tracing/strlen_snoop.py | 2 +-
40 examples/tracing/sync_timing.py | 2 +-
41 examples/tracing/task_switch.py | 2 +-
42 examples/tracing/tcpv4connect.py | 2 +-
43 examples/tracing/trace_fields.py | 2 +-
44 examples/tracing/trace_perf_output.py | 2 +-
45 examples/tracing/urandomread-explicit.py | 2 +-
46 examples/tracing/urandomread.py | 2 +-
47 examples/tracing/vfsreadlat.py | 2 +-
48 examples/usdt_sample/scripts/lat_avg.py | 2 +-
49 examples/usdt_sample/scripts/lat_dist.py | 2 +-
50 examples/usdt_sample/scripts/latency.py | 2 +-
51 tools/argdist.py | 2 +-
52 tools/bashreadline.py | 2 +-
53 tools/biolatency.py | 2 +-
54 tools/biosnoop.py | 2 +-
55 tools/biotop.py | 2 +-
56 tools/bitesize.py | 2 +-
57 tools/bpflist.py | 2 +-
58 tools/btrfsdist.py | 2 +-
59 tools/btrfsslower.py | 2 +-
60 tools/cachestat.py | 2 +-
61 tools/cachetop.py | 2 +-
62 tools/capable.py | 2 +-
63 tools/cpudist.py | 2 +-
64 tools/cpuunclaimed.py | 2 +-
65 tools/criticalstat.py | 2 +-
66 tools/dbslower.py | 2 +-
67 tools/dbstat.py | 2 +-
68 tools/dcsnoop.py | 2 +-
69 tools/dcstat.py | 2 +-
70 tools/deadlock.py | 2 +-
71 tools/drsnoop.py | 2 +-
72 tools/execsnoop.py | 2 +-
73 tools/exitsnoop.py | 2 +-
74 tools/ext4dist.py | 2 +-
75 tools/ext4slower.py | 2 +-
76 tools/filelife.py | 2 +-
77 tools/fileslower.py | 2 +-
78 tools/filetop.py | 2 +-
79 tools/funccount.py | 2 +-
80 tools/funclatency.py | 2 +-
81 tools/funcslower.py | 2 +-
82 tools/gethostlatency.py | 2 +-
83 tools/hardirqs.py | 2 +-
84 tools/inject.py | 2 +-
85 tools/killsnoop.py | 2 +-
86 tools/klockstat.py | 2 +-
87 tools/lib/ucalls.py | 2 +-
88 tools/lib/uflow.py | 2 +-
89 tools/lib/ugc.py | 2 +-
90 tools/lib/uobjnew.py | 2 +-
91 tools/lib/ustat.py | 2 +-
92 tools/lib/uthreads.py | 2 +-
93 tools/llcstat.py | 2 +-
94 tools/mdflush.py | 2 +-
95 tools/memleak.py | 2 +-
96 tools/mountsnoop.py | 2 +-
97 tools/mysqld_qslower.py | 2 +-
98 tools/nfsdist.py | 2 +-
99 tools/nfsslower.py | 2 +-
100 tools/offcputime.py | 2 +-
101 tools/offwaketime.py | 2 +-
102 tools/old/bashreadline.py | 2 +-
103 tools/old/biosnoop.py | 2 +-
104 tools/old/filelife.py | 2 +-
105 tools/old/gethostlatency.py | 2 +-
106 tools/old/killsnoop.py | 2 +-
107 tools/old/memleak.py | 2 +-
108 tools/old/offcputime.py | 2 +-
109 tools/old/offwaketime.py | 2 +-
110 tools/old/oomkill.py | 2 +-
111 tools/old/opensnoop.py | 2 +-
112 tools/old/profile.py | 2 +-
113 tools/old/softirqs.py | 2 +-
114 tools/old/stackcount.py | 2 +-
115 tools/old/stacksnoop.py | 2 +-
116 tools/old/statsnoop.py | 2 +-
117 tools/old/syncsnoop.py | 2 +-
118 tools/old/tcpaccept.py | 2 +-
119 tools/old/tcpconnect.py | 2 +-
120 tools/old/wakeuptime.py | 2 +-
121 tools/oomkill.py | 2 +-
122 tools/opensnoop.py | 2 +-
123 tools/pidpersec.py | 2 +-
124 tools/profile.py | 2 +-
125 tools/runqlat.py | 2 +-
126 tools/runqlen.py | 2 +-
127 tools/runqslower.py | 2 +-
128 tools/shmsnoop.py | 2 +-
129 tools/slabratetop.py | 2 +-
130 tools/sofdsnoop.py | 2 +-
131 tools/softirqs.py | 2 +-
132 tools/solisten.py | 2 +-
133 tools/sslsniff.py | 2 +-
134 tools/stackcount.py | 2 +-
135 tools/statsnoop.py | 2 +-
136 tools/syncsnoop.py | 2 +-
137 tools/syscount.py | 2 +-
138 tools/tcpaccept.py | 2 +-
139 tools/tcpconnect.py | 2 +-
140 tools/tcpconnlat.py | 2 +-
141 tools/tcpdrop.py | 2 +-
142 tools/tcplife.py | 2 +-
143 tools/tcpretrans.py | 2 +-
144 tools/tcpstates.py | 2 +-
145 tools/tcpsubnet.py | 2 +-
146 tools/tcptop.py | 2 +-
147 tools/tcptracer.py | 2 +-
148 tools/tplist.py | 2 +-
149 tools/trace.py | 2 +-
150 tools/ttysnoop.py | 2 +-
151 tools/vfscount.py | 2 +-
152 tools/vfsstat.py | 2 +-
153 tools/wakeuptime.py | 2 +-
154 tools/xfsdist.py | 2 +-
155 tools/xfsslower.py | 2 +-
156 tools/zfsdist.py | 2 +-
157 tools/zfsslower.py | 2 +-
158 150 files changed, 150 insertions(+), 150 deletions(-)
159
160diff --git a/examples/hello_world.py b/examples/hello_world.py
161index bb52f3e7..e36c09b0 100755
162--- a/examples/hello_world.py
163+++ b/examples/hello_world.py
164@@ -1,4 +1,4 @@
165-#!/usr/bin/python
166+#!/usr/bin/python3
167 # Copyright (c) PLUMgrid, Inc.
168 # Licensed under the Apache License, Version 2.0 (the "License")
169
170diff --git a/examples/networking/distributed_bridge/main.py b/examples/networking/distributed_bridge/main.py
171index c72360ea..5cda7dfd 100755
172--- a/examples/networking/distributed_bridge/main.py
173+++ b/examples/networking/distributed_bridge/main.py
174@@ -1,4 +1,4 @@
175-#!/usr/bin/python
176+#!/usr/bin/python3
177 # Copyright (c) PLUMgrid, Inc.
178 # Licensed under the Apache License, Version 2.0 (the "License")
179
180diff --git a/examples/networking/distributed_bridge/tunnel.py b/examples/networking/distributed_bridge/tunnel.py
181index 11b59f06..2f7905c9 100755
182--- a/examples/networking/distributed_bridge/tunnel.py
183+++ b/examples/networking/distributed_bridge/tunnel.py
184@@ -1,4 +1,4 @@
185-#!/usr/bin/python
186+#!/usr/bin/python3
187 # Copyright (c) PLUMgrid, Inc.
188 # Licensed under the Apache License, Version 2.0 (the "License")
189
190diff --git a/examples/networking/distributed_bridge/tunnel_mesh.py b/examples/networking/distributed_bridge/tunnel_mesh.py
191index 54ecfcd8..a83330bb 100644
192--- a/examples/networking/distributed_bridge/tunnel_mesh.py
193+++ b/examples/networking/distributed_bridge/tunnel_mesh.py
194@@ -1,4 +1,4 @@
195-#!/usr/bin/python
196+#!/usr/bin/python3
197 # Copyright (c) PLUMgrid, Inc.
198 # Licensed under the Apache License, Version 2.0 (the "License")
199
200diff --git a/examples/networking/dns_matching/dns_matching.py b/examples/networking/dns_matching/dns_matching.py
201index 943dca59..47d99453 100755
202--- a/examples/networking/dns_matching/dns_matching.py
203+++ b/examples/networking/dns_matching/dns_matching.py
204@@ -1,4 +1,4 @@
205-#!/usr/bin/python
206+#!/usr/bin/python3
207
208 from __future__ import print_function
209 from bcc import BPF
210diff --git a/examples/networking/http_filter/http-parse-complete.py b/examples/networking/http_filter/http-parse-complete.py
211index f1e5e0a2..e364d9aa 100644
212--- a/examples/networking/http_filter/http-parse-complete.py
213+++ b/examples/networking/http_filter/http-parse-complete.py
214@@ -1,4 +1,4 @@
215-#!/usr/bin/python
216+#!/usr/bin/python3
217 #
218 #Bertrone Matteo - Polytechnic of Turin
219 #November 2015
220diff --git a/examples/networking/http_filter/http-parse-simple.py b/examples/networking/http_filter/http-parse-simple.py
221index b702393d..78745ee2 100644
222--- a/examples/networking/http_filter/http-parse-simple.py
223+++ b/examples/networking/http_filter/http-parse-simple.py
224@@ -1,4 +1,4 @@
225-#!/usr/bin/python
226+#!/usr/bin/python3
227 #
228 #Bertrone Matteo - Polytechnic of Turin
229 #November 2015
230diff --git a/examples/networking/neighbor_sharing/tc_neighbor_sharing.py b/examples/networking/neighbor_sharing/tc_neighbor_sharing.py
231index 8d13c43f..6c071791 100755
232--- a/examples/networking/neighbor_sharing/tc_neighbor_sharing.py
233+++ b/examples/networking/neighbor_sharing/tc_neighbor_sharing.py
234@@ -1,4 +1,4 @@
235-#!/usr/bin/python
236+#!/usr/bin/python3
237 # Copyright (c) PLUMgrid, Inc.
238 # Licensed under the Apache License, Version 2.0 (the "License")
239
240diff --git a/examples/networking/simple_tc.py b/examples/networking/simple_tc.py
241index 38180132..1d42fa95 100755
242--- a/examples/networking/simple_tc.py
243+++ b/examples/networking/simple_tc.py
244@@ -1,4 +1,4 @@
245-#!/usr/bin/python
246+#!/usr/bin/python3
247 # Copyright (c) PLUMgrid, Inc.
248 # Licensed under the Apache License, Version 2.0 (the "License")
249
250diff --git a/examples/networking/tc_perf_event.py b/examples/networking/tc_perf_event.py
251index 99f0e9eb..188acd19 100755
252--- a/examples/networking/tc_perf_event.py
253+++ b/examples/networking/tc_perf_event.py
254@@ -1,4 +1,4 @@
255-#!/usr/bin/python
256+#!/usr/bin/python3
257 #
258 # tc_perf_event.py Output skb and meta data through perf event
259 #
260diff --git a/examples/networking/tunnel_monitor/main.py b/examples/networking/tunnel_monitor/main.py
261index 7d3acb8e..60978f69 100755
262--- a/examples/networking/tunnel_monitor/main.py
263+++ b/examples/networking/tunnel_monitor/main.py
264@@ -1,4 +1,4 @@
265-#!/usr/bin/python
266+#!/usr/bin/python3
267 # Copyright (c) PLUMgrid, Inc.
268 # Licensed under the Apache License, Version 2.0 (the "License")
269
270diff --git a/examples/networking/tunnel_monitor/monitor.py b/examples/networking/tunnel_monitor/monitor.py
271index fb3613ee..24792fcd 100644
272--- a/examples/networking/tunnel_monitor/monitor.py
273+++ b/examples/networking/tunnel_monitor/monitor.py
274@@ -1,4 +1,4 @@
275-#!/usr/bin/python
276+#!/usr/bin/python3
277 # Copyright (c) PLUMgrid, Inc.
278 # Licensed under the Apache License, Version 2.0 (the "License")
279
280diff --git a/examples/networking/vlan_filter/data-plane-tracing.py b/examples/networking/vlan_filter/data-plane-tracing.py
281index efaa7f10..37cd0aef 100755
282--- a/examples/networking/vlan_filter/data-plane-tracing.py
283+++ b/examples/networking/vlan_filter/data-plane-tracing.py
284@@ -1,4 +1,4 @@
285-#!/usr/bin/python
286+#!/usr/bin/python3
287 from __future__ import print_function
288 from bcc import BPF
289
290diff --git a/examples/networking/vlan_learning/vlan_learning.py b/examples/networking/vlan_learning/vlan_learning.py
291index 7229176a..a814ec88 100755
292--- a/examples/networking/vlan_learning/vlan_learning.py
293+++ b/examples/networking/vlan_learning/vlan_learning.py
294@@ -1,4 +1,4 @@
295-#!/usr/bin/python
296+#!/usr/bin/python3
297 # Copyright (c) PLUMgrid, Inc.
298 # Licensed under the Apache License, Version 2.0 (the "License")
299
300diff --git a/examples/networking/xdp/xdp_drop_count.py b/examples/networking/xdp/xdp_drop_count.py
301index f03273e9..5273e658 100755
302--- a/examples/networking/xdp/xdp_drop_count.py
303+++ b/examples/networking/xdp/xdp_drop_count.py
304@@ -1,4 +1,4 @@
305-#!/usr/bin/python
306+#!/usr/bin/python3
307 #
308 # xdp_drop_count.py Drop incoming packets on XDP layer and count for which
309 # protocol type
310diff --git a/examples/networking/xdp/xdp_macswap_count.py b/examples/networking/xdp/xdp_macswap_count.py
311index 0e2b21ca..dcd8cf83 100755
312--- a/examples/networking/xdp/xdp_macswap_count.py
313+++ b/examples/networking/xdp/xdp_macswap_count.py
314@@ -1,4 +1,4 @@
315-#!/usr/bin/python
316+#!/usr/bin/python3
317 #
318 # xdp_macswap_count.py Swap Source and Destination MAC addresses on
319 # incoming packets and transmit packets back on
320diff --git a/examples/networking/xdp/xdp_redirect_cpu.py b/examples/networking/xdp/xdp_redirect_cpu.py
321index 15b0d09b..18d643a6 100755
322--- a/examples/networking/xdp/xdp_redirect_cpu.py
323+++ b/examples/networking/xdp/xdp_redirect_cpu.py
324@@ -1,4 +1,4 @@
325-#!/usr/bin/python
326+#!/usr/bin/python3
327 #
328 # xdp_redirect_cpu.py Redirect the incoming packet to the specific CPU
329 #
330diff --git a/examples/networking/xdp/xdp_redirect_map.py b/examples/networking/xdp/xdp_redirect_map.py
331index 4a622723..d1d2a043 100755
332--- a/examples/networking/xdp/xdp_redirect_map.py
333+++ b/examples/networking/xdp/xdp_redirect_map.py
334@@ -1,4 +1,4 @@
335-#!/usr/bin/python
336+#!/usr/bin/python3
337 #
338 # xdp_redirect_map.py Redirect the incoming packet to another interface
339 # with the helper: bpf_redirect_map()
340diff --git a/examples/tracing/bitehist.py b/examples/tracing/bitehist.py
341index 4d7c7958..ea793f94 100755
342--- a/examples/tracing/bitehist.py
343+++ b/examples/tracing/bitehist.py
344@@ -1,4 +1,4 @@
345-#!/usr/bin/python
346+#!/usr/bin/python3
347 #
348 # bitehist.py Block I/O size histogram.
349 # For Linux, uses BCC, eBPF. Embedded C.
350diff --git a/examples/tracing/dddos.py b/examples/tracing/dddos.py
351index 5b544241..2b77725e 100755
352--- a/examples/tracing/dddos.py
353+++ b/examples/tracing/dddos.py
354@@ -1,4 +1,4 @@
355-#!/usr/bin/python
356+#!/usr/bin/python3
357 #
358 # dddos.py DDOS dectection system.
359 #
360diff --git a/examples/tracing/disksnoop.py b/examples/tracing/disksnoop.py
361index 1101e6f2..433593f0 100755
362--- a/examples/tracing/disksnoop.py
363+++ b/examples/tracing/disksnoop.py
364@@ -1,4 +1,4 @@
365-#!/usr/bin/python
366+#!/usr/bin/python3
367 #
368 # disksnoop.py Trace block device I/O: basic version of iosnoop.
369 # For Linux, uses BCC, eBPF. Embedded C.
370diff --git a/examples/tracing/hello_fields.py b/examples/tracing/hello_fields.py
371index 9ed6da5d..a5940560 100755
372--- a/examples/tracing/hello_fields.py
373+++ b/examples/tracing/hello_fields.py
374@@ -1,4 +1,4 @@
375-#!/usr/bin/python
376+#!/usr/bin/python3
377 #
378 # This is a Hello World example that formats output as fields.
379
380diff --git a/examples/tracing/hello_perf_output.py b/examples/tracing/hello_perf_output.py
381index fdc74deb..ba1972c5 100755
382--- a/examples/tracing/hello_perf_output.py
383+++ b/examples/tracing/hello_perf_output.py
384@@ -1,4 +1,4 @@
385-#!/usr/bin/python
386+#!/usr/bin/python3
387 #
388 # This is a Hello World example that uses BPF_PERF_OUTPUT.
389
390diff --git a/examples/tracing/kvm_hypercall.py b/examples/tracing/kvm_hypercall.py
391index 5f1d3d7a..4573ed3c 100755
392--- a/examples/tracing/kvm_hypercall.py
393+++ b/examples/tracing/kvm_hypercall.py
394@@ -1,4 +1,4 @@
395-#!/usr/bin/python
396+#!/usr/bin/python3
397 #
398 # kvm_hypercall.py
399 #
400diff --git a/examples/tracing/mallocstacks.py b/examples/tracing/mallocstacks.py
401index 4b10e6c2..e89b09f6 100755
402--- a/examples/tracing/mallocstacks.py
403+++ b/examples/tracing/mallocstacks.py
404@@ -1,4 +1,4 @@
405-#!/usr/bin/python
406+#!/usr/bin/python3
407 #
408 # mallocstacks Trace malloc() calls in a process and print the full
409 # stack trace for all callsites.
410diff --git a/examples/tracing/mysqld_query.py b/examples/tracing/mysqld_query.py
411index ace07150..291b16b0 100755
412--- a/examples/tracing/mysqld_query.py
413+++ b/examples/tracing/mysqld_query.py
414@@ -1,4 +1,4 @@
415-#!/usr/bin/python
416+#!/usr/bin/python3
417 #
418 # mysqld_query Trace MySQL server queries. Example of USDT tracing.
419 # For Linux, uses BCC, BPF. Embedded C.
420diff --git a/examples/tracing/nodejs_http_server.py b/examples/tracing/nodejs_http_server.py
421index a86ca956..b38b42f1 100755
422--- a/examples/tracing/nodejs_http_server.py
423+++ b/examples/tracing/nodejs_http_server.py
424@@ -1,4 +1,4 @@
425-#!/usr/bin/python
426+#!/usr/bin/python3
427 #
428 # nodejs_http_server Basic example of node.js USDT tracing.
429 # For Linux, uses BCC, BPF. Embedded C.
430diff --git a/examples/tracing/stack_buildid_example.py b/examples/tracing/stack_buildid_example.py
431index 706d7507..6fae0851 100755
432--- a/examples/tracing/stack_buildid_example.py
433+++ b/examples/tracing/stack_buildid_example.py
434@@ -1,4 +1,4 @@
435-#!/usr/bin/python
436+#!/usr/bin/python3
437 #
438 # An example usage of stack_build_id
439 # Most of the code here is borrowed from tools/profile.py
440diff --git a/examples/tracing/stacksnoop.py b/examples/tracing/stacksnoop.py
441index 8a68e69b..d6b19789 100755
442--- a/examples/tracing/stacksnoop.py
443+++ b/examples/tracing/stacksnoop.py
444@@ -1,4 +1,4 @@
445-#!/usr/bin/python
446+#!/usr/bin/python3
447 #
448 # stacksnoop Trace a kernel function and print all kernel stack traces.
449 # For Linux, uses BCC, eBPF, and currently x86_64 only. Inline C.
450diff --git a/examples/tracing/strlen_count.py b/examples/tracing/strlen_count.py
451index f1bb1b7e..df525305 100755
452--- a/examples/tracing/strlen_count.py
453+++ b/examples/tracing/strlen_count.py
454@@ -1,4 +1,4 @@
455-#!/usr/bin/python
456+#!/usr/bin/python3
457 #
458 # strlen_count Trace strlen() and print a frequency count of strings.
459 # For Linux, uses BCC, eBPF. Embedded C.
460diff --git a/examples/tracing/strlen_hist.py b/examples/tracing/strlen_hist.py
461index dda1cb23..fce4df06 100755
462--- a/examples/tracing/strlen_hist.py
463+++ b/examples/tracing/strlen_hist.py
464@@ -1,4 +1,4 @@
465-#!/usr/bin/python
466+#!/usr/bin/python3
467
468 #
469 # strlen_hist.py Histogram of system-wide strlen return values
470diff --git a/examples/tracing/strlen_snoop.py b/examples/tracing/strlen_snoop.py
471index c3c7199e..d4331b51 100755
472--- a/examples/tracing/strlen_snoop.py
473+++ b/examples/tracing/strlen_snoop.py
474@@ -1,4 +1,4 @@
475-#!/usr/bin/python
476+#!/usr/bin/python3
477 #
478 # strlen_snoop Trace strlen() library function for a given PID.
479 # For Linux, uses BCC, eBPF. Embedded C.
480diff --git a/examples/tracing/sync_timing.py b/examples/tracing/sync_timing.py
481index 1d89ce55..8dd90c4f 100755
482--- a/examples/tracing/sync_timing.py
483+++ b/examples/tracing/sync_timing.py
484@@ -1,4 +1,4 @@
485-#!/usr/bin/python
486+#!/usr/bin/python3
487 #
488 # sync_timing.py Trace time between syncs.
489 # For Linux, uses BCC, eBPF. Embedded C.
490diff --git a/examples/tracing/task_switch.py b/examples/tracing/task_switch.py
491index 43a4f3f8..6db5ada7 100755
492--- a/examples/tracing/task_switch.py
493+++ b/examples/tracing/task_switch.py
494@@ -1,4 +1,4 @@
495-#!/usr/bin/python
496+#!/usr/bin/python3
497 # Copyright (c) PLUMgrid, Inc.
498 # Licensed under the Apache License, Version 2.0 (the "License")
499
500diff --git a/examples/tracing/tcpv4connect.py b/examples/tracing/tcpv4connect.py
501index 26d93763..56e2a61c 100755
502--- a/examples/tracing/tcpv4connect.py
503+++ b/examples/tracing/tcpv4connect.py
504@@ -1,4 +1,4 @@
505-#!/usr/bin/python
506+#!/usr/bin/python3
507 #
508 # tcpv4connect Trace TCP IPv4 connect()s.
509 # For Linux, uses BCC, eBPF. Embedded C.
510diff --git a/examples/tracing/trace_fields.py b/examples/tracing/trace_fields.py
511index 1c5beef2..a8b64686 100755
512--- a/examples/tracing/trace_fields.py
513+++ b/examples/tracing/trace_fields.py
514@@ -1,4 +1,4 @@
515-#!/usr/bin/python
516+#!/usr/bin/python3
517 # Copyright (c) PLUMgrid, Inc.
518 # Licensed under the Apache License, Version 2.0 (the "License")
519
520diff --git a/examples/tracing/trace_perf_output.py b/examples/tracing/trace_perf_output.py
521index 635be129..5a58df53 100755
522--- a/examples/tracing/trace_perf_output.py
523+++ b/examples/tracing/trace_perf_output.py
524@@ -1,4 +1,4 @@
525-#!/usr/bin/python
526+#!/usr/bin/python3
527 # Copyright (c) PLUMgrid, Inc.
528 # Licensed under the Apache License, Version 2.0 (the "License")
529
530diff --git a/examples/tracing/urandomread-explicit.py b/examples/tracing/urandomread-explicit.py
531index 9291402b..91f8d5fe 100755
532--- a/examples/tracing/urandomread-explicit.py
533+++ b/examples/tracing/urandomread-explicit.py
534@@ -1,4 +1,4 @@
535-#!/usr/bin/python
536+#!/usr/bin/python3
537 #
538 # urandomread-explicit Example of instrumenting a kernel tracepoint.
539 # For Linux, uses BCC, BPF. Embedded C.
540diff --git a/examples/tracing/urandomread.py b/examples/tracing/urandomread.py
541index 69bcf8d1..11424f0b 100755
542--- a/examples/tracing/urandomread.py
543+++ b/examples/tracing/urandomread.py
544@@ -1,4 +1,4 @@
545-#!/usr/bin/python
546+#!/usr/bin/python3
547 #
548 # urandomread Example of instrumenting a kernel tracepoint.
549 # For Linux, uses BCC, BPF. Embedded C.
550diff --git a/examples/tracing/vfsreadlat.py b/examples/tracing/vfsreadlat.py
551index b2c4156e..531e149a 100755
552--- a/examples/tracing/vfsreadlat.py
553+++ b/examples/tracing/vfsreadlat.py
554@@ -1,4 +1,4 @@
555-#!/usr/bin/python
556+#!/usr/bin/python3
557 #
558 # vfsreadlat.py VFS read latency distribution.
559 # For Linux, uses BCC, eBPF. See .c file.
560diff --git a/examples/usdt_sample/scripts/lat_avg.py b/examples/usdt_sample/scripts/lat_avg.py
561index 7c72e211..b968444b 100755
562--- a/examples/usdt_sample/scripts/lat_avg.py
563+++ b/examples/usdt_sample/scripts/lat_avg.py
564@@ -1,4 +1,4 @@
565-#!/usr/bin/python
566+#!/usr/bin/python3
567 import argparse
568 from time import sleep, strftime
569 from sys import argv
570diff --git a/examples/usdt_sample/scripts/lat_dist.py b/examples/usdt_sample/scripts/lat_dist.py
571index 782c960b..f9a36346 100755
572--- a/examples/usdt_sample/scripts/lat_dist.py
573+++ b/examples/usdt_sample/scripts/lat_dist.py
574@@ -1,4 +1,4 @@
575-#!/usr/bin/python
576+#!/usr/bin/python3
577 import argparse
578 from time import sleep, strftime
579 from sys import argv
580diff --git a/examples/usdt_sample/scripts/latency.py b/examples/usdt_sample/scripts/latency.py
581index 8a7ec08c..4e72e50c 100755
582--- a/examples/usdt_sample/scripts/latency.py
583+++ b/examples/usdt_sample/scripts/latency.py
584@@ -1,4 +1,4 @@
585-#!/usr/bin/python
586+#!/usr/bin/python3
587 import argparse
588 from time import sleep
589 from sys import argv
590diff --git a/tools/argdist.py b/tools/argdist.py
591index 695b5b3c..b6574987 100755
592--- a/tools/argdist.py
593+++ b/tools/argdist.py
594@@ -1,4 +1,4 @@
595-#!/usr/bin/python
596+#!/usr/bin/python3
597 #
598 # argdist Trace a function and display a distribution of its
599 # parameter values as a histogram or frequency count.
600diff --git a/tools/bashreadline.py b/tools/bashreadline.py
601index b7d98272..4a01e50d 100755
602--- a/tools/bashreadline.py
603+++ b/tools/bashreadline.py
604@@ -1,4 +1,4 @@
605-#!/usr/bin/python
606+#!/usr/bin/python3
607 #
608 # bashreadline Print entered bash commands from all running shells.
609 # For Linux, uses BCC, eBPF. Embedded C.
610diff --git a/tools/biolatency.py b/tools/biolatency.py
611index 86d99437..f9abfd8b 100755
612--- a/tools/biolatency.py
613+++ b/tools/biolatency.py
614@@ -1,4 +1,4 @@
615-#!/usr/bin/python
616+#!/usr/bin/python3
617 # @lint-avoid-python-3-compatibility-imports
618 #
619 # biolatency Summarize block device I/O latency as a histogram.
620diff --git a/tools/biosnoop.py b/tools/biosnoop.py
621index e6f708fa..87d507e6 100755
622--- a/tools/biosnoop.py
623+++ b/tools/biosnoop.py
624@@ -1,4 +1,4 @@
625-#!/usr/bin/python
626+#!/usr/bin/python3
627 # @lint-avoid-python-3-compatibility-imports
628 #
629 # biosnoop Trace block device I/O and print details including issuing PID.
630diff --git a/tools/biotop.py b/tools/biotop.py
631index cad3759a..f13edf62 100755
632--- a/tools/biotop.py
633+++ b/tools/biotop.py
634@@ -1,4 +1,4 @@
635-#!/usr/bin/python
636+#!/usr/bin/python3
637 # @lint-avoid-python-3-compatibility-imports
638 #
639 # biotop block device (disk) I/O by process.
640diff --git a/tools/bitesize.py b/tools/bitesize.py
641index f4cea7cd..569630af 100755
642--- a/tools/bitesize.py
643+++ b/tools/bitesize.py
644@@ -1,4 +1,4 @@
645-#!/usr/bin/python
646+#!/usr/bin/python3
647 #
648 # bitehist.py Block I/O size histogram.
649 # For Linux, uses BCC, eBPF. See .c file.
650diff --git a/tools/bpflist.py b/tools/bpflist.py
651index f73e945a..118fd00d 100755
652--- a/tools/bpflist.py
653+++ b/tools/bpflist.py
654@@ -1,4 +1,4 @@
655-#!/usr/bin/python
656+#!/usr/bin/python3
657 #
658 # bpflist Display processes currently using BPF programs and maps,
659 # pinned BPF programs and maps, and enabled probes.
660diff --git a/tools/btrfsdist.py b/tools/btrfsdist.py
661index 4659ab46..92cb1cb0 100755
662--- a/tools/btrfsdist.py
663+++ b/tools/btrfsdist.py
664@@ -1,4 +1,4 @@
665-#!/usr/bin/python
666+#!/usr/bin/python3
667 # @lint-avoid-python-3-compatibility-imports
668 #
669 # btrfsdist Summarize btrfs operation latency.
670diff --git a/tools/btrfsslower.py b/tools/btrfsslower.py
671index b30880a7..e34c0d64 100755
672--- a/tools/btrfsslower.py
673+++ b/tools/btrfsslower.py
674@@ -1,4 +1,4 @@
675-#!/usr/bin/python
676+#!/usr/bin/python3
677 # @lint-avoid-python-3-compatibility-imports
678 #
679 # btrfsslower Trace slow btrfs operations.
680diff --git a/tools/cachestat.py b/tools/cachestat.py
681index bb949493..a83e6615 100755
682--- a/tools/cachestat.py
683+++ b/tools/cachestat.py
684@@ -1,4 +1,4 @@
685-#!/usr/bin/python
686+#!/usr/bin/python3
687 #
688 # cachestat Count cache kernel function calls.
689 # For Linux, uses BCC, eBPF. See .c file.
690diff --git a/tools/cachetop.py b/tools/cachetop.py
691index 59de3912..5e07ae81 100755
692--- a/tools/cachetop.py
693+++ b/tools/cachetop.py
694@@ -1,4 +1,4 @@
695-#!/usr/bin/python
696+#!/usr/bin/python3
697 # @lint-avoid-python-3-compatibility-imports
698 #
699 # cachetop Count cache kernel function calls per processes
700diff --git a/tools/capable.py b/tools/capable.py
701index bb4a8435..bf8bc5a8 100755
702--- a/tools/capable.py
703+++ b/tools/capable.py
704@@ -1,4 +1,4 @@
705-#!/usr/bin/python
706+#!/usr/bin/python3
707 # @lint-avoid-python-3-compatibility-imports
708 #
709 # capable Trace security capabilitiy checks (cap_capable()).
710diff --git a/tools/cpudist.py b/tools/cpudist.py
711index 4e549ac4..663d2b87 100755
712--- a/tools/cpudist.py
713+++ b/tools/cpudist.py
714@@ -1,4 +1,4 @@
715-#!/usr/bin/python
716+#!/usr/bin/python3
717 # @lint-avoid-python-3-compatibility-imports
718 #
719 # cpudist Summarize on- and off-CPU time per task as a histogram.
720diff --git a/tools/cpuunclaimed.py b/tools/cpuunclaimed.py
721index dc0f3252..aecab249 100755
722--- a/tools/cpuunclaimed.py
723+++ b/tools/cpuunclaimed.py
724@@ -1,4 +1,4 @@
725-#!/usr/bin/python
726+#!/usr/bin/python3
727 # @lint-avoid-python-3-compatibility-imports
728 #
729 # cpuunclaimed Sample CPU run queues and calculate unclaimed idle CPU.
730diff --git a/tools/criticalstat.py b/tools/criticalstat.py
731index 250cfc4d..9b45ef2b 100755
732--- a/tools/criticalstat.py
733+++ b/tools/criticalstat.py
734@@ -1,4 +1,4 @@
735-#!/usr/bin/python
736+#!/usr/bin/python3
737 # @lint-avoid-python-3-compatibility-imports
738 #
739 # criticalstat Trace long critical sections (IRQs or preemption disabled)
740diff --git a/tools/dbslower.py b/tools/dbslower.py
741index 2f1b6a8b..17bd3842 100755
742--- a/tools/dbslower.py
743+++ b/tools/dbslower.py
744@@ -1,4 +1,4 @@
745-#!/usr/bin/python
746+#!/usr/bin/python3
747 #
748 # dbslower Trace MySQL and PostgreSQL queries slower than a threshold.
749 #
750diff --git a/tools/dbstat.py b/tools/dbstat.py
751index a89b0971..f8c612fa 100755
752--- a/tools/dbstat.py
753+++ b/tools/dbstat.py
754@@ -1,4 +1,4 @@
755-#!/usr/bin/python
756+#!/usr/bin/python3
757 #
758 # dbstat Display a histogram of MySQL and PostgreSQL query latencies.
759 #
760diff --git a/tools/dcsnoop.py b/tools/dcsnoop.py
761index 331ee30e..3f902883 100755
762--- a/tools/dcsnoop.py
763+++ b/tools/dcsnoop.py
764@@ -1,4 +1,4 @@
765-#!/usr/bin/python
766+#!/usr/bin/python3
767 # @lint-avoid-python-3-compatibility-imports
768 #
769 # dcsnoop Trace directory entry cache (dcache) lookups.
770diff --git a/tools/dcstat.py b/tools/dcstat.py
771index 5ecddd1a..d2db8d41 100755
772--- a/tools/dcstat.py
773+++ b/tools/dcstat.py
774@@ -1,4 +1,4 @@
775-#!/usr/bin/python
776+#!/usr/bin/python3
777 # @lint-avoid-python-3-compatibility-imports
778 #
779 # dcstat Directory entry cache (dcache) stats.
780diff --git a/tools/deadlock.py b/tools/deadlock.py
781index 17848720..e767759a 100755
782--- a/tools/deadlock.py
783+++ b/tools/deadlock.py
784@@ -1,4 +1,4 @@
785-#!/usr/bin/python
786+#!/usr/bin/python3
787 #
788 # deadlock Detects potential deadlocks (lock order inversions)
789 # on a running process. For Linux, uses BCC, eBPF.
790diff --git a/tools/drsnoop.py b/tools/drsnoop.py
791index c77f5206..c640b3d6 100755
792--- a/tools/drsnoop.py
793+++ b/tools/drsnoop.py
794@@ -1,4 +1,4 @@
795-#!/usr/bin/python
796+#!/usr/bin/python3
797 # @lint-avoid-python-3-compatibility-imports
798 #
799 # drsnoop Trace direct reclaim and print details including issuing PID.
800diff --git a/tools/execsnoop.py b/tools/execsnoop.py
801index e5a04903..ea3295fc 100755
802--- a/tools/execsnoop.py
803+++ b/tools/execsnoop.py
804@@ -1,4 +1,4 @@
805-#!/usr/bin/python
806+#!/usr/bin/python3
807 # @lint-avoid-python-3-compatibility-imports
808 #
809 # execsnoop Trace new processes via exec() syscalls.
810diff --git a/tools/exitsnoop.py b/tools/exitsnoop.py
811index 13a1444c..5c37fc83 100755
812--- a/tools/exitsnoop.py
813+++ b/tools/exitsnoop.py
814@@ -1,4 +1,4 @@
815-#!/usr/bin/python
816+#!/usr/bin/python3
817 # @lint-avoid-python-3-compatibility-imports
818 from __future__ import print_function
819
820diff --git a/tools/ext4dist.py b/tools/ext4dist.py
821index 384a4c14..b1d70e10 100755
822--- a/tools/ext4dist.py
823+++ b/tools/ext4dist.py
824@@ -1,4 +1,4 @@
825-#!/usr/bin/python
826+#!/usr/bin/python3
827 # @lint-avoid-python-3-compatibility-imports
828 #
829 # ext4dist Summarize ext4 operation latency.
830diff --git a/tools/ext4slower.py b/tools/ext4slower.py
831index 0524f22e..fa245ec6 100755
832--- a/tools/ext4slower.py
833+++ b/tools/ext4slower.py
834@@ -1,4 +1,4 @@
835-#!/usr/bin/python
836+#!/usr/bin/python3
837 # @lint-avoid-python-3-compatibility-imports
838 #
839 # ext4slower Trace slow ext4 operations.
840diff --git a/tools/filelife.py b/tools/filelife.py
841index 2eb4244b..47ebb8f7 100755
842--- a/tools/filelife.py
843+++ b/tools/filelife.py
844@@ -1,4 +1,4 @@
845-#!/usr/bin/python
846+#!/usr/bin/python3
847 # @lint-avoid-python-3-compatibility-imports
848 #
849 # filelife Trace the lifespan of short-lived files.
850diff --git a/tools/fileslower.py b/tools/fileslower.py
851index 31e3adf9..2a564045 100755
852--- a/tools/fileslower.py
853+++ b/tools/fileslower.py
854@@ -1,4 +1,4 @@
855-#!/usr/bin/python
856+#!/usr/bin/python3
857 # @lint-avoid-python-3-compatibility-imports
858 #
859 # fileslower Trace slow synchronous file reads and writes.
860diff --git a/tools/filetop.py b/tools/filetop.py
861index 552367a9..632b4d78 100755
862--- a/tools/filetop.py
863+++ b/tools/filetop.py
864@@ -1,4 +1,4 @@
865-#!/usr/bin/python
866+#!/usr/bin/python3
867 # @lint-avoid-python-3-compatibility-imports
868 #
869 # filetop file reads and writes by process.
870diff --git a/tools/funccount.py b/tools/funccount.py
871index 69dd01c8..8c98461a 100755
872--- a/tools/funccount.py
873+++ b/tools/funccount.py
874@@ -1,4 +1,4 @@
875-#!/usr/bin/python
876+#!/usr/bin/python3
877 # @lint-avoid-python-3-compatibility-imports
878 #
879 # funccount Count functions, tracepoints, and USDT probes.
880diff --git a/tools/funclatency.py b/tools/funclatency.py
881index 3f08a7e0..0818eaf3 100755
882--- a/tools/funclatency.py
883+++ b/tools/funclatency.py
884@@ -1,4 +1,4 @@
885-#!/usr/bin/python
886+#!/usr/bin/python3
887 # @lint-avoid-python-3-compatibility-imports
888 #
889 # funclatency Time functions and print latency as a histogram.
890diff --git a/tools/funcslower.py b/tools/funcslower.py
891index bda6a844..f9d12c57 100755
892--- a/tools/funcslower.py
893+++ b/tools/funcslower.py
894@@ -1,4 +1,4 @@
895-#!/usr/bin/python
896+#!/usr/bin/python3
897 # @lint-avoid-python-3-compatibility-imports
898 #
899 # funcslower Trace slow kernel or user function calls.
900diff --git a/tools/gethostlatency.py b/tools/gethostlatency.py
901index f7506a86..b13b3645 100755
902--- a/tools/gethostlatency.py
903+++ b/tools/gethostlatency.py
904@@ -1,4 +1,4 @@
905-#!/usr/bin/python
906+#!/usr/bin/python3
907 #
908 # gethostlatency Show latency for getaddrinfo/gethostbyname[2] calls.
909 # For Linux, uses BCC, eBPF. Embedded C.
910diff --git a/tools/hardirqs.py b/tools/hardirqs.py
911index 589a890d..02bddc79 100755
912--- a/tools/hardirqs.py
913+++ b/tools/hardirqs.py
914@@ -1,4 +1,4 @@
915-#!/usr/bin/python
916+#!/usr/bin/python3
917 # @lint-avoid-python-3-compatibility-imports
918 #
919 # hardirqs Summarize hard IRQ (interrupt) event time.
920diff --git a/tools/inject.py b/tools/inject.py
921index fa2d3887..948832c1 100755
922--- a/tools/inject.py
923+++ b/tools/inject.py
924@@ -1,4 +1,4 @@
925-#!/usr/bin/python
926+#!/usr/bin/python3
927 #
928 # This script generates a BPF program with structure inspired by trace.py. The
929 # generated program operates on PID-indexed stacks. Generally speaking,
930diff --git a/tools/killsnoop.py b/tools/killsnoop.py
931index 2fb1dcb5..8439a539 100755
932--- a/tools/killsnoop.py
933+++ b/tools/killsnoop.py
934@@ -1,4 +1,4 @@
935-#!/usr/bin/python
936+#!/usr/bin/python3
937 # @lint-avoid-python-3-compatibility-imports
938 #
939 # killsnoop Trace signals issued by the kill() syscall.
940diff --git a/tools/klockstat.py b/tools/klockstat.py
941index 343d4362..db4715d0 100755
942--- a/tools/klockstat.py
943+++ b/tools/klockstat.py
944@@ -1,4 +1,4 @@
945-#!/usr/bin/python
946+#!/usr/bin/python3
947 #
948 # klockstat traces lock events and display locks statistics.
949 #
950diff --git a/tools/lib/ucalls.py b/tools/lib/ucalls.py
951index 307df252..75b185d5 100755
952--- a/tools/lib/ucalls.py
953+++ b/tools/lib/ucalls.py
954@@ -1,4 +1,4 @@
955-#!/usr/bin/python
956+#!/usr/bin/python3
957 # @lint-avoid-python-3-compatibility-imports
958 #
959 # ucalls Summarize method calls in high-level languages and/or system calls.
960diff --git a/tools/lib/uflow.py b/tools/lib/uflow.py
961index 4779ba2c..7c64cdde 100755
962--- a/tools/lib/uflow.py
963+++ b/tools/lib/uflow.py
964@@ -1,4 +1,4 @@
965-#!/usr/bin/python
966+#!/usr/bin/python3
967 # @lint-avoid-python-3-compatibility-imports
968 #
969 # uflow Trace method execution flow in high-level languages.
970diff --git a/tools/lib/ugc.py b/tools/lib/ugc.py
971index 8841d5fa..4cbdbcc1 100755
972--- a/tools/lib/ugc.py
973+++ b/tools/lib/ugc.py
974@@ -1,4 +1,4 @@
975-#!/usr/bin/python
976+#!/usr/bin/python3
977 # @lint-avoid-python-3-compatibility-imports
978 #
979 # ugc Summarize garbage collection events in high-level languages.
980diff --git a/tools/lib/uobjnew.py b/tools/lib/uobjnew.py
981index b8eed0f7..acff495c 100755
982--- a/tools/lib/uobjnew.py
983+++ b/tools/lib/uobjnew.py
984@@ -1,4 +1,4 @@
985-#!/usr/bin/python
986+#!/usr/bin/python3
987 # @lint-avoid-python-3-compatibility-imports
988 #
989 # uobjnew Summarize object allocations in high-level languages.
990diff --git a/tools/lib/ustat.py b/tools/lib/ustat.py
991index 3f4287bf..854fd0c0 100755
992--- a/tools/lib/ustat.py
993+++ b/tools/lib/ustat.py
994@@ -1,4 +1,4 @@
995-#!/usr/bin/python
996+#!/usr/bin/python3
997 # @lint-avoid-python-3-compatibility-imports
998 #
999 # ustat Activity stats from high-level languages, including exceptions,
1000diff --git a/tools/lib/uthreads.py b/tools/lib/uthreads.py
1001index 90d0a745..41e4bde4 100755
1002--- a/tools/lib/uthreads.py
1003+++ b/tools/lib/uthreads.py
1004@@ -1,4 +1,4 @@
1005-#!/usr/bin/python
1006+#!/usr/bin/python3
1007 # @lint-avoid-python-3-compatibility-imports
1008 #
1009 # uthreads Trace thread creation/destruction events in high-level languages.
1010diff --git a/tools/llcstat.py b/tools/llcstat.py
1011index 7b7bc47a..286a7f24 100755
1012--- a/tools/llcstat.py
1013+++ b/tools/llcstat.py
1014@@ -1,4 +1,4 @@
1015-#!/usr/bin/python
1016+#!/usr/bin/python3
1017 #
1018 # llcstat.py Summarize cache references and cache misses by PID.
1019 # Cache reference and cache miss are corresponding events defined in
1020diff --git a/tools/mdflush.py b/tools/mdflush.py
1021index f1c68aee..d15acf56 100755
1022--- a/tools/mdflush.py
1023+++ b/tools/mdflush.py
1024@@ -1,4 +1,4 @@
1025-#!/usr/bin/python
1026+#!/usr/bin/python3
1027 # @lint-avoid-python-3-compatibility-imports
1028 #
1029 # mdflush Trace md flush events.
1030diff --git a/tools/memleak.py b/tools/memleak.py
1031index 9fa6805c..4174c206 100755
1032--- a/tools/memleak.py
1033+++ b/tools/memleak.py
1034@@ -1,4 +1,4 @@
1035-#!/usr/bin/python
1036+#!/usr/bin/python3
1037 #
1038 # memleak Trace and display outstanding allocations to detect
1039 # memory leaks in user-mode processes and the kernel.
1040diff --git a/tools/mountsnoop.py b/tools/mountsnoop.py
1041index 17a2edb6..82748ca5 100755
1042--- a/tools/mountsnoop.py
1043+++ b/tools/mountsnoop.py
1044@@ -1,4 +1,4 @@
1045-#!/usr/bin/python
1046+#!/usr/bin/python3
1047 #
1048 # mountsnoop Trace mount() and umount syscalls.
1049 # For Linux, uses BCC, eBPF. Embedded C.
1050diff --git a/tools/mysqld_qslower.py b/tools/mysqld_qslower.py
1051index d867d70f..cc2725bb 100755
1052--- a/tools/mysqld_qslower.py
1053+++ b/tools/mysqld_qslower.py
1054@@ -1,4 +1,4 @@
1055-#!/usr/bin/python
1056+#!/usr/bin/python3
1057 #
1058 # mysqld_qslower MySQL server queries slower than a threshold.
1059 # For Linux, uses BCC, BPF. Embedded C.
1060diff --git a/tools/nfsdist.py b/tools/nfsdist.py
1061index ff78506f..27631ade 100755
1062--- a/tools/nfsdist.py
1063+++ b/tools/nfsdist.py
1064@@ -1,4 +1,4 @@
1065-#!/usr/bin/python
1066+#!/usr/bin/python3
1067 # @lint-avoid-python-3-compatibility-imports
1068 #
1069 # nfsdist Summarize NFS operation latency
1070diff --git a/tools/nfsslower.py b/tools/nfsslower.py
1071index 36918ca0..bddfe6ab 100755
1072--- a/tools/nfsslower.py
1073+++ b/tools/nfsslower.py
1074@@ -1,4 +1,4 @@
1075-#!/usr/bin/python
1076+#!/usr/bin/python3
1077 # @lint-avoid-python-3-compatibility-imports
1078 #
1079 # nfsslower Trace slow NFS operations
1080diff --git a/tools/offcputime.py b/tools/offcputime.py
1081index ac3b7281..fbaa37a4 100755
1082--- a/tools/offcputime.py
1083+++ b/tools/offcputime.py
1084@@ -1,4 +1,4 @@
1085-#!/usr/bin/python
1086+#!/usr/bin/python3
1087 #
1088 # offcputime Summarize off-CPU time by stack trace
1089 # For Linux, uses BCC, eBPF.
1090diff --git a/tools/offwaketime.py b/tools/offwaketime.py
1091index 4809a3b6..3d3ba8be 100755
1092--- a/tools/offwaketime.py
1093+++ b/tools/offwaketime.py
1094@@ -1,4 +1,4 @@
1095-#!/usr/bin/python
1096+#!/usr/bin/python3
1097 #
1098 # offwaketime Summarize blocked time by kernel off-CPU stack + waker stack
1099 # For Linux, uses BCC, eBPF.
1100diff --git a/tools/old/bashreadline.py b/tools/old/bashreadline.py
1101index 571b6626..671188f8 100755
1102--- a/tools/old/bashreadline.py
1103+++ b/tools/old/bashreadline.py
1104@@ -1,4 +1,4 @@
1105-#!/usr/bin/python
1106+#!/usr/bin/python3
1107 #
1108 # bashreadline Print entered bash commands from all running shells.
1109 # For Linux, uses BCC, eBPF. Embedded C.
1110diff --git a/tools/old/biosnoop.py b/tools/old/biosnoop.py
1111index 37ee3f9c..7eddf518 100755
1112--- a/tools/old/biosnoop.py
1113+++ b/tools/old/biosnoop.py
1114@@ -1,4 +1,4 @@
1115-#!/usr/bin/python
1116+#!/usr/bin/python3
1117 # @lint-avoid-python-3-compatibility-imports
1118 #
1119 # biosnoop Trace block device I/O and print details including issuing PID.
1120diff --git a/tools/old/filelife.py b/tools/old/filelife.py
1121index 075be087..733ff86b 100755
1122--- a/tools/old/filelife.py
1123+++ b/tools/old/filelife.py
1124@@ -1,4 +1,4 @@
1125-#!/usr/bin/python
1126+#!/usr/bin/python3
1127 # @lint-avoid-python-3-compatibility-imports
1128 #
1129 # filelife Trace the lifespan of short-lived files.
1130diff --git a/tools/old/gethostlatency.py b/tools/old/gethostlatency.py
1131index 7d32cb82..52ca436c 100755
1132--- a/tools/old/gethostlatency.py
1133+++ b/tools/old/gethostlatency.py
1134@@ -1,4 +1,4 @@
1135-#!/usr/bin/python
1136+#!/usr/bin/python3
1137 #
1138 # gethostlatency Show latency for getaddrinfo/gethostbyname[2] calls.
1139 # For Linux, uses BCC, eBPF. Embedded C.
1140diff --git a/tools/old/killsnoop.py b/tools/old/killsnoop.py
1141index ddf9d5af..0b0b1d57 100755
1142--- a/tools/old/killsnoop.py
1143+++ b/tools/old/killsnoop.py
1144@@ -1,4 +1,4 @@
1145-#!/usr/bin/python
1146+#!/usr/bin/python3
1147 # @lint-avoid-python-3-compatibility-imports
1148 #
1149 # killsnoop Trace signals issued by the kill() syscall.
1150diff --git a/tools/old/memleak.py b/tools/old/memleak.py
1151index eca685f8..91330d5e 100755
1152--- a/tools/old/memleak.py
1153+++ b/tools/old/memleak.py
1154@@ -1,4 +1,4 @@
1155-#!/usr/bin/python
1156+#!/usr/bin/python3
1157 #
1158 # memleak Trace and display outstanding allocations to detect
1159 # memory leaks in user-mode processes and the kernel.
1160diff --git a/tools/old/offcputime.py b/tools/old/offcputime.py
1161index c0042ffc..f9f0453d 100755
1162--- a/tools/old/offcputime.py
1163+++ b/tools/old/offcputime.py
1164@@ -1,4 +1,4 @@
1165-#!/usr/bin/python
1166+#!/usr/bin/python3
1167 #
1168 # offcputime Summarize off-CPU time by kernel stack trace
1169 # For Linux, uses BCC, eBPF.
1170diff --git a/tools/old/offwaketime.py b/tools/old/offwaketime.py
1171index 42fa5ce2..56363f17 100755
1172--- a/tools/old/offwaketime.py
1173+++ b/tools/old/offwaketime.py
1174@@ -1,4 +1,4 @@
1175-#!/usr/bin/python
1176+#!/usr/bin/python3
1177 #
1178 # offwaketime Summarize blocked time by kernel off-CPU stack + waker stack
1179 # For Linux, uses BCC, eBPF.
1180diff --git a/tools/old/oomkill.py b/tools/old/oomkill.py
1181index 0973cfba..eacacaca 100755
1182--- a/tools/old/oomkill.py
1183+++ b/tools/old/oomkill.py
1184@@ -1,4 +1,4 @@
1185-#!/usr/bin/python
1186+#!/usr/bin/python3
1187 #
1188 # oomkill Trace oom_kill_process(). For Linux, uses BCC, eBPF.
1189 #
1190diff --git a/tools/old/opensnoop.py b/tools/old/opensnoop.py
1191index 5df3b417..2eabd50a 100755
1192--- a/tools/old/opensnoop.py
1193+++ b/tools/old/opensnoop.py
1194@@ -1,4 +1,4 @@
1195-#!/usr/bin/python
1196+#!/usr/bin/python3
1197 # @lint-avoid-python-3-compatibility-imports
1198 #
1199 # opensnoop Trace open() syscalls.
1200diff --git a/tools/old/profile.py b/tools/old/profile.py
1201index 7c768f43..84091007 100755
1202--- a/tools/old/profile.py
1203+++ b/tools/old/profile.py
1204@@ -1,4 +1,4 @@
1205-#!/usr/bin/python
1206+#!/usr/bin/python3
1207 # @lint-avoid-python-3-compatibility-imports
1208 #
1209 # profile Profile CPU usage by sampling stack traces at a timed interval.
1210diff --git a/tools/old/softirqs.py b/tools/old/softirqs.py
1211index 5708ba69..04c97e61 100755
1212--- a/tools/old/softirqs.py
1213+++ b/tools/old/softirqs.py
1214@@ -1,4 +1,4 @@
1215-#!/usr/bin/python
1216+#!/usr/bin/python3
1217 # @lint-avoid-python-3-compatibility-imports
1218 #
1219 # softirqs Summarize soft IRQ (interrupt) event time.
1220diff --git a/tools/old/stackcount.py b/tools/old/stackcount.py
1221index b60cc4c2..a1affce9 100755
1222--- a/tools/old/stackcount.py
1223+++ b/tools/old/stackcount.py
1224@@ -1,4 +1,4 @@
1225-#!/usr/bin/python
1226+#!/usr/bin/python3
1227 #
1228 # stackcount Count kernel function calls and their stack traces.
1229 # For Linux, uses BCC, eBPF.
1230diff --git a/tools/old/stacksnoop.py b/tools/old/stacksnoop.py
1231index 9fcc12b0..de3debfd 100755
1232--- a/tools/old/stacksnoop.py
1233+++ b/tools/old/stacksnoop.py
1234@@ -1,4 +1,4 @@
1235-#!/usr/bin/python
1236+#!/usr/bin/python3
1237 #
1238 # stacksnoop Trace a kernel function and print all kernel stack traces.
1239 # For Linux, uses BCC, eBPF, and currently x86_64 only. Inline C.
1240diff --git a/tools/old/statsnoop.py b/tools/old/statsnoop.py
1241index ad54ac78..9284110f 100755
1242--- a/tools/old/statsnoop.py
1243+++ b/tools/old/statsnoop.py
1244@@ -1,4 +1,4 @@
1245-#!/usr/bin/python
1246+#!/usr/bin/python3
1247 # @lint-avoid-python-3-compatibility-imports
1248 #
1249 # statsnoop Trace stat() syscalls.
1250diff --git a/tools/old/syncsnoop.py b/tools/old/syncsnoop.py
1251index cae57ea8..27fbc87f 100755
1252--- a/tools/old/syncsnoop.py
1253+++ b/tools/old/syncsnoop.py
1254@@ -1,4 +1,4 @@
1255-#!/usr/bin/python
1256+#!/usr/bin/python3
1257 # @lint-avoid-python-3-compatibility-imports
1258 #
1259 # syncsnoop Trace sync() syscall.
1260diff --git a/tools/old/tcpaccept.py b/tools/old/tcpaccept.py
1261index 8125eaa3..cb8f4e7c 100755
1262--- a/tools/old/tcpaccept.py
1263+++ b/tools/old/tcpaccept.py
1264@@ -1,4 +1,4 @@
1265-#!/usr/bin/python
1266+#!/usr/bin/python3
1267 # @lint-avoid-python-3-compatibility-imports
1268 #
1269 # tcpaccept Trace TCP accept()s.
1270diff --git a/tools/old/tcpconnect.py b/tools/old/tcpconnect.py
1271index 579a85f9..318eb20d 100755
1272--- a/tools/old/tcpconnect.py
1273+++ b/tools/old/tcpconnect.py
1274@@ -1,4 +1,4 @@
1275-#!/usr/bin/python
1276+#!/usr/bin/python3
1277 # @lint-avoid-python-3-compatibility-imports
1278 #
1279 # tcpconnect Trace TCP connect()s.
1280diff --git a/tools/old/wakeuptime.py b/tools/old/wakeuptime.py
1281index a4cd521d..da5ae0af 100644
1282--- a/tools/old/wakeuptime.py
1283+++ b/tools/old/wakeuptime.py
1284@@ -1,4 +1,4 @@
1285-#!/usr/bin/python
1286+#!/usr/bin/python3
1287 #
1288 # wakeuptime Summarize sleep to wakeup time by waker kernel stack
1289 # For Linux, uses BCC, eBPF.
1290diff --git a/tools/oomkill.py b/tools/oomkill.py
1291index 4f3b6ce7..c9fde155 100755
1292--- a/tools/oomkill.py
1293+++ b/tools/oomkill.py
1294@@ -1,4 +1,4 @@
1295-#!/usr/bin/python
1296+#!/usr/bin/python3
1297 #
1298 # oomkill Trace oom_kill_process(). For Linux, uses BCC, eBPF.
1299 #
1300diff --git a/tools/opensnoop.py b/tools/opensnoop.py
1301index 60d11c63..a4a49d93 100755
1302--- a/tools/opensnoop.py
1303+++ b/tools/opensnoop.py
1304@@ -1,4 +1,4 @@
1305-#!/usr/bin/python
1306+#!/usr/bin/python3
1307 # @lint-avoid-python-3-compatibility-imports
1308 #
1309 # opensnoop Trace open() syscalls.
1310diff --git a/tools/pidpersec.py b/tools/pidpersec.py
1311index c4490043..38f41960 100755
1312--- a/tools/pidpersec.py
1313+++ b/tools/pidpersec.py
1314@@ -1,4 +1,4 @@
1315-#!/usr/bin/python
1316+#!/usr/bin/python3
1317 # @lint-avoid-python-3-compatibility-imports
1318 #
1319 # pidpersec Count new processes (via fork).
1320diff --git a/tools/profile.py b/tools/profile.py
1321index dfbced6a..7ff9a93b 100755
1322--- a/tools/profile.py
1323+++ b/tools/profile.py
1324@@ -1,4 +1,4 @@
1325-#!/usr/bin/python
1326+#!/usr/bin/python3
1327 # @lint-avoid-python-3-compatibility-imports
1328 #
1329 # profile Profile CPU usage by sampling stack traces at a timed interval.
1330diff --git a/tools/runqlat.py b/tools/runqlat.py
1331index 9fd40642..52463f74 100755
1332--- a/tools/runqlat.py
1333+++ b/tools/runqlat.py
1334@@ -1,4 +1,4 @@
1335-#!/usr/bin/python
1336+#!/usr/bin/python3
1337 # @lint-avoid-python-3-compatibility-imports
1338 #
1339 # runqlat Run queue (scheduler) latency as a histogram.
1340diff --git a/tools/runqlen.py b/tools/runqlen.py
1341index b56a5916..aec8a8af 100755
1342--- a/tools/runqlen.py
1343+++ b/tools/runqlen.py
1344@@ -1,4 +1,4 @@
1345-#!/usr/bin/python
1346+#!/usr/bin/python3
1347 # @lint-avoid-python-3-compatibility-imports
1348 #
1349 # runqlen Summarize scheduler run queue length as a histogram.
1350diff --git a/tools/runqslower.py b/tools/runqslower.py
1351index b6785330..8b24d6b0 100755
1352--- a/tools/runqslower.py
1353+++ b/tools/runqslower.py
1354@@ -1,4 +1,4 @@
1355-#!/usr/bin/python
1356+#!/usr/bin/python3
1357 # @lint-avoid-python-3-compatibility-imports
1358 #
1359 # runqslower Trace long process scheduling delays.
1360diff --git a/tools/shmsnoop.py b/tools/shmsnoop.py
1361index 11b4b6f6..5fb443fa 100755
1362--- a/tools/shmsnoop.py
1363+++ b/tools/shmsnoop.py
1364@@ -1,4 +1,4 @@
1365-#!/usr/bin/python
1366+#!/usr/bin/python3
1367 # @lint-avoid-python-3-compatibility-imports
1368 #
1369 # shmsnoop Trace shm*() syscalls.
1370diff --git a/tools/slabratetop.py b/tools/slabratetop.py
1371index b947e44e..ec602162 100755
1372--- a/tools/slabratetop.py
1373+++ b/tools/slabratetop.py
1374@@ -1,4 +1,4 @@
1375-#!/usr/bin/python
1376+#!/usr/bin/python3
1377 # @lint-avoid-python-3-compatibility-imports
1378 #
1379 # slabratetop Summarize kmem_cache_alloc() calls.
1380diff --git a/tools/sofdsnoop.py b/tools/sofdsnoop.py
1381index 6df7fcad..37e57900 100755
1382--- a/tools/sofdsnoop.py
1383+++ b/tools/sofdsnoop.py
1384@@ -1,4 +1,4 @@
1385-#!/usr/bin/python
1386+#!/usr/bin/python3
1387 # @lint-avoid-python-3-compatibility-imports
1388 #
1389 # sofdsnoop traces file descriptors passed via socket
1390diff --git a/tools/softirqs.py b/tools/softirqs.py
1391index 1e2daf5f..97b00f26 100755
1392--- a/tools/softirqs.py
1393+++ b/tools/softirqs.py
1394@@ -1,4 +1,4 @@
1395-#!/usr/bin/python
1396+#!/usr/bin/python3
1397 # @lint-avoid-python-3-compatibility-imports
1398 #
1399 # softirqs Summarize soft IRQ (interrupt) event time.
1400diff --git a/tools/solisten.py b/tools/solisten.py
1401index fc066d84..31951e18 100755
1402--- a/tools/solisten.py
1403+++ b/tools/solisten.py
1404@@ -1,4 +1,4 @@
1405-#!/usr/bin/python
1406+#!/usr/bin/python3
1407 #
1408 # solisten Trace TCP listen events
1409 # For Linux, uses BCC, eBPF. Embedded C.
1410diff --git a/tools/sslsniff.py b/tools/sslsniff.py
1411index e48fbb47..5e01d7c1 100755
1412--- a/tools/sslsniff.py
1413+++ b/tools/sslsniff.py
1414@@ -1,4 +1,4 @@
1415-#!/usr/bin/python
1416+#!/usr/bin/python3
1417 #
1418 # sslsniff Captures data on read/recv or write/send functions of OpenSSL,
1419 # GnuTLS and NSS
1420diff --git a/tools/stackcount.py b/tools/stackcount.py
1421index a58f9e31..0d5b9be0 100755
1422--- a/tools/stackcount.py
1423+++ b/tools/stackcount.py
1424@@ -1,4 +1,4 @@
1425-#!/usr/bin/python
1426+#!/usr/bin/python3
1427 #
1428 # stackcount Count events and their stack traces.
1429 # For Linux, uses BCC, eBPF.
1430diff --git a/tools/statsnoop.py b/tools/statsnoop.py
1431index 6cdff945..e1ba3e5a 100755
1432--- a/tools/statsnoop.py
1433+++ b/tools/statsnoop.py
1434@@ -1,4 +1,4 @@
1435-#!/usr/bin/python
1436+#!/usr/bin/python3
1437 # @lint-avoid-python-3-compatibility-imports
1438 #
1439 # statsnoop Trace stat() syscalls.
1440diff --git a/tools/syncsnoop.py b/tools/syncsnoop.py
1441index e5fa78e3..162fbc2a 100755
1442--- a/tools/syncsnoop.py
1443+++ b/tools/syncsnoop.py
1444@@ -1,4 +1,4 @@
1445-#!/usr/bin/python
1446+#!/usr/bin/python3
1447 # @lint-avoid-python-3-compatibility-imports
1448 #
1449 # syncsnoop Trace sync() syscall.
1450diff --git a/tools/syscount.py b/tools/syscount.py
1451index 7ba08dd3..94b7ad34 100755
1452--- a/tools/syscount.py
1453+++ b/tools/syscount.py
1454@@ -1,4 +1,4 @@
1455-#!/usr/bin/python
1456+#!/usr/bin/python3
1457 #
1458 # syscount Summarize syscall counts and latencies.
1459 #
1460diff --git a/tools/tcpaccept.py b/tools/tcpaccept.py
1461index 914d5183..c9ef7678 100755
1462--- a/tools/tcpaccept.py
1463+++ b/tools/tcpaccept.py
1464@@ -1,4 +1,4 @@
1465-#!/usr/bin/python
1466+#!/usr/bin/python3
1467 # @lint-avoid-python-3-compatibility-imports
1468 #
1469 # tcpaccept Trace TCP accept()s.
1470diff --git a/tools/tcpconnect.py b/tools/tcpconnect.py
1471index eb12667e..7ba92394 100755
1472--- a/tools/tcpconnect.py
1473+++ b/tools/tcpconnect.py
1474@@ -1,4 +1,4 @@
1475-#!/usr/bin/python
1476+#!/usr/bin/python3
1477 # @lint-avoid-python-3-compatibility-imports
1478 #
1479 # tcpconnect Trace TCP connect()s.
1480diff --git a/tools/tcpconnlat.py b/tools/tcpconnlat.py
1481index 8f686211..657a8cea 100755
1482--- a/tools/tcpconnlat.py
1483+++ b/tools/tcpconnlat.py
1484@@ -1,4 +1,4 @@
1485-#!/usr/bin/python
1486+#!/usr/bin/python3
1487 # @lint-avoid-python-3-compatibility-imports
1488 #
1489 # tcpconnlat Trace TCP active connection latency (connect).
1490diff --git a/tools/tcpdrop.py b/tools/tcpdrop.py
1491index 14515f75..2076aeb0 100755
1492--- a/tools/tcpdrop.py
1493+++ b/tools/tcpdrop.py
1494@@ -1,4 +1,4 @@
1495-#!/usr/bin/python
1496+#!/usr/bin/python3
1497 # @lint-avoid-python-3-compatibility-imports
1498 #
1499 # tcpdrop Trace TCP kernel-dropped packets/segments.
1500diff --git a/tools/tcplife.py b/tools/tcplife.py
1501index ed251553..c62c1fc5 100755
1502--- a/tools/tcplife.py
1503+++ b/tools/tcplife.py
1504@@ -1,4 +1,4 @@
1505-#!/usr/bin/python
1506+#!/usr/bin/python3
1507 # @lint-avoid-python-3-compatibility-imports
1508 #
1509 # tcplife Trace the lifespan of TCP sessions and summarize.
1510diff --git a/tools/tcpretrans.py b/tools/tcpretrans.py
1511index 1b2636ae..936028f6 100755
1512--- a/tools/tcpretrans.py
1513+++ b/tools/tcpretrans.py
1514@@ -1,4 +1,4 @@
1515-#!/usr/bin/python
1516+#!/usr/bin/python3
1517 # @lint-avoid-python-3-compatibility-imports
1518 #
1519 # tcpretrans Trace or count TCP retransmits and TLPs.
1520diff --git a/tools/tcpstates.py b/tools/tcpstates.py
1521index 3c78b1c4..0d3e9a0f 100755
1522--- a/tools/tcpstates.py
1523+++ b/tools/tcpstates.py
1524@@ -1,4 +1,4 @@
1525-#!/usr/bin/python
1526+#!/usr/bin/python3
1527 # -*- coding: utf-8 -*-
1528 # @lint-avoid-python-3-compatibility-imports
1529 #
1530diff --git a/tools/tcpsubnet.py b/tools/tcpsubnet.py
1531index 5f2a8062..302f7200 100755
1532--- a/tools/tcpsubnet.py
1533+++ b/tools/tcpsubnet.py
1534@@ -1,4 +1,4 @@
1535-#!/usr/bin/python
1536+#!/usr/bin/python3
1537 # @lint-avoid-python-3-compatibility-imports
1538 #
1539 # tcpsubnet Summarize TCP bytes sent to different subnets.
1540diff --git a/tools/tcptop.py b/tools/tcptop.py
1541index 5f09bed4..0eb45c54 100755
1542--- a/tools/tcptop.py
1543+++ b/tools/tcptop.py
1544@@ -1,4 +1,4 @@
1545-#!/usr/bin/python
1546+#!/usr/bin/python3
1547 # @lint-avoid-python-3-compatibility-imports
1548 #
1549 # tcptop Summarize TCP send/recv throughput by host.
1550diff --git a/tools/tcptracer.py b/tools/tcptracer.py
1551index e61fe9ba..544431c3 100755
1552--- a/tools/tcptracer.py
1553+++ b/tools/tcptracer.py
1554@@ -1,4 +1,4 @@
1555-#!/usr/bin/python
1556+#!/usr/bin/python3
1557 #
1558 # tcpv4tracer Trace TCP connections.
1559 # For Linux, uses BCC, eBPF. Embedded C.
1560diff --git a/tools/tplist.py b/tools/tplist.py
1561index 6ec2fbe1..e20eb0c3 100755
1562--- a/tools/tplist.py
1563+++ b/tools/tplist.py
1564@@ -1,4 +1,4 @@
1565-#!/usr/bin/python
1566+#!/usr/bin/python3
1567 #
1568 # tplist Display kernel tracepoints or USDT probes and their formats.
1569 #
1570diff --git a/tools/trace.py b/tools/trace.py
1571index 9afd6726..b370f8bd 100755
1572--- a/tools/trace.py
1573+++ b/tools/trace.py
1574@@ -1,4 +1,4 @@
1575-#!/usr/bin/python
1576+#!/usr/bin/python3
1577 #
1578 # trace Trace a function and print a trace message based on its
1579 # parameters, with an optional filter.
1580diff --git a/tools/ttysnoop.py b/tools/ttysnoop.py
1581index 058dc7e3..fa6280bf 100755
1582--- a/tools/ttysnoop.py
1583+++ b/tools/ttysnoop.py
1584@@ -1,4 +1,4 @@
1585-#!/usr/bin/python
1586+#!/usr/bin/python3
1587 # @lint-avoid-python-3-compatibility-imports
1588 #
1589 # ttysnoop Watch live output from a tty or pts device.
1590diff --git a/tools/vfscount.py b/tools/vfscount.py
1591index 303d3fde..fa0fe9a0 100755
1592--- a/tools/vfscount.py
1593+++ b/tools/vfscount.py
1594@@ -1,4 +1,4 @@
1595-#!/usr/bin/python
1596+#!/usr/bin/python3
1597 # @lint-avoid-python-3-compatibility-imports
1598 #
1599 # vfscount Count VFS calls ("vfs_*").
1600diff --git a/tools/vfsstat.py b/tools/vfsstat.py
1601index 1764c601..7ff54070 100755
1602--- a/tools/vfsstat.py
1603+++ b/tools/vfsstat.py
1604@@ -1,4 +1,4 @@
1605-#!/usr/bin/python
1606+#!/usr/bin/python3
1607 # @lint-avoid-python-3-compatibility-imports
1608 #
1609 # vfsstat Count some VFS calls.
1610diff --git a/tools/wakeuptime.py b/tools/wakeuptime.py
1611index a22245a7..b31fa981 100755
1612--- a/tools/wakeuptime.py
1613+++ b/tools/wakeuptime.py
1614@@ -1,4 +1,4 @@
1615-#!/usr/bin/python
1616+#!/usr/bin/python3
1617 #
1618 # wakeuptime Summarize sleep to wakeup time by waker kernel stack
1619 # For Linux, uses BCC, eBPF.
1620diff --git a/tools/xfsdist.py b/tools/xfsdist.py
1621index f409f90d..fb8c43cb 100755
1622--- a/tools/xfsdist.py
1623+++ b/tools/xfsdist.py
1624@@ -1,4 +1,4 @@
1625-#!/usr/bin/python
1626+#!/usr/bin/python3
1627 # @lint-avoid-python-3-compatibility-imports
1628 #
1629 # xfsdist Summarize XFS operation latency.
1630diff --git a/tools/xfsslower.py b/tools/xfsslower.py
1631index 9fa12566..2ad21f05 100755
1632--- a/tools/xfsslower.py
1633+++ b/tools/xfsslower.py
1634@@ -1,4 +1,4 @@
1635-#!/usr/bin/python
1636+#!/usr/bin/python3
1637 # @lint-avoid-python-3-compatibility-imports
1638 #
1639 # xfsslower Trace slow XFS operations.
1640diff --git a/tools/zfsdist.py b/tools/zfsdist.py
1641index 6b29b99b..e41d91a7 100755
1642--- a/tools/zfsdist.py
1643+++ b/tools/zfsdist.py
1644@@ -1,4 +1,4 @@
1645-#!/usr/bin/python
1646+#!/usr/bin/python3
1647 # @lint-avoid-python-3-compatibility-imports
1648 #
1649 # zfsdist Summarize ZFS operation latency.
1650diff --git a/tools/zfsslower.py b/tools/zfsslower.py
1651index 2f05b561..a88a3bef 100755
1652--- a/tools/zfsslower.py
1653+++ b/tools/zfsslower.py
1654@@ -1,4 +1,4 @@
1655-#!/usr/bin/python
1656+#!/usr/bin/python3
1657 # @lint-avoid-python-3-compatibility-imports
1658 #
1659 # zfsslower Trace slow ZFS operations.
1660--
16612.17.1
1662
diff --git a/recipes-devtools/bcc/bcc_0.12.0.bb b/recipes-devtools/bcc/bcc_0.12.0.bb
new file mode 100644
index 0000000..1da699e
--- /dev/null
+++ b/recipes-devtools/bcc/bcc_0.12.0.bb
@@ -0,0 +1,38 @@
1SUMMARY = "BPF Compiler Collection (BCC)"
2HOMEPAGE = "https://github.com/iovisor/bcc"
3LICENSE = "Apache-2.0"
4LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e3fc50a88d0a364313df4b21ef20c29e"
5
6DEPENDS += "bison-native \
7 ninja-native \
8 elfutils-native \
9 flex-native \
10 ${MLPREFIX}elfutils \
11 ${MLPREFIX}binutils \
12 ${MLPREFIX}flex \
13 luajit \
14 clang \
15 "
16
17RDEPENDS_${PN} += "bash python3 python3-core"
18
19SRC_URI = "git://github.com/iovisor/bcc \
20 file://0001-Allow-to-build-with-OE-LLVM-cross-compiled-package.patch \
21 file://0001-BCC-Use-python-3.patch \
22 "
23SRCREV = "368a5b0714961953f3e3f61607fa16cb71449c1b"
24
25S = "${WORKDIR}/git"
26
27inherit cmake
28
29EXTRA_OECMAKE = " \
30 -DCMAKE_INSTALL_PREFIX=/usr \
31 -DENABLE_LLVM_SHARED=ON \
32 -DENABLE_CLANG_JIT=ON \
33 -DENABLE_MAN=OFF \
34 -DLLVM_PACKAGE_VERSION=${LLVMVERSION} \
35 -DPYTHON_CMD=python3 \
36"
37
38FILES_${PN} += "${libdir}/python*/dist-packages"