All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Eduard Zingerman <eddyz87@gmail.com>
Cc: oe-kbuild-all@lists.linux.dev, 0day robot <lkp@intel.com>
Subject: kernel/bpf/scev.c:1736:undefined reference to `__udivmoddi4'
Date: Thu, 01 Oct 2026 17:15:52 +0200	[thread overview]
Message-ID: <202610011731.DcYbvUbx-lkp@intel.com> (raw)

tree:   https://github.com/intel-lab-lkp/linux/commits/Eduard-Zingerman/bpf-track-may_write-flags-in-liveness/20260926-071959
head:   588faaac20422c91861700e863668674da9cc06f
commit: 280ac823486cf3ef2a002b680a99c1e162a16204 bpf: use SCEV to widen bounded loops
date:   5 days ago
config: i386-allnoconfig-bpf (https://download.01.org/0day-ci/archive/20261001/202610011731.DcYbvUbx-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261001/202610011731.DcYbvUbx-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/202610011731.DcYbvUbx-lkp@intel.com/

All errors (new ones prefixed by >>):

   ld: kernel/bpf/verifier.o: in function `scalar_step_lsh':
   kernel/bpf/verifier.c:15665:(.text+0x149c2): undefined reference to `__umoddi3'
   ld: kernel/bpf/verifier.o: in function `scalar_step_mul':
   kernel/bpf/verifier.c:15654:(.text+0x15c36): undefined reference to `__umoddi3'
   ld: kernel/bpf/scev.o: in function `compute_max_iters':
>> kernel/bpf/scev.c:1736:(.text+0xf7b): undefined reference to `__udivmoddi4'


vim +1736 kernel/bpf/scev.c

  1681	
  1682	/*
  1683	 * Loop with post-condition:
  1684	 *
  1685	 *    r0 = 0
  1686	 * l: ...                r0 ∈ [0,1,2] header executed 3 times
  1687	 *    r0 += 1            r0 ∈ [0,1,2]
  1688	 *    ...                r0 ∈ [1,2,3]
  1689	 *    if r0 != 3 goto l  r0 ∈ [1,2,3] backedge taken 2 times
  1690	 *    ...                r0 ∈ [3]
  1691	 *
  1692	 * SCEV at header: r0 = k
  1693	 * SCEV at latch:  r0 = 1 + k
  1694	 *
  1695	 * Loop with pre-condition:
  1696	 *
  1697	 *    r0 = 0
  1698	 * l: ...                r0 ∈ [0,1,2,3] header executed 4 times
  1699	 *    if r0 == 3 goto e  r0 ∈ [0,1,2,3] backedge taken 3 times
  1700	 *    r0 += 1            r0 ∈ [0,1,2]
  1701	 *    ...                r0 ∈ [1,2,3]
  1702	 *    goto l             r0 ∈ [1,2,3]
  1703	 * e: ...                r0 ∈ [3]
  1704	 *
  1705	 * SCEV at header: r0 = k
  1706	 * SCEV at latch:  r0 = k
  1707	 */
  1708	static bool compute_max_iters(struct bpf_verifier_env *env,
  1709				      struct bpf_func_state *st,
  1710				      struct linear_latch *latch,
  1711				      struct bpf_loop_iters *iters)
  1712	{
  1713		u64 base, step, diff, bound, initial, max_iters;
  1714		struct bpf_insn_aux_data *aux = env->insn_aux_data;
  1715		struct bpf_loop *loop = aux[bpf_loop_at_index(env, latch->insn_idx)].loop;
  1716		struct scev *scev = env->scev;
  1717		u8 op = latch->op;
  1718	
  1719		if (!eval_expr(env, scev, st, latch->base_expr, &base) ||
  1720		    !eval_expr(env, scev, st, latch->step_expr, &step) ||
  1721		    !eval_expr(env, scev, st, latch->bound_expr, &bound) ||
  1722		    !eval_expr(env, scev, st, latch->reg_expr, &initial))
  1723			return false;
  1724	
  1725		if (step == 0)
  1726			return false;
  1727		if ((s64)step == S64_MIN)
  1728			return false;
  1729		if ((s64)step < 0) {
  1730			/* Multiply both sides of the equation by -1, e.g. -2*i > -3 becomes 2*i < 3 */
  1731			op = bpf_flip_opcode(op);
  1732			step = -step;
  1733			swap(bound, initial);
  1734		}
  1735		diff = bound - initial;
> 1736		if (diff / step == U64_MAX)
  1737			return false;
  1738		switch (op) {
  1739		case BPF_JLT:
  1740			max_iters = (u64)initial >= (u64)bound ? 0 : div_round_up(diff, step);
  1741			break;
  1742		case BPF_JLE:
  1743			max_iters = (u64)initial >  (u64)bound ? 0 : diff / step + 1;
  1744			break;
  1745		case BPF_JSLT:
  1746			max_iters = (s64)initial >= (s64)bound ? 0 : div_round_up(diff, step);
  1747			break;
  1748		case BPF_JSLE:
  1749			max_iters = (s64)initial >  (s64)bound ? 0 : diff / step + 1;
  1750			break;
  1751		case BPF_JNE:
  1752			max_iters = diff % step ? U32_MAX : div_round_up(diff, step);
  1753			break;
  1754		default:
  1755			return false;
  1756		}
  1757	
  1758		if (max_iters > U32_MAX)
  1759			return false;
  1760	
  1761		/*
  1762		 * The latch is a conditional jump with one jump target exiting the loop.
  1763		 * Linear latch is matched only if the loop has a single backedge.
  1764		 * The loop still, however can have multiple exits.
  1765		 * In such case, conservatively assume that non-latch exit can happen
  1766		 * at any iteration, thus setting minimal number of iterations as 0.
  1767		 */
  1768		iters->max_header_count = max_iters + (base == 0 ? 1 : 0);
  1769		iters->min_header_count = loop->exits_cnt == 1 ? iters->max_header_count : 0;
  1770		iters->pre_cond = base == 0;
  1771		return true;
  1772	}
  1773	

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

                 reply	other threads:[~2026-10-01 15:16 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202610011731.DcYbvUbx-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=eddyz87@gmail.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.