[<prev] [next>] [day] [month] [year] [list]
Message-ID: <202508191020.PBBh07cK-lkp@intel.com>
Date: Tue, 19 Aug 2025 09:13:29 +0300
From: Dan Carpenter <dan.carpenter@...aro.org>
To: oe-kbuild@...ts.linux.dev, Chenghao Duan <duanchenghao@...inos.cn>
Cc: lkp@...el.com, oe-kbuild-all@...ts.linux.dev,
linux-kernel@...r.kernel.org, Huacai Chen <chenhuacai@...nel.org>,
George Guo <guodongtai@...inos.cn>
Subject: arch/loongarch/net/bpf_jit.c:1547 __arch_prepare_bpf_trampoline()
error: uninitialized symbol 'retval_off'.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: be48bcf004f9d0c9207ff21d0edb3b42f253829e
commit: f9b6b41f0cf31791541cea9644ddbedb46465801 LoongArch: BPF: Add basic bpf trampoline support
date: 2 weeks ago
config: loongarch-randconfig-r073-20250818 (https://download.01.org/0day-ci/archive/20250819/202508191020.PBBh07cK-lkp@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 15.1.0
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@...el.com>
| Reported-by: Dan Carpenter <dan.carpenter@...aro.org>
| Closes: https://lore.kernel.org/r/202508191020.PBBh07cK-lkp@intel.com/
New smatch warnings:
arch/loongarch/net/bpf_jit.c:1547 __arch_prepare_bpf_trampoline() error: uninitialized symbol 'retval_off'.
vim +/retval_off +1547 arch/loongarch/net/bpf_jit.c
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1419 static int __arch_prepare_bpf_trampoline(struct jit_ctx *ctx, struct bpf_tramp_image *im,
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1420 const struct btf_func_model *m, struct bpf_tramp_links *tlinks,
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1421 void *func_addr, u32 flags)
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1422 {
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1423 int i, ret, save_ret;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1424 int stack_size = 0, nargs = 0;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1425 int retval_off, args_off, nargs_off, ip_off, run_ctx_off, sreg_off;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1426 void *orig_call = func_addr;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1427 struct bpf_tramp_links *fentry = &tlinks[BPF_TRAMP_FENTRY];
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1428 struct bpf_tramp_links *fexit = &tlinks[BPF_TRAMP_FEXIT];
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1429 struct bpf_tramp_links *fmod_ret = &tlinks[BPF_TRAMP_MODIFY_RETURN];
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1430 u32 **branches = NULL;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1431
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1432 if (flags & (BPF_TRAMP_F_ORIG_STACK | BPF_TRAMP_F_SHARE_IPMODIFY))
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1433 return -ENOTSUPP;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1434
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1435 /*
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1436 * FP + 8 [ RA to parent func ] return address to parent
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1437 * function
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1438 * FP + 0 [ FP of parent func ] frame pointer of parent
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1439 * function
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1440 * FP - 8 [ T0 to traced func ] return address of traced
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1441 * function
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1442 * FP - 16 [ FP of traced func ] frame pointer of traced
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1443 * function
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1444 *
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1445 * FP - retval_off [ return value ] BPF_TRAMP_F_CALL_ORIG or
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1446 * BPF_TRAMP_F_RET_FENTRY_RET
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1447 * [ argN ]
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1448 * [ ... ]
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1449 * FP - args_off [ arg1 ]
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1450 *
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1451 * FP - nargs_off [ regs count ]
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1452 *
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1453 * FP - ip_off [ traced func ] BPF_TRAMP_F_IP_ARG
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1454 *
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1455 * FP - run_ctx_off [ bpf_tramp_run_ctx ]
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1456 *
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1457 * FP - sreg_off [ callee saved reg ]
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1458 *
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1459 */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1460
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1461 if (m->nr_args > LOONGARCH_MAX_REG_ARGS)
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1462 return -ENOTSUPP;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1463
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1464 if (flags & (BPF_TRAMP_F_ORIG_STACK | BPF_TRAMP_F_SHARE_IPMODIFY))
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1465 return -ENOTSUPP;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1466
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1467 stack_size = 0;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1468
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1469 /* Room of trampoline frame to store return address and frame pointer */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1470 stack_size += 16;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1471
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1472 save_ret = flags & (BPF_TRAMP_F_CALL_ORIG | BPF_TRAMP_F_RET_FENTRY_RET);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1473 if (save_ret) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1474 /* Save BPF R0 and A0 */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1475 stack_size += 16;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1476 retval_off = stack_size;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1477 }
retval_off is uninitialized on the else path.
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1478
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1479 /* Room of trampoline frame to store args */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1480 nargs = m->nr_args;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1481 stack_size += nargs * 8;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1482 args_off = stack_size;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1483
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1484 /* Room of trampoline frame to store args number */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1485 stack_size += 8;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1486 nargs_off = stack_size;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1487
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1488 /* Room of trampoline frame to store ip address */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1489 if (flags & BPF_TRAMP_F_IP_ARG) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1490 stack_size += 8;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1491 ip_off = stack_size;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1492 }
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1493
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1494 /* Room of trampoline frame to store struct bpf_tramp_run_ctx */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1495 stack_size += round_up(sizeof(struct bpf_tramp_run_ctx), 8);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1496 run_ctx_off = stack_size;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1497
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1498 stack_size += 8;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1499 sreg_off = stack_size;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1500
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1501 stack_size = round_up(stack_size, 16);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1502
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1503 /* For the trampoline called from function entry */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1504 /* RA and FP for parent function */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1505 emit_insn(ctx, addid, LOONGARCH_GPR_SP, LOONGARCH_GPR_SP, -16);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1506 emit_insn(ctx, std, LOONGARCH_GPR_RA, LOONGARCH_GPR_SP, 8);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1507 emit_insn(ctx, std, LOONGARCH_GPR_FP, LOONGARCH_GPR_SP, 0);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1508 emit_insn(ctx, addid, LOONGARCH_GPR_FP, LOONGARCH_GPR_SP, 16);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1509
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1510 /* RA and FP for traced function */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1511 emit_insn(ctx, addid, LOONGARCH_GPR_SP, LOONGARCH_GPR_SP, -stack_size);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1512 emit_insn(ctx, std, LOONGARCH_GPR_T0, LOONGARCH_GPR_SP, stack_size - 8);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1513 emit_insn(ctx, std, LOONGARCH_GPR_FP, LOONGARCH_GPR_SP, stack_size - 16);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1514 emit_insn(ctx, addid, LOONGARCH_GPR_FP, LOONGARCH_GPR_SP, stack_size);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1515
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1516 /* callee saved register S1 to pass start time */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1517 emit_insn(ctx, std, LOONGARCH_GPR_S1, LOONGARCH_GPR_FP, -sreg_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1518
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1519 /* store ip address of the traced function */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1520 if (flags & BPF_TRAMP_F_IP_ARG) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1521 move_imm(ctx, LOONGARCH_GPR_T1, (const s64)func_addr, false);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1522 emit_insn(ctx, std, LOONGARCH_GPR_T1, LOONGARCH_GPR_FP, -ip_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1523 }
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1524
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1525 /* store nargs number */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1526 move_imm(ctx, LOONGARCH_GPR_T1, nargs, false);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1527 emit_insn(ctx, std, LOONGARCH_GPR_T1, LOONGARCH_GPR_FP, -nargs_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1528
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1529 store_args(ctx, nargs, args_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1530
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1531 /* To traced function */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1532 /* Ftrace jump skips 2 NOP instructions */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1533 if (is_kernel_text((unsigned long)orig_call))
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1534 orig_call += LOONGARCH_FENTRY_NBYTES;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1535 /* Direct jump skips 5 NOP instructions */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1536 else if (is_bpf_text_address((unsigned long)orig_call))
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1537 orig_call += LOONGARCH_BPF_FENTRY_NBYTES;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1538
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1539 if (flags & BPF_TRAMP_F_CALL_ORIG) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1540 move_imm(ctx, LOONGARCH_GPR_A0, (const s64)im, false);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1541 ret = emit_call(ctx, (const u64)__bpf_tramp_enter);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1542 if (ret)
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1543 return ret;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1544 }
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1545
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1546 for (i = 0; i < fentry->nr_links; i++) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05 @1547 ret = invoke_bpf_prog(ctx, fentry->links[i], args_off, retval_off,
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1548 run_ctx_off, flags & BPF_TRAMP_F_RET_FENTRY_RET);
It's undefined behavior to pass uninitialized data to a function (unless
the function is inlined, I suppose).
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1549 if (ret)
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1550 return ret;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1551 }
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1552 if (fmod_ret->nr_links) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1553 branches = kcalloc(fmod_ret->nr_links, sizeof(u32 *), GFP_KERNEL);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1554 if (!branches)
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1555 return -ENOMEM;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1556
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1557 invoke_bpf_mod_ret(ctx, fmod_ret, args_off, retval_off, run_ctx_off, branches);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1558 }
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1559
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1560 if (flags & BPF_TRAMP_F_CALL_ORIG) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1561 restore_args(ctx, m->nr_args, args_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1562 ret = emit_call(ctx, (const u64)orig_call);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1563 if (ret)
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1564 goto out;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1565 emit_insn(ctx, std, LOONGARCH_GPR_A0, LOONGARCH_GPR_FP, -retval_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1566 emit_insn(ctx, std, regmap[BPF_REG_0], LOONGARCH_GPR_FP, -(retval_off - 8));
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1567 im->ip_after_call = ctx->ro_image + ctx->idx;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1568 /* Reserve space for the move_imm + jirl instruction */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1569 for (i = 0; i < LOONGARCH_LONG_JUMP_NINSNS; i++)
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1570 emit_insn(ctx, nop);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1571 }
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1572
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1573 for (i = 0; ctx->image && i < fmod_ret->nr_links; i++) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1574 int offset = (void *)(&ctx->image[ctx->idx]) - (void *)branches[i];
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1575 *branches[i] = larch_insn_gen_bne(LOONGARCH_GPR_T1, LOONGARCH_GPR_ZERO, offset);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1576 }
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1577
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1578 for (i = 0; i < fexit->nr_links; i++) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1579 ret = invoke_bpf_prog(ctx, fexit->links[i], args_off, retval_off, run_ctx_off, false);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1580 if (ret)
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1581 goto out;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1582 }
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1583
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1584 if (flags & BPF_TRAMP_F_CALL_ORIG) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1585 im->ip_epilogue = ctx->ro_image + ctx->idx;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1586 move_imm(ctx, LOONGARCH_GPR_A0, (const s64)im, false);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1587 ret = emit_call(ctx, (const u64)__bpf_tramp_exit);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1588 if (ret)
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1589 goto out;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1590 }
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1591
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1592 if (flags & BPF_TRAMP_F_RESTORE_REGS)
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1593 restore_args(ctx, m->nr_args, args_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1594
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1595 if (save_ret) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1596 emit_insn(ctx, ldd, LOONGARCH_GPR_A0, LOONGARCH_GPR_FP, -retval_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1597 emit_insn(ctx, ldd, regmap[BPF_REG_0], LOONGARCH_GPR_FP, -(retval_off - 8));
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1598 }
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1599
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1600 emit_insn(ctx, ldd, LOONGARCH_GPR_S1, LOONGARCH_GPR_FP, -sreg_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1601
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1602 /* trampoline called from function entry */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1603 emit_insn(ctx, ldd, LOONGARCH_GPR_T0, LOONGARCH_GPR_SP, stack_size - 8);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1604 emit_insn(ctx, ldd, LOONGARCH_GPR_FP, LOONGARCH_GPR_SP, stack_size - 16);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1605 emit_insn(ctx, addid, LOONGARCH_GPR_SP, LOONGARCH_GPR_SP, stack_size);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1606
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1607 emit_insn(ctx, ldd, LOONGARCH_GPR_RA, LOONGARCH_GPR_SP, 8);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1608 emit_insn(ctx, ldd, LOONGARCH_GPR_FP, LOONGARCH_GPR_SP, 0);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1609 emit_insn(ctx, addid, LOONGARCH_GPR_SP, LOONGARCH_GPR_SP, 16);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1610
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1611 if (flags & BPF_TRAMP_F_SKIP_FRAME)
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1612 /* return to parent function */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1613 emit_insn(ctx, jirl, LOONGARCH_GPR_ZERO, LOONGARCH_GPR_RA, 0);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1614 else
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1615 /* return to traced function */
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1616 emit_insn(ctx, jirl, LOONGARCH_GPR_ZERO, LOONGARCH_GPR_T0, 0);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1617
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1618 ret = ctx->idx;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1619 out:
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1620 kfree(branches);
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1621
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1622 return ret;
f9b6b41f0cf317 Chenghao Duan 2025-08-05 1623 }
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Powered by blists - more mailing lists