mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-10 00:26:34 +00:00
Merge branch 'ebpf-samples-cross-compile'
Joel Fernandes says: ==================== Add cross-compilation support to eBPF samples These patches fix issues seen when cross-compiling eBPF samples on arm64. Compared to [1], I dropped the controversial inline-asm patch and exploring other options to fix it. However these patches are a step in the right direction and I look forward to getting them into -next and the merge window. Changes since v3: - just a repost with acks [1] https://lkml.org/lkml/2017/8/7/417 ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
a99855d159
5 changed files with 67 additions and 10 deletions
|
@ -177,6 +177,11 @@ HOSTLOADLIBES_syscall_tp += -lelf
|
|||
LLC ?= llc
|
||||
CLANG ?= clang
|
||||
|
||||
# Detect that we're cross compiling and use the cross compiler
|
||||
ifdef CROSS_COMPILE
|
||||
HOSTCC = $(CROSS_COMPILE)gcc
|
||||
endif
|
||||
|
||||
# Trick to allow make to be run from this directory
|
||||
all:
|
||||
$(MAKE) -C ../../ $(CURDIR)/
|
||||
|
@ -225,7 +230,7 @@ $(obj)/%.o: $(src)/%.c
|
|||
$(CLANG) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(EXTRA_CFLAGS) -I$(obj) \
|
||||
-I$(srctree)/tools/testing/selftests/bpf/ \
|
||||
-D__KERNEL__ -D__ASM_SYSREG_H -Wno-unused-value -Wno-pointer-sign \
|
||||
-Wno-compare-distinct-pointer-types \
|
||||
-D__TARGET_ARCH_$(ARCH) -Wno-compare-distinct-pointer-types \
|
||||
-Wno-gnu-variable-sized-type-not-at-end \
|
||||
-Wno-address-of-packed-member -Wno-tautological-compare \
|
||||
-Wno-unknown-warning-option \
|
||||
|
|
|
@ -64,3 +64,13 @@ It is also possible to point make to the newly compiled 'llc' or
|
|||
'clang' command via redefining LLC or CLANG on the make command line::
|
||||
|
||||
make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang
|
||||
|
||||
Cross compiling samples
|
||||
-----------------------
|
||||
In order to cross-compile, say for arm64 targets, export CROSS_COMPILE and ARCH
|
||||
environment variables before calling make. This will direct make to build
|
||||
samples for the cross target.
|
||||
|
||||
export ARCH=arm64
|
||||
export CROSS_COMPILE="aarch64-linux-gnu-"
|
||||
make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang
|
||||
|
|
|
@ -266,7 +266,7 @@ int stress_hash_map_lookup(struct pt_regs *ctx)
|
|||
return 0;
|
||||
}
|
||||
|
||||
SEC("kprobe/sys_getpgrp")
|
||||
SEC("kprobe/sys_getppid")
|
||||
int stress_array_map_lookup(struct pt_regs *ctx)
|
||||
{
|
||||
u32 key = 1, i;
|
||||
|
|
|
@ -282,7 +282,7 @@ static void test_array_lookup(int cpu)
|
|||
|
||||
start_time = time_get_ns();
|
||||
for (i = 0; i < max_cnt; i++)
|
||||
syscall(__NR_getpgrp, 0);
|
||||
syscall(__NR_getppid, 0);
|
||||
printf("%d:array_lookup %lld lookups per sec\n",
|
||||
cpu, max_cnt * 1000000000ll * 64 / (time_get_ns() - start_time));
|
||||
}
|
||||
|
|
|
@ -109,7 +109,47 @@ static int (*bpf_skb_under_cgroup)(void *ctx, void *map, int index) =
|
|||
static int (*bpf_skb_change_head)(void *, int len, int flags) =
|
||||
(void *) BPF_FUNC_skb_change_head;
|
||||
|
||||
/* Scan the ARCH passed in from ARCH env variable (see Makefile) */
|
||||
#if defined(__TARGET_ARCH_x86)
|
||||
#define bpf_target_x86
|
||||
#define bpf_target_defined
|
||||
#elif defined(__TARGET_ARCH_s930x)
|
||||
#define bpf_target_s930x
|
||||
#define bpf_target_defined
|
||||
#elif defined(__TARGET_ARCH_arm64)
|
||||
#define bpf_target_arm64
|
||||
#define bpf_target_defined
|
||||
#elif defined(__TARGET_ARCH_mips)
|
||||
#define bpf_target_mips
|
||||
#define bpf_target_defined
|
||||
#elif defined(__TARGET_ARCH_powerpc)
|
||||
#define bpf_target_powerpc
|
||||
#define bpf_target_defined
|
||||
#elif defined(__TARGET_ARCH_sparc)
|
||||
#define bpf_target_sparc
|
||||
#define bpf_target_defined
|
||||
#else
|
||||
#undef bpf_target_defined
|
||||
#endif
|
||||
|
||||
/* Fall back to what the compiler says */
|
||||
#ifndef bpf_target_defined
|
||||
#if defined(__x86_64__)
|
||||
#define bpf_target_x86
|
||||
#elif defined(__s390x__)
|
||||
#define bpf_target_s930x
|
||||
#elif defined(__aarch64__)
|
||||
#define bpf_target_arm64
|
||||
#elif defined(__mips__)
|
||||
#define bpf_target_mips
|
||||
#elif defined(__powerpc__)
|
||||
#define bpf_target_powerpc
|
||||
#elif defined(__sparc__)
|
||||
#define bpf_target_sparc
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(bpf_target_x86)
|
||||
|
||||
#define PT_REGS_PARM1(x) ((x)->di)
|
||||
#define PT_REGS_PARM2(x) ((x)->si)
|
||||
|
@ -122,7 +162,7 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
|
|||
#define PT_REGS_SP(x) ((x)->sp)
|
||||
#define PT_REGS_IP(x) ((x)->ip)
|
||||
|
||||
#elif defined(__s390x__)
|
||||
#elif defined(bpf_target_s390x)
|
||||
|
||||
#define PT_REGS_PARM1(x) ((x)->gprs[2])
|
||||
#define PT_REGS_PARM2(x) ((x)->gprs[3])
|
||||
|
@ -135,7 +175,7 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
|
|||
#define PT_REGS_SP(x) ((x)->gprs[15])
|
||||
#define PT_REGS_IP(x) ((x)->psw.addr)
|
||||
|
||||
#elif defined(__aarch64__)
|
||||
#elif defined(bpf_target_arm64)
|
||||
|
||||
#define PT_REGS_PARM1(x) ((x)->regs[0])
|
||||
#define PT_REGS_PARM2(x) ((x)->regs[1])
|
||||
|
@ -148,7 +188,7 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
|
|||
#define PT_REGS_SP(x) ((x)->sp)
|
||||
#define PT_REGS_IP(x) ((x)->pc)
|
||||
|
||||
#elif defined(__mips__)
|
||||
#elif defined(bpf_target_mips)
|
||||
|
||||
#define PT_REGS_PARM1(x) ((x)->regs[4])
|
||||
#define PT_REGS_PARM2(x) ((x)->regs[5])
|
||||
|
@ -161,7 +201,7 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
|
|||
#define PT_REGS_SP(x) ((x)->regs[29])
|
||||
#define PT_REGS_IP(x) ((x)->cp0_epc)
|
||||
|
||||
#elif defined(__powerpc__)
|
||||
#elif defined(bpf_target_powerpc)
|
||||
|
||||
#define PT_REGS_PARM1(x) ((x)->gpr[3])
|
||||
#define PT_REGS_PARM2(x) ((x)->gpr[4])
|
||||
|
@ -172,7 +212,7 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
|
|||
#define PT_REGS_SP(x) ((x)->sp)
|
||||
#define PT_REGS_IP(x) ((x)->nip)
|
||||
|
||||
#elif defined(__sparc__)
|
||||
#elif defined(bpf_target_sparc)
|
||||
|
||||
#define PT_REGS_PARM1(x) ((x)->u_regs[UREG_I0])
|
||||
#define PT_REGS_PARM2(x) ((x)->u_regs[UREG_I1])
|
||||
|
@ -182,6 +222,8 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
|
|||
#define PT_REGS_RET(x) ((x)->u_regs[UREG_I7])
|
||||
#define PT_REGS_RC(x) ((x)->u_regs[UREG_I0])
|
||||
#define PT_REGS_SP(x) ((x)->u_regs[UREG_FP])
|
||||
|
||||
/* Should this also be a bpf_target check for the sparc case? */
|
||||
#if defined(__arch64__)
|
||||
#define PT_REGS_IP(x) ((x)->tpc)
|
||||
#else
|
||||
|
@ -190,10 +232,10 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
|
|||
|
||||
#endif
|
||||
|
||||
#ifdef __powerpc__
|
||||
#ifdef bpf_target_powerpc
|
||||
#define BPF_KPROBE_READ_RET_IP(ip, ctx) ({ (ip) = (ctx)->link; })
|
||||
#define BPF_KRETPROBE_READ_RET_IP BPF_KPROBE_READ_RET_IP
|
||||
#elif defined(__sparc__)
|
||||
#elif bpf_target_sparc
|
||||
#define BPF_KPROBE_READ_RET_IP(ip, ctx) ({ (ip) = PT_REGS_RET(ctx); })
|
||||
#define BPF_KRETPROBE_READ_RET_IP BPF_KPROBE_READ_RET_IP
|
||||
#else
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue