]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
libbpf: Add st_type argument to elf_resolve_syms_offsets function
authorJiri Olsa <jolsa@kernel.org>
Sat, 25 Nov 2023 19:31:25 +0000 (20:31 +0100)
committerAndrii Nakryiko <andrii@kernel.org>
Wed, 29 Nov 2023 05:50:09 +0000 (21:50 -0800)
We need to get offsets for static variables in following changes,
so making elf_resolve_syms_offsets to take st_type value as argument
and passing it to elf_sym_iter_new.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Song Liu <song@kernel.org>
Link: https://lore.kernel.org/bpf/20231125193130.834322-2-jolsa@kernel.org
tools/lib/bpf/elf.c
tools/lib/bpf/libbpf.c
tools/lib/bpf/libbpf_internal.h
tools/testing/selftests/bpf/prog_tests/uprobe_multi_test.c

index 2a62bf411bb3e80f7dea9740d14a0a188ec6e73d..b02faec748a51bc067905160c601fedc2f33f76e 100644 (file)
@@ -407,7 +407,8 @@ static int symbol_cmp(const void *a, const void *b)
  * size, that needs to be released by the caller.
  */
 int elf_resolve_syms_offsets(const char *binary_path, int cnt,
-                            const char **syms, unsigned long **poffsets)
+                            const char **syms, unsigned long **poffsets,
+                            int st_type)
 {
        int sh_types[2] = { SHT_DYNSYM, SHT_SYMTAB };
        int err = 0, i, cnt_done = 0;
@@ -438,7 +439,7 @@ int elf_resolve_syms_offsets(const char *binary_path, int cnt,
                struct elf_sym_iter iter;
                struct elf_sym *sym;
 
-               err = elf_sym_iter_new(&iter, elf_fd.elf, binary_path, sh_types[i], STT_FUNC);
+               err = elf_sym_iter_new(&iter, elf_fd.elf, binary_path, sh_types[i], st_type);
                if (err == -ENOENT)
                        continue;
                if (err)
index e067be95da3c01d55fea6cf1d41f79cccb8b21a2..ea9b8158c20d690aa925914639b807a61e946d3f 100644 (file)
@@ -11447,7 +11447,7 @@ bpf_program__attach_uprobe_multi(const struct bpf_program *prog,
                        return libbpf_err_ptr(err);
                offsets = resolved_offsets;
        } else if (syms) {
-               err = elf_resolve_syms_offsets(path, cnt, syms, &resolved_offsets);
+               err = elf_resolve_syms_offsets(path, cnt, syms, &resolved_offsets, STT_FUNC);
                if (err < 0)
                        return libbpf_err_ptr(err);
                offsets = resolved_offsets;
index f0f08635adb0d3827f394579e37135ec1b9ffa5c..b5d334754e5dc8c3406984f7b0124d4b7e364bcb 100644 (file)
@@ -594,7 +594,8 @@ int elf_open(const char *binary_path, struct elf_fd *elf_fd);
 void elf_close(struct elf_fd *elf_fd);
 
 int elf_resolve_syms_offsets(const char *binary_path, int cnt,
-                            const char **syms, unsigned long **poffsets);
+                            const char **syms, unsigned long **poffsets,
+                            int st_type);
 int elf_resolve_pattern_offsets(const char *binary_path, const char *pattern,
                                 unsigned long **poffsets, size_t *pcnt);
 
index cd051d3901a99d1ac026f692d78b0b6661cb234e..ece260cf2c0b661015cbbdb1d6df597d403ab09f 100644 (file)
@@ -249,7 +249,7 @@ static void __test_link_api(struct child *child)
        int link_extra_fd = -1;
        int err;
 
-       err = elf_resolve_syms_offsets(path, 3, syms, (unsigned long **) &offsets);
+       err = elf_resolve_syms_offsets(path, 3, syms, (unsigned long **) &offsets, STT_FUNC);
        if (!ASSERT_OK(err, "elf_resolve_syms_offsets"))
                return;