From: David Laight <david.laight.linux@gmail.com>
To: "Maciej W. Rozycki" <macro@orcam.me.uk>
Cc: kernel test robot <lkp@intel.com>,
oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Linux Memory Management List <linux-mm@kvack.org>,
Nicolas Pitre <npitre@baylibre.com>,
linux-mips@vger.kernel.org,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Subject: Re: mips64-linux-ld: div64.c:undefined reference to `__multi3'
Date: Wed, 14 Jan 2026 10:31:03 +0000 [thread overview]
Message-ID: <20260114103103.216aa122@pumpkin> (raw)
In-Reply-To: <alpine.DEB.2.21.2601140453090.6421@angie.orcam.me.uk>
On Wed, 14 Jan 2026 06:19:02 +0000 (GMT)
"Maciej W. Rozycki" <macro@orcam.me.uk> wrote:
> On Tue, 13 Jan 2026, David Laight wrote:
>
> > > All errors (new ones prefixed by >>):
> > >
> > > mips64-linux-ld: lib/math/div64.o: in function `mul_u64_add_u64_div_u64':
> > > div64.c:(.text+0x84): undefined reference to `__multi3'
> > > >> mips64-linux-ld: div64.c:(.text+0x11c): undefined reference to `__multi3'
> > >
> >
> > This looks like a bug in the mips 'port'.
> > arch/mips/lib/multi3.c has the comment:
> >
> > /*
> > * GCC 7 & older can suboptimally generate __multi3 calls for mips64r6, so for
> > * that specific case only we implement that intrinsic here.
> > *
> > * See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82981
> > */
> > #if defined(CONFIG_64BIT) && defined(CONFIG_CPU_MIPSR6) && (__GNUC__ < 8)
> >
> > So this code is excluded for gcc 8.5 but the compiler is generating the call.
> >
> > Looking at the git log for that file there is a comment that includes:
> > "we wouldn't expect any calls to __multi3 to be generated from
> > kernel code".
> > Not true....
> > Not sure why the link didn't fail before though, something subtle must
> > have changed.
> >
> > I think the fix is just to remove the gcc version check.
>
> Or rather fix the version check. The GCC fix went in with GCC 10:
Does that mean the GCC 10 generates the multiply instructions and never calls
__multi3?
(Rather than just not using __multi3() for that specific example.)
In this case gcc knows the high bits are all zero - so just needs the two
instructions to generate the high and low parts.
David
>
> $ git log -1 --pretty=oneline 48b2123f6336
> 48b2123f6336ba6c06846d7c8b60bd14eaeae7ec re PR target/82981 (unnecessary __multi3 call for mips64r6 linux kernel)
> $ git show 48b2123f6336:gcc/BASE-VER
> 10.0.0
> $
>
> I don't know why the PR got it all wrong; I've fixed it now.
>
> Maciej
>
next prev parent reply other threads:[~2026-01-14 12:01 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-13 17:59 mips64-linux-ld: div64.c:undefined reference to `__multi3' kernel test robot
2026-01-13 20:04 ` David Laight
2026-01-13 21:58 ` David Laight
2026-01-14 6:19 ` Maciej W. Rozycki
2026-01-14 10:31 ` David Laight [this message]
2026-01-14 15:50 ` Maciej W. Rozycki
2026-01-14 17:34 ` David Laight
2026-01-14 20:59 ` Maciej W. Rozycki
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=20260114103103.216aa122@pumpkin \
--to=david.laight.linux@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lkp@intel.com \
--cc=macro@orcam.me.uk \
--cc=npitre@baylibre.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=tsbogend@alpha.franken.de \
/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.