課題
下記のBCCを利用したPythonプログラムを動かしてみます。
#!/usr/bin/python3
from bcc import BPF
program = r"""
#include <linux/sched.h>
int hello(void *ctx) {
int pid = bpf_get_current_pid_tgid() >> 32;
int uid = bpf_get_current_uid_gid() & 0xFFFFFFFF;
char command[TASK_COMM_LEN];
bpf_get_current_comm(command, sizeof(command));
bpf_trace_printk("uid = %d, pid = %d, comm %s", uid, pid, command);
return 0;
}
"""
b = BPF(text=program)
syscall = b.get_syscall_fnname("execve")
b.attach_kprobe(event=syscall, fn_name="hello")
b.trace_print()
コンパイラからのWarningが出てくるのでこれを回避したいです。
$ sudo python3 ./hoge.py
In file included from <built-in>:2:
In file included from /virtual/include/bcc/bpf.h:12:
In file included from include/linux/types.h:6:
In file included from include/uapi/linux/types.h:14:
In file included from include/uapi/linux/posix_types.h:5:
In file included from include/linux/stddef.h:5:
In file included from include/uapi/linux/stddef.h:2:
In file included from include/linux/compiler_types.h:80:
include/linux/compiler-clang.h:41:9: warning: '__HAVE_BUILTIN_BSWAP32__' macro redefined [-Wmacro-redefined]
#define __HAVE_BUILTIN_BSWAP32__
^
<command line>:4:9: note: previous definition is here
#define __HAVE_BUILTIN_BSWAP32__ 1
^
In file included from <built-in>:2:
In file included from /virtual/include/bcc/bpf.h:12:
In file included from include/linux/types.h:6:
In file included from include/uapi/linux/types.h:14:
In file included from include/uapi/linux/posix_types.h:5:
In file included from include/linux/stddef.h:5:
In file included from include/uapi/linux/stddef.h:2:
In file included from include/linux/compiler_types.h:80:
include/linux/compiler-clang.h:42:9: warning: '__HAVE_BUILTIN_BSWAP64__' macro redefined [-Wmacro-redefined]
#define __HAVE_BUILTIN_BSWAP64__
^
<command line>:5:9: note: previous definition is here
#define __HAVE_BUILTIN_BSWAP64__ 1
^
In file included from <built-in>:2:
In file included from /virtual/include/bcc/bpf.h:12:
In file included from include/linux/types.h:6:
In file included from include/uapi/linux/types.h:14:
In file included from include/uapi/linux/posix_types.h:5:
In file included from include/linux/stddef.h:5:
In file included from include/uapi/linux/stddef.h:2:
In file included from include/linux/compiler_types.h:80:
include/linux/compiler-clang.h:43:9: warning: '__HAVE_BUILTIN_BSWAP16__' macro redefined [-Wmacro-redefined]
#define __HAVE_BUILTIN_BSWAP16__
^
<command line>:3:9: note: previous definition is here
#define __HAVE_BUILTIN_BSWAP16__ 1
^
3 warnings generated.
cc^CTraceback (most recent call last):
File "/home/tsuyoshi/./hoge3.py", line 25, in <module>
b.trace_print()
File "/usr/lib/python3/dist-packages/bcc/__init__.py", line 1332, in trace_print
line = self.trace_readline(nonblocking=False)
File "/usr/lib/python3/dist-packages/bcc/__init__.py", line 1312, in trace_readline
line = trace.readline(1024).rstrip()
対処法
BPFの第2引数にcflagsにWno-macro-redefinedを追加することで、コンパイラからの警告を回避できます。
#!/usr/bin/python3
from bcc import BPF
program = r"""
#include <linux/sched.h>
int hello(void *ctx) {
int pid = bpf_get_current_pid_tgid() >> 32;
int uid = bpf_get_current_uid_gid() & 0xFFFFFFFF;
char command[TASK_COMM_LEN];
bpf_get_current_comm(command, sizeof(command));
bpf_trace_printk("uid = %d, pid = %d, comm %s", uid, pid, command);
return 0;
}
"""
b = BPF(text=program, cflags=["-Wno-macro-redefined"])
syscall = b.get_syscall_fnname("execve")
b.attach_kprobe(event=syscall, fn_name="hello")
b.trace_print()