Re: WARNING: lib/test_bitmap.o(.text.unlikely+0x5c): Section mismatch in reference from the function bitmap_copy_clear_tail() to the variable .init.rodata:clump_exp

From: Max Filippov
Date: Fri Dec 13 2019 - 16:08:22 EST


Hi Andy,

On Fri, Dec 13, 2019 at 3:16 AM Andy Shevchenko
<andriy.shevchenko@xxxxxxxxxxxxxxx> wrote:
> On Tue, Dec 10, 2019 at 04:17:03AM +0800, kbuild test robot wrote:
>
> +Cc: Max for xtensa matters, perhaps he has an idea.
>
> > tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> > head: e42617b825f8073569da76dc4510bfa019b1c35a
> > commit: 30544ed5de431fe25d3793e4dd5a058d877c4d77 lib/bitmap: introduce bitmap_replace() helper
> > date: 5 days ago
> > config: xtensa-randconfig-a001-20191209 (attached as .config)
> > compiler: xtensa-linux-gcc (GCC) 7.5.0
> > reproduce:
> > wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> > chmod +x ~/bin/make.cross
> > git checkout 30544ed5de431fe25d3793e4dd5a058d877c4d77
> > # save the attached .config to linux build tree
> > GCC_VERSION=7.5.0 make.cross ARCH=xtensa
> >
> > If you fix the issue, kindly add following tag
> > Reported-by: kbuild test robot <lkp@xxxxxxxxx>
> >
> > All warnings (new ones prefixed by >>):
>
> I'm not sure I got this (esp. relation to my patch).
> The mentioned code definitely compiled for 32-bit (since only then mentioned
> bitmap API is in use). I have tried to reproduce on i386 compilation (gcc 9.x),
> but can't.

I was able to reproduce it on xtensa with gcc-9.
The issue comes from the test "test_replace", specifically
from the following call:
bitmap_replace(bmap, &exp2[0], &exp2[1], exp2_to_exp3_mask, nbits);

An invariable part of the call sequence used here is instantiated in
the section .text.unlikely with a reference to exp2_to_exp3_mask built
into it and it's called from the test_replace. It looks like a compiler bug
to me, I'd expect this code to be emitted to the .init.text, i.e the same
section where the function it was hoisted from resides.
And why "unlikely"? This code is definitely executed.

I'll file a bug against gcc.

--
Thanks.
-- Max