関数のやりとりの流れ
- bcc_usdt_new_frompid でvoid* USDTをつくる
- bcc_usdt_enable_probe で有効にする
- bpf_module_create_c_from_stringするときに
- bcc_usdt_genargs で生成したテキストを先頭に追加する
- bcc_func_load する
- https://github.com/iovisor/bcc/blob/c36f5bf297e36e96fa5ce6899d9ba579ef782501/src/python/bcc/__init__.py#L370-L375
- bpf_attach_uprobe() に必要な int progfd がこれで取れる
- bcc_usdt_foreach_uprobe(void *usdt, bcc_usdt_uprobe_cb callback) のループでuprobeを取り出す
- その中で bpf_attach_uprobe する
- traceする
/sys/kernel/debug/tracing/trace_pipe
をバイナリモードで開く- https://github.com/iovisor/bcc/blob/c36f5bf297e36e96fa5ce6899d9ba579ef782501/src/python/bcc/__init__.py#L1114
- https://github.com/iovisor/bcc/blob/c36f5bf297e36e96fa5ce6899d9ba579ef782501/src/python/bcc/__init__.py#L1150-L1164
- 実装を見るとただのファイルとして扱ってそう...
みるべきヘッダ
https://github.com/iovisor/bcc/blob/33bffcaadcf3bd70807dc1de1145de54b6b7ab67/src/cc/bcc_usdt.h https://github.com/iovisor/bcc/blob/1d6d45cd2604af307c5f0e502df57fe66fd869d5/src/cc/libbpf.h#L86 https://github.com/iovisor/bcc/blob/1d6d45cd2604af307c5f0e502df57fe66fd869d5/src/cc/bcc_common.h#L31
$ ls -l /usr/include/bcc/
total 88
-rw-r--r-- 1 root root 11173 Jun 20 08:21 BPF.h
-rw-r--r-- 1 root root 12089 Jun 20 08:21 BPFTable.h
-rw-r--r-- 1 root root 3549 Jun 20 08:21 bcc_common.h
-rw-r--r-- 1 root root 2881 Jun 20 08:21 bcc_elf.h
-rw-r--r-- 1 root root 1488 Jun 20 08:21 bcc_exception.h
-rw-r--r-- 1 root root 3806 Jun 20 08:21 bcc_syms.h
-rw-r--r-- 1 root root 2778 Jun 20 08:21 bcc_usdt.h
-rw-r--r-- 1 root root 3001 Nov 29 2017 bpf_common.h
-rw-r--r-- 1 root root 6478 Jun 20 08:21 bpf_module.h
drwxr-xr-x 3 root root 4096 Jun 20 08:13 compat
-rw-r--r-- 1 root root 1617 Jun 20 08:21 file_desc.h
-rw-r--r-- 1 root root 9800 Jun 20 08:21 libbpf.h
-rw-r--r-- 1 root root 1294 Jun 20 08:21 perf_reader.h
-rw-r--r-- 1 root root 3694 Jun 20 08:21 table_desc.h
-rw-r--r-- 1 root root 3175 Jun 20 08:21 table_storage.h