Re: vmlinux.o: warning: objtool: mce_wrmsrl.constprop.0()+0x6b: call to __sanitizer_cov_trace_pc() leaves .noinstr.text section

From: Peter Zijlstra
Date: Fri Sep 03 2021 - 05:25:21 EST


On Thu, Sep 02, 2021 at 09:35:12PM +0200, Borislav Petkov wrote:
> On Sun, Aug 22, 2021 at 01:39:40PM +0800, kernel test robot wrote:
> > tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> > head: 9ff50bf2f2ff5fab01cac26d8eed21a89308e6ef
> > commit: e100777016fdf6ec3a9d7c1773b15a2b5eca6c55 x86/mce: Annotate mce_rd/wrmsrl() with noinstr
> > date: 11 months ago
> > config: x86_64-buildonly-randconfig-r003-20210822 (attached as .config)
> > compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
> > reproduce (this is a W=1 build):
> > # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e100777016fdf6ec3a9d7c1773b15a2b5eca6c55
> > git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
> > git fetch --no-tags linus master
> > git checkout e100777016fdf6ec3a9d7c1773b15a2b5eca6c55
> > # save the attached .config to linux build tree
> > mkdir build_dir
> > make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash
> >
> > If you fix the issue, kindly add following tag as appropriate
> > Reported-by: kernel test robot <lkp@xxxxxxxxx>
> >
> > All warnings (new ones prefixed by >>):
> >
> > >> vmlinux.o: warning: objtool: mce_wrmsrl.constprop.0()+0x6b: call to __sanitizer_cov_trace_pc() leaves .noinstr.text section
> > vmlinux.o: warning: objtool: do_machine_check()+0xe1a: call to mce_panic.isra.0() leaves .noinstr.text section
> > vmlinux.o: warning: objtool: exc_machine_check()+0x1af: call to __sanitizer_cov_trace_pc() leaves .noinstr.text section
> > vmlinux.o: warning: objtool: lock_is_held_type()+0x3c: call to check_flags() leaves .noinstr.text section
> > vmlinux.o: warning: objtool: __context_tracking_enter()+0x9d: call to __sanitizer_cov_trace_pc() leaves .noinstr.text section
> > vmlinux.o: warning: objtool: __context_tracking_exit()+0x42: call to __sanitizer_cov_trace_pc() leaves .noinstr.text section
>
> The sanitizer stuff is being NOPed out with newer compilers, says
> peterz. And I can confirm after testing with your .config and with
> gcc-11.

So I was wondering why they'd show up in any case, since objtool is
supposed to NOP them, but then I remembered I still have this patch
pending:

https://lore.kernel.org/r/20210624095147.818783799@xxxxxxxxxxxxx

Which I suspect will cure that for older GCC.