• Nick Desaulniers's avatar
    x86/extable: Prefer local labels in .set directives · 334865b2
    Nick Desaulniers authored
    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 4b5305de ("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, rega...
    334865b2
asm.h 5.92 KB