mirror of
https://github.com/torvalds/linux.git
synced 2026-04-19 07:13:56 -04:00
We do not actually test the bpf_override_return helper functionality itself at the moment, only the bpf program being able to attach it. Adding test that override prctl syscall return value on top of kprobe and kprobe.multi. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Acked-by: Song Liu <song@kernel.org> Link: https://lore.kernel.org/bpf/20260112121157.854473-2-jolsa@kernel.org
60 lines
1.7 KiB
C
60 lines
1.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __TRACE_HELPER_H
|
|
#define __TRACE_HELPER_H
|
|
|
|
#include <bpf/libbpf.h>
|
|
|
|
#ifdef __x86_64__
|
|
#define SYS_PREFIX "__x64_"
|
|
#elif defined(__s390x__)
|
|
#define SYS_PREFIX "__s390x_"
|
|
#elif defined(__aarch64__)
|
|
#define SYS_PREFIX "__arm64_"
|
|
#elif defined(__riscv)
|
|
#define SYS_PREFIX "__riscv_"
|
|
#else
|
|
#define SYS_PREFIX ""
|
|
#endif
|
|
|
|
#define __ALIGN_MASK(x, mask) (((x)+(mask))&~(mask))
|
|
#define ALIGN(x, a) __ALIGN_MASK(x, (typeof(x))(a)-1)
|
|
|
|
struct ksym {
|
|
long addr;
|
|
char *name;
|
|
};
|
|
struct ksyms;
|
|
|
|
typedef int (*ksym_cmp_t)(const void *p1, const void *p2);
|
|
typedef int (*ksym_search_cmp_t)(const void *p1, const struct ksym *p2);
|
|
|
|
int load_kallsyms(void);
|
|
struct ksym *ksym_search(long key);
|
|
long ksym_get_addr(const char *name);
|
|
|
|
struct ksyms *load_kallsyms_local(void);
|
|
struct ksym *ksym_search_local(struct ksyms *ksyms, long key);
|
|
long ksym_get_addr_local(struct ksyms *ksyms, const char *name);
|
|
void free_kallsyms_local(struct ksyms *ksyms);
|
|
|
|
struct ksyms *load_kallsyms_custom_local(ksym_cmp_t cmp_cb);
|
|
struct ksym *search_kallsyms_custom_local(struct ksyms *ksyms, const void *p1,
|
|
ksym_search_cmp_t cmp_cb);
|
|
|
|
/* open kallsyms and find addresses on the fly, faster than load + search. */
|
|
int kallsyms_find(const char *sym, unsigned long long *addr);
|
|
|
|
void read_trace_pipe(void);
|
|
int read_trace_pipe_iter(void (*cb)(const char *str, void *data),
|
|
void *data, int iter);
|
|
|
|
ssize_t get_uprobe_offset(const void *addr);
|
|
ssize_t get_rel_offset(uintptr_t addr);
|
|
|
|
int read_build_id(const char *path, char *build_id, size_t size);
|
|
|
|
int bpf_get_ksyms(char ***symsp, size_t *cntp, bool kernel);
|
|
int bpf_get_addrs(unsigned long **addrsp, size_t *cntp, bool kernel);
|
|
|
|
#endif
|