aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoryonghong-song <ys114321@gmail.com>2018-06-11 11:41:34 -0700
committerGitHub <noreply@github.com>2018-06-11 11:41:34 -0700
commitd83210da7876a3f70551372ed9c5ff83e639bcec (patch)
treee0bf56f324aeeb5708ed1d0ac3bb553c21759d50 /src
parent81de82c642186cb1e87b760f1a18ba14bc609b25 (diff)
downloadbcc-d83210da7876a3f70551372ed9c5ff83e639bcec.tar.gz
remove unnecessary prefix in some prog names (#1814)
bcc uses some func prefixes for auto load purpose. These func prefixes include "kprobe__", "tracepoint__" and "raw_tracepoint__". Currently we also pass this function name as the program name to the kernel. The kernel can only accept 16 bytes so long program name will be truncated. For example, with bps we will see something like 287- <raw_tracepoint> 0 2 Jun10/17:07 raw_tracepoint_ 290- tracepoint 0 4 Jun10/17:08 tracepoint__soc 297- kprobe 0 2 Jun10/17:09 kprobe__tcp_cle Such long prefixes are unnecessarily taking the space for the real function name. This patch removed such prefixes before giving them to the kernel. The result will like below: 311- <raw_tracepoint> 0 2 Jun10/17:44 sched_switch 321- tracepoint 0 4 Jun10/17:45 sock__inet_sock 322- kprobe 0 2 Jun10/17:45 tcp_cleanup_rbu Signed-off-by: Yonghong Song <yhs@fb.com>
Diffstat (limited to 'src')
-rw-r--r--src/cc/libbpf.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/cc/libbpf.c b/src/cc/libbpf.c
index 84094d76..c23030e9 100644
--- a/src/cc/libbpf.c
+++ b/src/cc/libbpf.c
@@ -468,7 +468,7 @@ int bpf_prog_load(enum bpf_prog_type prog_type, const char *name,
union bpf_attr attr;
char *tmp_log_buf = NULL;
unsigned tmp_log_buf_size = 0;
- int ret = 0;
+ int ret = 0, name_offset = 0;
memset(&attr, 0, sizeof(attr));
@@ -509,7 +509,14 @@ int bpf_prog_load(enum bpf_prog_type prog_type, const char *name,
}
}
- memcpy(attr.prog_name, name, min(name_len, BPF_OBJ_NAME_LEN - 1));
+ if (strncmp(name, "kprobe__", 8) == 0)
+ name_offset = 8;
+ else if (strncmp(name, "tracepoint__", 12) == 0)
+ name_offset = 12;
+ else if (strncmp(name, "raw_tracepoint__", 16) == 0)
+ name_offset = 16;
+ memcpy(attr.prog_name, name + name_offset,
+ min(name_len - name_offset, BPF_OBJ_NAME_LEN - 1));
ret = syscall(__NR_bpf, BPF_PROG_LOAD, &attr, sizeof(attr));
// BPF object name is not supported on older Kernels.