aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-02-07 20:08:32 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-02-07 20:08:32 +0000
commit41065cda77e818716bab177ea578da7ea6419a0a (patch)
tree63caa3a3f61bdfffe3a6e54b3bd4c0295f0e11ed
parent459cf6df568955691cbd408a21312aea6853b933 (diff)
parent697eaac6474bcec003e1a758efc42d6f75feb795 (diff)
downloadbcc-41065cda77e818716bab177ea578da7ea6419a0a.tar.gz
Check /sys/kernel/tracing for tracefs am: b96eb478b0 am: 0bdd6b3a22 am: 697eaac647r_aml_301500702android-mainline-12.0.0_r55android-mainline-11.0.0_r9android-mainline-11.0.0_r8android-mainline-11.0.0_r7android-mainline-11.0.0_r6android-mainline-11.0.0_r5android-mainline-11.0.0_r45android-mainline-11.0.0_r44android-mainline-11.0.0_r43android-mainline-11.0.0_r42android-mainline-11.0.0_r41android-mainline-11.0.0_r40android-mainline-11.0.0_r4android-mainline-11.0.0_r39android-mainline-11.0.0_r38android-mainline-11.0.0_r37android-mainline-11.0.0_r36android-mainline-11.0.0_r35android-mainline-11.0.0_r34android-mainline-11.0.0_r33android-mainline-11.0.0_r32android-mainline-11.0.0_r31android-mainline-11.0.0_r30android-mainline-11.0.0_r3android-mainline-11.0.0_r29android-mainline-11.0.0_r28android-mainline-11.0.0_r27android-mainline-11.0.0_r26android-mainline-11.0.0_r25android-mainline-11.0.0_r24android-mainline-11.0.0_r23android-mainline-11.0.0_r22android-mainline-11.0.0_r21android-mainline-11.0.0_r20android-mainline-11.0.0_r2android-mainline-11.0.0_r19android-mainline-11.0.0_r18android-mainline-11.0.0_r17android-mainline-11.0.0_r16android-mainline-11.0.0_r15android-mainline-11.0.0_r14android-mainline-11.0.0_r13android-mainline-11.0.0_r12android-mainline-11.0.0_r10android-mainline-11.0.0_r1android-11.0.0_r48android-11.0.0_r47android-11.0.0_r46android-11.0.0_r45android-11.0.0_r44android-11.0.0_r43android-11.0.0_r42android-11.0.0_r41android-11.0.0_r40android-11.0.0_r39android-11.0.0_r38android-11.0.0_r37android-11.0.0_r36android-11.0.0_r35android-11.0.0_r34android-11.0.0_r33android-11.0.0_r32android-11.0.0_r31android-11.0.0_r30android-11.0.0_r29android-11.0.0_r28android-11.0.0_r27android-11.0.0_r26android-11.0.0_r24android-11.0.0_r23android-11.0.0_r22android-11.0.0_r21android-11.0.0_r20android-11.0.0_r19android-11.0.0_r18android-11.0.0_r16android11-qpr3-s1-releaseandroid11-qpr3-releaseandroid11-qpr2-releaseandroid11-qpr1-s2-releaseandroid11-qpr1-s1-releaseandroid11-qpr1-releaseandroid11-qpr1-d-s1-releaseandroid11-qpr1-d-releaseandroid11-qpr1-c-releaseandroid11-mainline-tethering-releaseandroid11-mainline-sparse-2021-jan-releaseandroid11-mainline-sparse-2020-dec-releaseandroid11-mainline-releaseandroid11-mainline-permission-releaseandroid11-mainline-os-statsd-releaseandroid11-mainline-networkstack-releaseandroid11-mainline-media-swcodec-releaseandroid11-mainline-media-releaseandroid11-mainline-extservices-releaseandroid11-mainline-documentsui-releaseandroid11-mainline-conscrypt-releaseandroid11-mainline-cellbroadcast-releaseandroid11-mainline-captiveportallogin-releaseandroid11-devandroid11-d2-releaseandroid11-d1-b-release
Change-Id: I84896e7db5f69934c767b847a48fb8a2fb530b79
-rw-r--r--src/cc/libbpf.c66
1 files changed, 52 insertions, 14 deletions
diff --git a/src/cc/libbpf.c b/src/cc/libbpf.c
index 90ae2fd8..6b295fea 100644
--- a/src/cc/libbpf.c
+++ b/src/cc/libbpf.c
@@ -843,6 +843,7 @@ int bpf_attach_kprobe(int progfd, enum bpf_probe_attach_type attach_type,
char buf[256];
char event_alias[128];
static char *event_type = "kprobe";
+ bool use_debugfs = false;
// Try create the kprobe Perf Event with perf_event_open API.
pfd = bpf_try_perf_event_open_with_probe(fn_name, fn_offset, -1, event_type,
@@ -850,11 +851,17 @@ int bpf_attach_kprobe(int progfd, enum bpf_probe_attach_type attach_type,
// If failed, most likely Kernel doesn't support the new perf_event_open API
// yet. Try create the event using debugfs.
if (pfd < 0) {
- snprintf(buf, sizeof(buf), "/sys/kernel/debug/tracing/%s_events", event_type);
+ snprintf(buf, sizeof(buf), "/sys/kernel/tracing/%s_events", event_type);
kfd = open(buf, O_WRONLY | O_APPEND | O_CLOEXEC, 0);
if (kfd < 0) {
- fprintf(stderr, "open(%s): %s\n", buf, strerror(errno));
- goto error;
+ use_debugfs = true;
+ snprintf(buf, sizeof(buf),
+ "/sys/kernel/debug/tracing/%s_events", event_type);
+ kfd = open(buf, O_WRONLY | O_APPEND | O_CLOEXEC, 0);
+ if (kfd < 0) {
+ fprintf(stderr, "open(%s): %s\n", buf, strerror(errno));
+ goto error;
+ }
}
snprintf(event_alias, sizeof(event_alias), "%s_bcc_%d", ev_name, getpid());
@@ -876,7 +883,13 @@ int bpf_attach_kprobe(int progfd, enum bpf_probe_attach_type attach_type,
goto error;
}
close(kfd);
- snprintf(buf, sizeof(buf), "/sys/kernel/debug/tracing/events/%ss/%s", event_type, event_alias);
+ if (use_debugfs) {
+ snprintf(buf, sizeof(buf), "/sys/kernel/debug/tracing/events/%ss/%s", event_type,
+ event_alias);
+ } else {
+ snprintf(buf, sizeof(buf), "/sys/kernel/tracing/events/%ss/%s", event_type,
+ event_alias);
+ }
}
// If perf_event_open succeeded, bpf_attach_tracing_event will use the created
// Perf Event FD directly and buf would be empty and unused.
@@ -960,17 +973,23 @@ int bpf_attach_uprobe(int progfd, enum bpf_probe_attach_type attach_type,
char event_alias[PATH_MAX];
static char *event_type = "uprobe";
int res, kfd = -1, pfd = -1, ns_fd = -1;
+ bool use_debugfs = false;
// Try create the uprobe Perf Event with perf_event_open API.
pfd = bpf_try_perf_event_open_with_probe(binary_path, offset, pid, event_type,
attach_type != BPF_PROBE_ENTRY);
// If failed, most likely Kernel doesn't support the new perf_event_open API
// yet. Try create the event using debugfs.
if (pfd < 0) {
- snprintf(buf, sizeof(buf), "/sys/kernel/debug/tracing/%s_events", event_type);
+ snprintf(buf, sizeof(buf), "/sys/kernel/tracing/%s_events", event_type);
kfd = open(buf, O_WRONLY | O_APPEND | O_CLOEXEC, 0);
if (kfd < 0) {
- fprintf(stderr, "open(%s): %s\n", buf, strerror(errno));
- goto error;
+ use_debugfs = true;
+ snprintf(buf, sizeof(buf), "/sys/kernel/debug/tracing/%s_events", event_type);
+ kfd = open(buf, O_WRONLY | O_APPEND | O_CLOEXEC, 0);
+ if (kfd < 0) {
+ fprintf(stderr, "open(%s): %s\n", buf, strerror(errno));
+ goto error;
+ }
}
res = snprintf(event_alias, sizeof(event_alias), "%s_bcc_%d", ev_name, getpid());
@@ -995,8 +1014,12 @@ int bpf_attach_uprobe(int progfd, enum bpf_probe_attach_type attach_type,
kfd = -1;
exit_mount_ns(ns_fd);
ns_fd = -1;
-
- snprintf(buf, sizeof(buf), "/sys/kernel/debug/tracing/events/%ss/%s", event_type, event_alias);
+ if (use_debugfs) {
+ snprintf(buf, sizeof(buf), "/sys/kernel/debug/tracing/events/%ss/%s", event_type,
+ event_alias);
+ } else {
+ snprintf(buf, sizeof(buf), "/sys/kernel/tracing/events/%ss/%s", event_type, event_alias);
+ }
}
// If perf_event_open succeeded, bpf_attach_tracing_event will use the created
// Perf Event FD directly and buf would be empty and unused.
@@ -1021,6 +1044,7 @@ static int bpf_detach_probe(const char *ev_name, const char *event_type)
size_t bufsize = 0;
char *cptr = NULL;
FILE *fp;
+ bool use_debugfs = false;
/*
* For [k,u]probe created with perf_event_open (on newer kernel), it is
@@ -1028,11 +1052,16 @@ static int bpf_detach_probe(const char *ev_name, const char *event_type)
* the %s_bcc_%d line in [k,u]probe_events. If the event is not found,
* it is safe to skip the cleaning up process (write -:... to the file).
*/
- snprintf(buf, sizeof(buf), "/sys/kernel/debug/tracing/%s_events", event_type);
+ snprintf(buf, sizeof(buf), "/sys/kernel/tracing/%s_events", event_type);
fp = fopen(buf, "re");
if (!fp) {
- fprintf(stderr, "open(%s): %s\n", buf, strerror(errno));
- goto error;
+ use_debugfs = true;
+ snprintf(buf, sizeof(buf), "/sys/kernel/debug/tracing/%s_events", event_type);
+ fp = fopen(buf, "re");
+ if (!fp) {
+ fprintf(stderr, "open(%s): %s\n", buf, strerror(errno));
+ goto error;
+ }
}
res = snprintf(buf, sizeof(buf), "%ss/%s_bcc_%d", event_type, ev_name, getpid());
@@ -1052,8 +1081,11 @@ static int bpf_detach_probe(const char *ev_name, const char *event_type)
if (!found_event)
return 0;
-
- snprintf(buf, sizeof(buf), "/sys/kernel/debug/tracing/%s_events", event_type);
+ if (use_debugfs) {
+ snprintf(buf, sizeof(buf), "/sys/kernel/debug/tracing/%s_events", event_type);
+ } else {
+ snprintf(buf, sizeof(buf), "/sys/kernel/tracing/%s_events", event_type);
+ }
kfd = open(buf, O_WRONLY | O_APPEND | O_CLOEXEC, 0);
if (kfd < 0) {
fprintf(stderr, "open(%s): %s\n", buf, strerror(errno));
@@ -1098,6 +1130,12 @@ int bpf_attach_tracepoint(int progfd, const char *tp_category,
char buf[256];
int pfd = -1;
+ snprintf(buf, sizeof(buf), "/sys/kernel/tracing/events/%s/%s",
+ tp_category, tp_name);
+ if (bpf_attach_tracing_event(progfd, buf, -1 /* PID */, &pfd) == 0)
+ return pfd;
+
+ // try debugfs next
snprintf(buf, sizeof(buf), "/sys/kernel/debug/tracing/events/%s/%s",
tp_category, tp_name);
if (bpf_attach_tracing_event(progfd, buf, -1 /* PID */, &pfd) == 0)