diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-10-13 21:23:49 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-10-13 21:23:49 +0000 |
commit | 25a736dd22d1bad2c377e2396535c666f308d55c (patch) | |
tree | e67d6f8a8fc93377ee09bcd73e2358eff8cf748c | |
parent | 14ccd8890462048731f946ee28b865059bbe1eb0 (diff) | |
parent | 617a769f1dd5f42cba8871064a7969dc506f1390 (diff) | |
download | libbpf-aml_ads_341517040.tar.gz |
Snap for 10948810 from 617a769f1dd5f42cba8871064a7969dc506f1390 to mainline-adservices-releaseaml_ads_341720000aml_ads_341615050aml_ads_341517040aml_ads_341413000aml_ads_341316030android14-mainline-adservices-release
Change-Id: Ib2c5fa70acb94a132518f703cb4ad46012a0990d
-rw-r--r-- | Android.bp | 13 | ||||
-rw-r--r-- | android/btfloader.cpp | 94 |
2 files changed, 0 insertions, 107 deletions
@@ -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; -} |