Messages in this thread | | | Date | Wed, 6 Apr 2022 12:27:51 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH] x86/extable: prefer local labels in .set directives |
| |
On Tue, Mar 29, 2022 at 01:21:45PM -0700, Nick Desaulniers wrote: > Bernardo reported an error that Nathan bisected down to > (x86_64) defconfig+LTO_CLANG_FULL+X86_PMEM_LEGACY. > > LTO vmlinux.o > ld.lld: error: <instantiation>:1:13: redefinition of 'found' > .set found, 0 > ^ > > <inline asm>:29:1: while in macro instantiation > extable_type_reg reg=%eax, type=(17 | ((0) << 16)) > ^ > > This appears to be another LTO specific issue similar to what was folded > into commit 4b5305decc84 ("x86/extable: Extend extable functionality"), > where the `.set found, 0` in DEFINE_EXTABLE_TYPE_REG in > arch/x86/include/asm/asm.h conflicts with the symbol for the static > function `found` in arch/x86/kernel/pmem.c. > > Assembler .set directive declare symbols with global visibility, so the > assembler may not rename such symbols in the event of a conflict. LTO > could rename static functions if there was a conflict in C sources, but > it cannot see into symbols defined in inline asm. > > The symbols are also retained in the symbol table, regardless of LTO. > > Give the symbols .L prefixes making them locally visible, so that they > may be renamed for LTO to avoid conflicts, and to drop them from the > symbol table regardless of LTO. > > Fixes: 4b5305decc84 ("x86/extable: Extend extable functionality") > Link: https://github.com/ClangBuiltLinux/linux/issues/1612 > Link: https://sourceware.org/binutils/docs/as/Symbol-Names.html#Local-Symbol-Names > Reported-by: Bernardo Meurer Costa <beme@google.com> > Debugged-by: Nathan Chancellor <nathan@kernel.org> > Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Thanks!
| |