Commit 6e710f43 authored by Mao Minkai's avatar Mao Minkai Committed by guzitao
Browse files

libbpf: add sw64 support

Sunway inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/IB73UR



--------------------------------

Add __NR_bpf, bpf_target_sw64, PT_REGS_xxx and libbpf_smp barriers for
sw64.

Signed-off-by: default avatarMao Minkai <maominkai@wxiat.com>
Reviewed-by: default avatarHe Sheng <hesheng@wxiat.com>
Signed-off-by: default avatarGu Zitao <guzitao@wxiat.com>
parent 66f8ca23
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -59,6 +59,8 @@
#  define __NR_bpf 6319
# elif defined(__mips__) && defined(_ABI64)
#  define __NR_bpf 5315
# elif defined(__sw_64__)
#  define __NR_bpf 170
# else
#  error __NR_bpf not defined. libbpf does not support your arch.
# endif
+34 −0
Original line number Diff line number Diff line
@@ -35,6 +35,9 @@
#elif defined(__TARGET_ARCH_loongarch)
	#define bpf_target_loongarch
	#define bpf_target_defined
#elif defined(__TARGET_ARCH_sw_64)
	#define bpf_target_sw64
	#define bpf_target_defined
#else

/* Fall back to what the compiler says */
@@ -68,6 +71,9 @@
#elif defined(__loongarch__)
	#define bpf_target_loongarch
	#define bpf_target_defined
#elif defined(__sw_64__)
	#define bpf_target_sw64
	#define bpf_target_defined
#endif /* no compiler target */

#endif
@@ -441,6 +447,34 @@ struct pt_regs___arm64 {
#define __PT_SP_REG regs[3]
#define __PT_IP_REG csr_era

#elif defined(bpf_target_sw64)

/* sw64 provides struct user_pt_regs instead of struct pt_regs to userspace */
struct pt_regs;
#define PT_REGS_SW64 const volatile struct user_pt_regs
#define PT_REGS_PARM1(x) (((PT_REGS_SW64 *)(x))->regs[16])
#define PT_REGS_PARM2(x) (((PT_REGS_SW64 *)(x))->regs[17])
#define PT_REGS_PARM3(x) (((PT_REGS_SW64 *)(x))->regs[18])
#define PT_REGS_PARM4(x) (((PT_REGS_SW64 *)(x))->regs[19])
#define PT_REGS_PARM5(x) (((PT_REGS_SW64 *)(x))->regs[20])
#define PT_REGS_RET(x) (((PT_REGS_SW64 *)(x))->regs[26])
/* Works only with CONFIG_FRAME_POINTER */
#define PT_REGS_FP(x) (((PT_REGS_SW64 *)(x))->regs[15])
#define PT_REGS_RC(x) (((PT_REGS_SW64 *)(x))->regs[0])
#define PT_REGS_SP(x) (((PT_REGS_SW64 *)(x))->regs[30])
#define PT_REGS_IP(x) (((PT_REGS_SW64 *)(x))->pc)

#define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[16])
#define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[17])
#define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[18])
#define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[19])
#define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[20])
#define PT_REGS_RET_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[26])
#define PT_REGS_FP_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[15])
#define PT_REGS_RC_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[0])
#define PT_REGS_SP_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[30])
#define PT_REGS_IP_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), pc)

#endif

#if defined(bpf_target_defined)