All of lore.kernel.org
 help / color / mirror / Atom feed
* [jolsa-perf:bpf/tracing_multi_9 3/12] arch/arm64/net/bpf_jit_comp.c:2311:9: error: no member named 'cookie' in 'struct bpf_tramp_link'
@ 2026-01-31  6:31 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-01-31  6:31 UTC (permalink / raw)
  To: Jiri Olsa; +Cc: oe-kbuild-all

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git bpf/tracing_multi_9
head:   4a1d38e3df06743886a06b547187aec8023ef27d
commit: 79e86aac9eaf3b5bdb4db339fb6082022ef69eb9 [3/12] bpf: Add struct bpf_tramp_node object
config: arm64-allnoconfig-bpf (https://download.01.org/0day-ci/archive/20260131/202601310745.maOTHc2a-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project f43d6834093b19baf79beda8c0337ab020ac5f17)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260131/202601310745.maOTHc2a-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202601310745.maOTHc2a-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

>> arch/arm64/net/bpf_jit_comp.c:2311:9: error: no member named 'cookie' in 'struct bpf_tramp_link'
    2311 |         if (l->cookie == 0) {
         |             ~  ^
   arch/arm64/net/bpf_jit_comp.c:2315:34: error: no member named 'cookie' in 'struct bpf_tramp_link'
    2315 |                 emit_a64_mov_i64(A64_R(10), l->cookie, ctx);
         |                                             ~  ^
>> arch/arm64/net/bpf_jit_comp.c:2365:60: warning: declaration of 'struct bpf_tramp_links' will not be visible outside of this function [-Wvisibility]
    2365 | static void invoke_bpf_mod_ret(struct jit_ctx *ctx, struct bpf_tramp_links *tl,
         |                                                            ^
>> arch/arm64/net/bpf_jit_comp.c:2375:20: error: incomplete definition of type 'struct bpf_tramp_links'
    2375 |         for (i = 0; i < tl->nr_links; i++) {
         |                         ~~^
   arch/arm64/net/bpf_jit_comp.c:2365:60: note: forward declaration of 'struct bpf_tramp_links'
    2365 | static void invoke_bpf_mod_ret(struct jit_ctx *ctx, struct bpf_tramp_links *tl,
         |                                                            ^
   arch/arm64/net/bpf_jit_comp.c:2376:26: error: incomplete definition of type 'struct bpf_tramp_links'
    2376 |                 invoke_bpf_prog(ctx, tl->links[i], bargs_off, retval_off,
         |                                      ~~^
   arch/arm64/net/bpf_jit_comp.c:2365:60: note: forward declaration of 'struct bpf_tramp_links'
    2365 | static void invoke_bpf_mod_ret(struct jit_ctx *ctx, struct bpf_tramp_links *tl,
         |                                                            ^
   arch/arm64/net/bpf_jit_comp.c:2507:46: warning: declaration of 'struct bpf_tramp_links' will not be visible outside of this function [-Wvisibility]
    2507 | static bool is_struct_ops_tramp(const struct bpf_tramp_links *fentry_links)
         |                                              ^
>> arch/arm64/net/bpf_jit_comp.c:2509:21: error: incomplete definition of type 'const struct bpf_tramp_links'
    2509 |         return fentry_links->nr_links == 1 &&
         |                ~~~~~~~~~~~~^
   arch/arm64/net/bpf_jit_comp.c:2507:46: note: forward declaration of 'struct bpf_tramp_links'
    2507 | static bool is_struct_ops_tramp(const struct bpf_tramp_links *fentry_links)
         |                                              ^
   arch/arm64/net/bpf_jit_comp.c:2510:15: error: incomplete definition of type 'const struct bpf_tramp_links'
    2510 |                 fentry_links->links[0]->link.type == BPF_LINK_TYPE_STRUCT_OPS;
         |                 ~~~~~~~~~~~~^
   arch/arm64/net/bpf_jit_comp.c:2507:46: note: forward declaration of 'struct bpf_tramp_links'
    2507 | static bool is_struct_ops_tramp(const struct bpf_tramp_links *fentry_links)
         |                                              ^
   arch/arm64/net/bpf_jit_comp.c:2525:17: warning: declaration of 'struct bpf_tramp_links' will not be visible outside of this function [-Wvisibility]
    2525 |                               struct bpf_tramp_links *tlinks, void *func_addr,
         |                                      ^
>> arch/arm64/net/bpf_jit_comp.c:2541:42: error: subscript of pointer to incomplete type 'struct bpf_tramp_links'
    2541 |         struct bpf_tramp_links *fentry = &tlinks[BPF_TRAMP_FENTRY];
         |                                           ~~~~~~^
   arch/arm64/net/bpf_jit_comp.c:2525:17: note: forward declaration of 'struct bpf_tramp_links'
    2525 |                               struct bpf_tramp_links *tlinks, void *func_addr,
         |                                      ^
   arch/arm64/net/bpf_jit_comp.c:2542:41: error: subscript of pointer to incomplete type 'struct bpf_tramp_links'
    2542 |         struct bpf_tramp_links *fexit = &tlinks[BPF_TRAMP_FEXIT];
         |                                          ~~~~~~^
   arch/arm64/net/bpf_jit_comp.c:2525:17: note: forward declaration of 'struct bpf_tramp_links'
    2525 |                               struct bpf_tramp_links *tlinks, void *func_addr,
         |                                      ^
   arch/arm64/net/bpf_jit_comp.c:2543:44: error: subscript of pointer to incomplete type 'struct bpf_tramp_links'
    2543 |         struct bpf_tramp_links *fmod_ret = &tlinks[BPF_TRAMP_MODIFY_RETURN];
         |                                             ~~~~~~^
   arch/arm64/net/bpf_jit_comp.c:2525:17: note: forward declaration of 'struct bpf_tramp_links'
    2525 |                               struct bpf_tramp_links *tlinks, void *func_addr,
         |                                      ^
>> arch/arm64/net/bpf_jit_comp.c:2546:43: error: incompatible pointer types passing 'struct bpf_tramp_links *' to parameter of type 'const struct bpf_tramp_links *' [-Wincompatible-pointer-types]
    2546 |         bool is_struct_ops = is_struct_ops_tramp(fentry);
         |                                                  ^~~~~~
   arch/arm64/net/bpf_jit_comp.c:2507:63: note: passing argument to parameter 'fentry_links' here
    2507 | static bool is_struct_ops_tramp(const struct bpf_tramp_links *fentry_links)
         |                                                               ^
   arch/arm64/net/bpf_jit_comp.c:2669:24: error: incomplete definition of type 'struct bpf_tramp_links'
    2669 |         for (i = 0; i < fentry->nr_links; i++)
         |                         ~~~~~~^
   arch/arm64/net/bpf_jit_comp.c:2525:17: note: forward declaration of 'struct bpf_tramp_links'
    2525 |                               struct bpf_tramp_links *tlinks, void *func_addr,
         |                                      ^
   arch/arm64/net/bpf_jit_comp.c:2670:30: error: incomplete definition of type 'struct bpf_tramp_links'
    2670 |                 invoke_bpf_prog(ctx, fentry->links[i], bargs_off,
         |                                      ~~~~~~^
   arch/arm64/net/bpf_jit_comp.c:2525:17: note: forward declaration of 'struct bpf_tramp_links'
    2525 |                               struct bpf_tramp_links *tlinks, void *func_addr,
         |                                      ^
   arch/arm64/net/bpf_jit_comp.c:2674:14: error: incomplete definition of type 'struct bpf_tramp_links'
    2674 |         if (fmod_ret->nr_links) {
         |             ~~~~~~~~^
   arch/arm64/net/bpf_jit_comp.c:2525:17: note: forward declaration of 'struct bpf_tramp_links'
    2525 |                               struct bpf_tramp_links *tlinks, void *func_addr,
         |                                      ^
   arch/arm64/net/bpf_jit_comp.c:2675:30: error: incomplete definition of type 'struct bpf_tramp_links'
    2675 |                 branches = kcalloc(fmod_ret->nr_links, sizeof(__le32 *),
         |                                    ~~~~~~~~^
   arch/arm64/net/bpf_jit_comp.c:2525:17: note: forward declaration of 'struct bpf_tramp_links'
    2525 |                               struct bpf_tramp_links *tlinks, void *func_addr,
         |                                      ^
   arch/arm64/net/bpf_jit_comp.c:2675:30: error: incomplete definition of type 'struct bpf_tramp_links'
    2675 |                 branches = kcalloc(fmod_ret->nr_links, sizeof(__le32 *),
         |                                    ~~~~~~~~^
   arch/arm64/net/bpf_jit_comp.c:2525:17: note: forward declaration of 'struct bpf_tramp_links'
    2525 |                               struct bpf_tramp_links *tlinks, void *func_addr,
         |                                      ^
   arch/arm64/net/bpf_jit_comp.c:2675:30: error: incomplete definition of type 'struct bpf_tramp_links'
    2675 |                 branches = kcalloc(fmod_ret->nr_links, sizeof(__le32 *),
         |                                    ~~~~~~~~^
   arch/arm64/net/bpf_jit_comp.c:2525:17: note: forward declaration of 'struct bpf_tramp_links'
    2525 |                               struct bpf_tramp_links *tlinks, void *func_addr,
         |                                      ^
>> arch/arm64/net/bpf_jit_comp.c:2680:27: error: incompatible pointer types passing 'struct bpf_tramp_links *' to parameter of type 'struct bpf_tramp_links *' [-Wincompatible-pointer-types]
    2680 |                 invoke_bpf_mod_ret(ctx, fmod_ret, bargs_off, retval_off,
         |                                         ^~~~~~~~
   arch/arm64/net/bpf_jit_comp.c:2365:77: note: passing argument to parameter 'tl' here
    2365 | static void invoke_bpf_mod_ret(struct jit_ctx *ctx, struct bpf_tramp_links *tl,
         |                                                                             ^
   arch/arm64/net/bpf_jit_comp.c:2699:26: error: incomplete definition of type 'struct bpf_tramp_links'
    2699 |         for (i = 0; i < fmod_ret->nr_links && ctx->image != NULL; i++) {
         |                         ~~~~~~~~^
   arch/arm64/net/bpf_jit_comp.c:2525:17: note: forward declaration of 'struct bpf_tramp_links'
    2525 |                               struct bpf_tramp_links *tlinks, void *func_addr,
         |                                      ^
   arch/arm64/net/bpf_jit_comp.c:2704:23: error: incomplete definition of type 'struct bpf_tramp_links'
    2704 |         for (i = 0; i < fexit->nr_links; i++)
         |                         ~~~~~^
   arch/arm64/net/bpf_jit_comp.c:2525:17: note: forward declaration of 'struct bpf_tramp_links'
    2525 |                               struct bpf_tramp_links *tlinks, void *func_addr,
         |                                      ^
   fatal error: too many errors emitted, stopping now [-ferror-limit=]
   3 warnings and 20 errors generated.


vim +2311 arch/arm64/net/bpf_jit_comp.c

b2ad54e1533e91 Xu Kuohai        2022-07-11  2297  
efc9909fdce00a Xu Kuohai        2022-07-11  2298  static void invoke_bpf_prog(struct jit_ctx *ctx, struct bpf_tramp_link *l,
9014cf56f13d8c Xu Kuohai        2025-05-27  2299  			    int bargs_off, int retval_off, int run_ctx_off,
efc9909fdce00a Xu Kuohai        2022-07-11  2300  			    bool save_ret)
efc9909fdce00a Xu Kuohai        2022-07-11  2301  {
aada476655461a Xu Kuohai        2022-08-08  2302  	__le32 *branch;
efc9909fdce00a Xu Kuohai        2022-07-11  2303  	u64 enter_prog;
efc9909fdce00a Xu Kuohai        2022-07-11  2304  	u64 exit_prog;
efc9909fdce00a Xu Kuohai        2022-07-11  2305  	struct bpf_prog *p = l->link.prog;
efc9909fdce00a Xu Kuohai        2022-07-11  2306  	int cookie_off = offsetof(struct bpf_tramp_run_ctx, bpf_cookie);
efc9909fdce00a Xu Kuohai        2022-07-11  2307  
271de525e1d7f5 Martin KaFai Lau 2022-10-25  2308  	enter_prog = (u64)bpf_trampoline_enter(p);
271de525e1d7f5 Martin KaFai Lau 2022-10-25  2309  	exit_prog = (u64)bpf_trampoline_exit(p);
efc9909fdce00a Xu Kuohai        2022-07-11  2310  
efc9909fdce00a Xu Kuohai        2022-07-11 @2311  	if (l->cookie == 0) {
efc9909fdce00a Xu Kuohai        2022-07-11  2312  		/* if cookie is zero, one instruction is enough to store it */
efc9909fdce00a Xu Kuohai        2022-07-11  2313  		emit(A64_STR64I(A64_ZR, A64_SP, run_ctx_off + cookie_off), ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2314  	} else {
efc9909fdce00a Xu Kuohai        2022-07-11  2315  		emit_a64_mov_i64(A64_R(10), l->cookie, ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2316  		emit(A64_STR64I(A64_R(10), A64_SP, run_ctx_off + cookie_off),
efc9909fdce00a Xu Kuohai        2022-07-11  2317  		     ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2318  	}
efc9909fdce00a Xu Kuohai        2022-07-11  2319  
efc9909fdce00a Xu Kuohai        2022-07-11  2320  	/* save p to callee saved register x19 to avoid loading p with mov_i64
efc9909fdce00a Xu Kuohai        2022-07-11  2321  	 * each time.
efc9909fdce00a Xu Kuohai        2022-07-11  2322  	 */
efc9909fdce00a Xu Kuohai        2022-07-11  2323  	emit_addr_mov_i64(A64_R(19), (const u64)p, ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2324  
efc9909fdce00a Xu Kuohai        2022-07-11  2325  	/* arg1: prog */
efc9909fdce00a Xu Kuohai        2022-07-11  2326  	emit(A64_MOV(1, A64_R(0), A64_R(19)), ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2327  	/* arg2: &run_ctx */
efc9909fdce00a Xu Kuohai        2022-07-11  2328  	emit(A64_ADD_I(1, A64_R(1), A64_SP, run_ctx_off), ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2329  
efc9909fdce00a Xu Kuohai        2022-07-11  2330  	emit_call(enter_prog, ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2331  
dc7d7447b56bcc Xu Kuohai        2024-04-16  2332  	/* save return value to callee saved register x20 */
dc7d7447b56bcc Xu Kuohai        2024-04-16  2333  	emit(A64_MOV(1, A64_R(20), A64_R(0)), ctx);
dc7d7447b56bcc Xu Kuohai        2024-04-16  2334  
efc9909fdce00a Xu Kuohai        2022-07-11  2335  	/* if (__bpf_prog_enter(prog) == 0)
efc9909fdce00a Xu Kuohai        2022-07-11  2336  	 *         goto skip_exec_of_prog;
efc9909fdce00a Xu Kuohai        2022-07-11  2337  	 */
efc9909fdce00a Xu Kuohai        2022-07-11  2338  	branch = ctx->image + ctx->idx;
efc9909fdce00a Xu Kuohai        2022-07-11  2339  	emit(A64_NOP, ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2340  
9014cf56f13d8c Xu Kuohai        2025-05-27  2341  	emit(A64_ADD_I(1, A64_R(0), A64_SP, bargs_off), ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2342  	if (!p->jited)
efc9909fdce00a Xu Kuohai        2022-07-11  2343  		emit_addr_mov_i64(A64_R(1), (const u64)p->insnsi, ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2344  
efc9909fdce00a Xu Kuohai        2022-07-11  2345  	emit_call((const u64)p->bpf_func, ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2346  
efc9909fdce00a Xu Kuohai        2022-07-11  2347  	if (save_ret)
efc9909fdce00a Xu Kuohai        2022-07-11  2348  		emit(A64_STR64I(A64_R(0), A64_SP, retval_off), ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2349  
efc9909fdce00a Xu Kuohai        2022-07-11  2350  	if (ctx->image) {
efc9909fdce00a Xu Kuohai        2022-07-11  2351  		int offset = &ctx->image[ctx->idx] - branch;
aada476655461a Xu Kuohai        2022-08-08  2352  		*branch = cpu_to_le32(A64_CBZ(1, A64_R(0), offset));
efc9909fdce00a Xu Kuohai        2022-07-11  2353  	}
efc9909fdce00a Xu Kuohai        2022-07-11  2354  
efc9909fdce00a Xu Kuohai        2022-07-11  2355  	/* arg1: prog */
efc9909fdce00a Xu Kuohai        2022-07-11  2356  	emit(A64_MOV(1, A64_R(0), A64_R(19)), ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2357  	/* arg2: start time */
efc9909fdce00a Xu Kuohai        2022-07-11  2358  	emit(A64_MOV(1, A64_R(1), A64_R(20)), ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2359  	/* arg3: &run_ctx */
efc9909fdce00a Xu Kuohai        2022-07-11  2360  	emit(A64_ADD_I(1, A64_R(2), A64_SP, run_ctx_off), ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2361  
efc9909fdce00a Xu Kuohai        2022-07-11  2362  	emit_call(exit_prog, ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2363  }
efc9909fdce00a Xu Kuohai        2022-07-11  2364  
efc9909fdce00a Xu Kuohai        2022-07-11 @2365  static void invoke_bpf_mod_ret(struct jit_ctx *ctx, struct bpf_tramp_links *tl,
9014cf56f13d8c Xu Kuohai        2025-05-27  2366  			       int bargs_off, int retval_off, int run_ctx_off,
aada476655461a Xu Kuohai        2022-08-08  2367  			       __le32 **branches)
efc9909fdce00a Xu Kuohai        2022-07-11  2368  {
efc9909fdce00a Xu Kuohai        2022-07-11  2369  	int i;
efc9909fdce00a Xu Kuohai        2022-07-11  2370  
efc9909fdce00a Xu Kuohai        2022-07-11  2371  	/* The first fmod_ret program will receive a garbage return value.
efc9909fdce00a Xu Kuohai        2022-07-11  2372  	 * Set this to 0 to avoid confusing the program.
efc9909fdce00a Xu Kuohai        2022-07-11  2373  	 */
efc9909fdce00a Xu Kuohai        2022-07-11  2374  	emit(A64_STR64I(A64_ZR, A64_SP, retval_off), ctx);
efc9909fdce00a Xu Kuohai        2022-07-11 @2375  	for (i = 0; i < tl->nr_links; i++) {
9014cf56f13d8c Xu Kuohai        2025-05-27  2376  		invoke_bpf_prog(ctx, tl->links[i], bargs_off, retval_off,
efc9909fdce00a Xu Kuohai        2022-07-11  2377  				run_ctx_off, true);
efc9909fdce00a Xu Kuohai        2022-07-11  2378  		/* if (*(u64 *)(sp + retval_off) !=  0)
efc9909fdce00a Xu Kuohai        2022-07-11  2379  		 *	goto do_fexit;
efc9909fdce00a Xu Kuohai        2022-07-11  2380  		 */
efc9909fdce00a Xu Kuohai        2022-07-11  2381  		emit(A64_LDR64I(A64_R(10), A64_SP, retval_off), ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2382  		/* Save the location of branch, and generate a nop.
efc9909fdce00a Xu Kuohai        2022-07-11  2383  		 * This nop will be replaced with a cbnz later.
efc9909fdce00a Xu Kuohai        2022-07-11  2384  		 */
efc9909fdce00a Xu Kuohai        2022-07-11  2385  		branches[i] = ctx->image + ctx->idx;
efc9909fdce00a Xu Kuohai        2022-07-11  2386  		emit(A64_NOP, ctx);
efc9909fdce00a Xu Kuohai        2022-07-11  2387  	}
efc9909fdce00a Xu Kuohai        2022-07-11  2388  }
efc9909fdce00a Xu Kuohai        2022-07-11  2389  
9014cf56f13d8c Xu Kuohai        2025-05-27  2390  struct arg_aux {
9014cf56f13d8c Xu Kuohai        2025-05-27  2391  	/* how many args are passed through registers, the rest of the args are
9014cf56f13d8c Xu Kuohai        2025-05-27  2392  	 * passed through stack
9014cf56f13d8c Xu Kuohai        2025-05-27  2393  	 */
9014cf56f13d8c Xu Kuohai        2025-05-27  2394  	int args_in_regs;
9014cf56f13d8c Xu Kuohai        2025-05-27  2395  	/* how many registers are used to pass arguments */
9014cf56f13d8c Xu Kuohai        2025-05-27  2396  	int regs_for_args;
9014cf56f13d8c Xu Kuohai        2025-05-27  2397  	/* how much stack is used for additional args passed to bpf program
9014cf56f13d8c Xu Kuohai        2025-05-27  2398  	 * that did not fit in original function registers
9014cf56f13d8c Xu Kuohai        2025-05-27  2399  	 */
9014cf56f13d8c Xu Kuohai        2025-05-27  2400  	int bstack_for_args;
9014cf56f13d8c Xu Kuohai        2025-05-27  2401  	/* home much stack is used for additional args passed to the
9014cf56f13d8c Xu Kuohai        2025-05-27  2402  	 * original function when called from trampoline (this one needs
9014cf56f13d8c Xu Kuohai        2025-05-27  2403  	 * arguments to be properly aligned)
9014cf56f13d8c Xu Kuohai        2025-05-27  2404  	 */
9014cf56f13d8c Xu Kuohai        2025-05-27  2405  	int ostack_for_args;
9014cf56f13d8c Xu Kuohai        2025-05-27  2406  };
9014cf56f13d8c Xu Kuohai        2025-05-27  2407  
9014cf56f13d8c Xu Kuohai        2025-05-27  2408  static int calc_arg_aux(const struct btf_func_model *m,
9014cf56f13d8c Xu Kuohai        2025-05-27  2409  			 struct arg_aux *a)
efc9909fdce00a Xu Kuohai        2022-07-11  2410  {
9014cf56f13d8c Xu Kuohai        2025-05-27  2411  	int stack_slots, nregs, slots, i;
efc9909fdce00a Xu Kuohai        2022-07-11  2412  
9014cf56f13d8c Xu Kuohai        2025-05-27  2413  	/* verifier ensures m->nr_args <= MAX_BPF_FUNC_ARGS */
9014cf56f13d8c Xu Kuohai        2025-05-27  2414  	for (i = 0, nregs = 0; i < m->nr_args; i++) {
9014cf56f13d8c Xu Kuohai        2025-05-27  2415  		slots = (m->arg_size[i] + 7) / 8;
9014cf56f13d8c Xu Kuohai        2025-05-27  2416  		if (nregs + slots <= 8) /* passed through register ? */
9014cf56f13d8c Xu Kuohai        2025-05-27  2417  			nregs += slots;
9014cf56f13d8c Xu Kuohai        2025-05-27  2418  		else
9014cf56f13d8c Xu Kuohai        2025-05-27  2419  			break;
efc9909fdce00a Xu Kuohai        2022-07-11  2420  	}
9014cf56f13d8c Xu Kuohai        2025-05-27  2421  
9014cf56f13d8c Xu Kuohai        2025-05-27  2422  	a->args_in_regs = i;
9014cf56f13d8c Xu Kuohai        2025-05-27  2423  	a->regs_for_args = nregs;
9014cf56f13d8c Xu Kuohai        2025-05-27  2424  	a->ostack_for_args = 0;
9014cf56f13d8c Xu Kuohai        2025-05-27  2425  	a->bstack_for_args = 0;
9014cf56f13d8c Xu Kuohai        2025-05-27  2426  
9014cf56f13d8c Xu Kuohai        2025-05-27  2427  	/* the rest arguments are passed through stack */
9014cf56f13d8c Xu Kuohai        2025-05-27  2428  	for (; i < m->nr_args; i++) {
9014cf56f13d8c Xu Kuohai        2025-05-27  2429  		stack_slots = (m->arg_size[i] + 7) / 8;
9014cf56f13d8c Xu Kuohai        2025-05-27  2430  		a->bstack_for_args += stack_slots * 8;
9014cf56f13d8c Xu Kuohai        2025-05-27  2431  		a->ostack_for_args = a->ostack_for_args + stack_slots * 8;
efc9909fdce00a Xu Kuohai        2022-07-11  2432  	}
efc9909fdce00a Xu Kuohai        2022-07-11  2433  
9014cf56f13d8c Xu Kuohai        2025-05-27  2434  	return 0;
9014cf56f13d8c Xu Kuohai        2025-05-27  2435  }
9014cf56f13d8c Xu Kuohai        2025-05-27  2436  
9014cf56f13d8c Xu Kuohai        2025-05-27  2437  static void clear_garbage(struct jit_ctx *ctx, int reg, int effective_bytes)
9014cf56f13d8c Xu Kuohai        2025-05-27  2438  {
9014cf56f13d8c Xu Kuohai        2025-05-27  2439  	if (effective_bytes) {
9014cf56f13d8c Xu Kuohai        2025-05-27  2440  		int garbage_bits = 64 - 8 * effective_bytes;
9014cf56f13d8c Xu Kuohai        2025-05-27  2441  #ifdef CONFIG_CPU_BIG_ENDIAN
9014cf56f13d8c Xu Kuohai        2025-05-27  2442  		/* garbage bits are at the right end */
9014cf56f13d8c Xu Kuohai        2025-05-27  2443  		emit(A64_LSR(1, reg, reg, garbage_bits), ctx);
9014cf56f13d8c Xu Kuohai        2025-05-27  2444  		emit(A64_LSL(1, reg, reg, garbage_bits), ctx);
9014cf56f13d8c Xu Kuohai        2025-05-27  2445  #else
9014cf56f13d8c Xu Kuohai        2025-05-27  2446  		/* garbage bits are at the left end */
9014cf56f13d8c Xu Kuohai        2025-05-27  2447  		emit(A64_LSL(1, reg, reg, garbage_bits), ctx);
9014cf56f13d8c Xu Kuohai        2025-05-27  2448  		emit(A64_LSR(1, reg, reg, garbage_bits), ctx);
9014cf56f13d8c Xu Kuohai        2025-05-27  2449  #endif
efc9909fdce00a Xu Kuohai        2022-07-11  2450  	}
efc9909fdce00a Xu Kuohai        2022-07-11  2451  }
efc9909fdce00a Xu Kuohai        2022-07-11  2452  
9014cf56f13d8c Xu Kuohai        2025-05-27  2453  static void save_args(struct jit_ctx *ctx, int bargs_off, int oargs_off,
9014cf56f13d8c Xu Kuohai        2025-05-27  2454  		      const struct btf_func_model *m,
9014cf56f13d8c Xu Kuohai        2025-05-27  2455  		      const struct arg_aux *a,
9014cf56f13d8c Xu Kuohai        2025-05-27  2456  		      bool for_call_origin)
efc9909fdce00a Xu Kuohai        2022-07-11  2457  {
efc9909fdce00a Xu Kuohai        2022-07-11  2458  	int i;
9014cf56f13d8c Xu Kuohai        2025-05-27  2459  	int reg;
9014cf56f13d8c Xu Kuohai        2025-05-27  2460  	int doff;
9014cf56f13d8c Xu Kuohai        2025-05-27  2461  	int soff;
9014cf56f13d8c Xu Kuohai        2025-05-27  2462  	int slots;
9014cf56f13d8c Xu Kuohai        2025-05-27  2463  	u8 tmp = bpf2a64[TMP_REG_1];
9014cf56f13d8c Xu Kuohai        2025-05-27  2464  
9014cf56f13d8c Xu Kuohai        2025-05-27  2465  	/* store arguments to the stack for the bpf program, or restore
9014cf56f13d8c Xu Kuohai        2025-05-27  2466  	 * arguments from stack for the original function
9014cf56f13d8c Xu Kuohai        2025-05-27  2467  	 */
9014cf56f13d8c Xu Kuohai        2025-05-27  2468  	for (reg = 0; reg < a->regs_for_args; reg++) {
9014cf56f13d8c Xu Kuohai        2025-05-27  2469  		emit(for_call_origin ?
9014cf56f13d8c Xu Kuohai        2025-05-27  2470  		     A64_LDR64I(reg, A64_SP, bargs_off) :
9014cf56f13d8c Xu Kuohai        2025-05-27  2471  		     A64_STR64I(reg, A64_SP, bargs_off),
9014cf56f13d8c Xu Kuohai        2025-05-27  2472  		     ctx);
9014cf56f13d8c Xu Kuohai        2025-05-27  2473  		bargs_off += 8;
9014cf56f13d8c Xu Kuohai        2025-05-27  2474  	}
9014cf56f13d8c Xu Kuohai        2025-05-27  2475  
9014cf56f13d8c Xu Kuohai        2025-05-27  2476  	soff = 32; /* on stack arguments start from FP + 32 */
9014cf56f13d8c Xu Kuohai        2025-05-27  2477  	doff = (for_call_origin ? oargs_off : bargs_off);
9014cf56f13d8c Xu Kuohai        2025-05-27  2478  
9014cf56f13d8c Xu Kuohai        2025-05-27  2479  	/* save on stack arguments */
9014cf56f13d8c Xu Kuohai        2025-05-27  2480  	for (i = a->args_in_regs; i < m->nr_args; i++) {
9014cf56f13d8c Xu Kuohai        2025-05-27  2481  		slots = (m->arg_size[i] + 7) / 8;
9014cf56f13d8c Xu Kuohai        2025-05-27  2482  		/* verifier ensures arg_size <= 16, so slots equals 1 or 2 */
9014cf56f13d8c Xu Kuohai        2025-05-27  2483  		while (slots-- > 0) {
9014cf56f13d8c Xu Kuohai        2025-05-27  2484  			emit(A64_LDR64I(tmp, A64_FP, soff), ctx);
9014cf56f13d8c Xu Kuohai        2025-05-27  2485  			/* if there is unused space in the last slot, clear
9014cf56f13d8c Xu Kuohai        2025-05-27  2486  			 * the garbage contained in the space.
9014cf56f13d8c Xu Kuohai        2025-05-27  2487  			 */
9014cf56f13d8c Xu Kuohai        2025-05-27  2488  			if (slots == 0 && !for_call_origin)
9014cf56f13d8c Xu Kuohai        2025-05-27  2489  				clear_garbage(ctx, tmp, m->arg_size[i] % 8);
9014cf56f13d8c Xu Kuohai        2025-05-27  2490  			emit(A64_STR64I(tmp, A64_SP, doff), ctx);
9014cf56f13d8c Xu Kuohai        2025-05-27  2491  			soff += 8;
9014cf56f13d8c Xu Kuohai        2025-05-27  2492  			doff += 8;
9014cf56f13d8c Xu Kuohai        2025-05-27  2493  		}
9014cf56f13d8c Xu Kuohai        2025-05-27  2494  	}
9014cf56f13d8c Xu Kuohai        2025-05-27  2495  }
efc9909fdce00a Xu Kuohai        2022-07-11  2496  
9014cf56f13d8c Xu Kuohai        2025-05-27  2497  static void restore_args(struct jit_ctx *ctx, int bargs_off, int nregs)
9014cf56f13d8c Xu Kuohai        2025-05-27  2498  {
9014cf56f13d8c Xu Kuohai        2025-05-27  2499  	int reg;
efc9909fdce00a Xu Kuohai        2022-07-11  2500  
9014cf56f13d8c Xu Kuohai        2025-05-27  2501  	for (reg = 0; reg < nregs; reg++) {
9014cf56f13d8c Xu Kuohai        2025-05-27  2502  		emit(A64_LDR64I(reg, A64_SP, bargs_off), ctx);
9014cf56f13d8c Xu Kuohai        2025-05-27  2503  		bargs_off += 8;
efc9909fdce00a Xu Kuohai        2022-07-11  2504  	}
efc9909fdce00a Xu Kuohai        2022-07-11  2505  }
efc9909fdce00a Xu Kuohai        2022-07-11  2506  
87cb58aebdf700 Xu Kuohai        2024-10-25  2507  static bool is_struct_ops_tramp(const struct bpf_tramp_links *fentry_links)
87cb58aebdf700 Xu Kuohai        2024-10-25  2508  {
87cb58aebdf700 Xu Kuohai        2024-10-25 @2509  	return fentry_links->nr_links == 1 &&
87cb58aebdf700 Xu Kuohai        2024-10-25  2510  		fentry_links->links[0]->link.type == BPF_LINK_TYPE_STRUCT_OPS;
87cb58aebdf700 Xu Kuohai        2024-10-25  2511  }
87cb58aebdf700 Xu Kuohai        2024-10-25  2512  

:::::: The code at line 2311 was first introduced by commit
:::::: efc9909fdce00a827a37609628223cd45bf95d0b bpf, arm64: Add bpf trampoline for arm64

:::::: TO: Xu Kuohai <xukuohai@huawei.com>
:::::: CC: Daniel Borkmann <daniel@iogearbox.net>

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-01-31  6:32 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-31  6:31 [jolsa-perf:bpf/tracing_multi_9 3/12] arch/arm64/net/bpf_jit_comp.c:2311:9: error: no member named 'cookie' in 'struct bpf_tramp_link' kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.