aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-15 09:23:11 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-15 09:23:11 +0000
commit68df19ba851a31895789d6cc345ec692682094f6 (patch)
treee67d6f8a8fc93377ee09bcd73e2358eff8cf748c
parent44f886e58feb30579181ff2ed93e22bf47edf54e (diff)
parent617a769f1dd5f42cba8871064a7969dc506f1390 (diff)
downloadlibbpf-aml_tz5_341510010.tar.gz
Snap for 11224086 from 617a769f1dd5f42cba8871064a7969dc506f1390 to mainline-tzdata5-releaseaml_tz5_341510070aml_tz5_341510050aml_tz5_341510010aml_tz5_341510010
Change-Id: I50719f2909259d1ecd7ba5467f2a4a6776b9121d
-rw-r--r--Android.bp13
-rw-r--r--android/btfloader.cpp94
2 files changed, 0 insertions, 107 deletions
diff --git a/Android.bp b/Android.bp
index 46ceb65..57c8880 100644
--- a/Android.bp
+++ b/Android.bp
@@ -121,16 +121,3 @@ cc_library {
"-Wno-unused-parameter",
],
}
-
-cc_binary {
- name: "btfloader",
- srcs: ["android/btfloader.cpp"],
- static_libs: [
- "libbpf",
- "libelf",
- "libz"
- ],
- cflags: [
- "-Wno-deprecated-declarations",
- ]
-}
diff --git a/android/btfloader.cpp b/android/btfloader.cpp
deleted file mode 100644
index cd82262..0000000
--- a/android/btfloader.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-#include <sys/socket.h>
-#include <sysexits.h>
-#include <unistd.h>
-
-#include <bpf/btf.h>
-#include <bpf/libbpf.h>
-
-#include <cstdlib>
-#include <sstream>
-
-constexpr int kERROR_BPF_OBJECT_OPEN = 1;
-constexpr int kERROR_BTF_NOT_FOUND = 2;
-constexpr int kERROR_LOAD_BTF = 3;
-constexpr int kERROR_SEND_BTF_FD = 4;
-constexpr int kERROR_BTF_TYPE_IDS = 5;
-
-static int no_print(enum libbpf_print_level , const char *, va_list ) {
- return 0;
-}
-
-int sendBtfFd(int socket, int fd) {
- char buf[CMSG_SPACE(sizeof(fd))];
-
- struct msghdr msg;
- memset(&msg, 0, sizeof(msg));
- msg.msg_control = buf;
- msg.msg_controllen = sizeof(buf);
-
- struct cmsghdr *cmsg = CMSG_FIRSTHDR(&msg);
- cmsg->cmsg_level = SOL_SOCKET;
- cmsg->cmsg_type = SCM_RIGHTS;
- cmsg->cmsg_len = CMSG_LEN(sizeof(fd));
-
- *(int*)CMSG_DATA(cmsg) = fd;
- return sendmsg(socket, &msg, 0);
-}
-
-int main(int argc, char **argv) {
- int ret = 0, socketFd, pipeFd, btfFd;
- if (argc != 4) return EX_USAGE;
-
- socketFd = atoi(argv[1]);
- pipeFd = atoi(argv[2]);
-
- auto path(argv[3]);
- ret = libbpf_set_strict_mode(LIBBPF_STRICT_CLEAN_PTRS);
- if (ret) return EX_SOFTWARE;
-
- libbpf_set_print(no_print);
-
- struct bpf_object_open_opts opts = {
- .relaxed_maps = true,
- .sz = sizeof(struct bpf_object_open_opts),
- };
- struct bpf_object *obj = bpf_object__open_file(path, &opts);
- if (!obj) return kERROR_BPF_OBJECT_OPEN;
-
- struct btf *btf = bpf_object__btf(obj);
- if (!btf) return kERROR_BTF_NOT_FOUND;
-
- ret = btf__load_into_kernel(btf);
- if (ret) {
- if (errno != EINVAL) return kERROR_LOAD_BTF;
- // For BTF_KIND_FUNC, newer kernels can read the BTF_INFO_VLEN bits of
- // struct btf_type to distinguish static vs. global vs. extern
- // functions, but older kernels enforce that only the BTF_INFO_KIND bits
- // can be set. Retry with non-BTF_INFO_KIND bits zeroed out to handle
- // this case.
- for (unsigned int i = 1; i < btf__type_cnt(btf); ++i) {
- struct btf_type *bt = (struct btf_type *)btf__type_by_id(btf, i);
- if (btf_is_func(bt)) {
- bt->info = (BTF_INFO_KIND(bt->info)) << 24;
- }
- }
- if (btf__load_into_kernel(btf)) return kERROR_LOAD_BTF;
- }
-
- btfFd = btf__fd(btf);
- if (sendBtfFd(socketFd, btf__fd(btf))) return kERROR_SEND_BTF_FD;
-
- std::ostringstream oss;
- struct bpf_map *m;
- bpf_object__for_each_map(m, obj) {
- unsigned kTid, vTid;
- auto mapName = bpf_map__name(m);
- if (btf__get_map_kv_tids(btf, mapName, bpf_map__key_size(m),
- bpf_map__value_size(m), &kTid, &vTid))
- return kERROR_BTF_TYPE_IDS;
- oss << mapName << ' ' << kTid << ' ' << vTid << '\n';
- }
- write(pipeFd, oss.str().c_str(), oss.str().size());
-
- return EX_OK;
-}